5 个版本 (2 个稳定版)
3.3.0 | 2023年1月5日 |
---|---|
3.1.4 | 2022年12月1日 |
0.2.0 | 2021年7月27日 |
0.1.1 | 2021年5月1日 |
0.1.0 | 2021年5月1日 |
#1829 in 魔法豆
每月下载量 701
73KB
1.5K SLoC
did:sol
程序
在Solana上的基于 did:sol
的程序。
创建DID
任何Solana公钥都可以是DID。 这意味着如果您有一个公钥 abc
,那么该密钥对应于去中心化标识符 did:sol:abc
。
这个DID被称为 generative
DID,因为它是由公钥生成的,并且没有其他与之相关的信息。
生成型DID有一个权限,即公钥本身(在本例中为 abc
)。
向DID添加信息
为了添加更多权限或任何其他信息到DID,必须在链上使用 initialize
指令进行初始化。
一旦初始化了DID,就可以使用 add_verification_method
指令向其中添加其他密钥。
DID账户
DID的信息存储在一个 DID 账户
中,这是一个从DID标识符推导出的PDA。
为了推导任何DID的PDA,使用以下函数
use sol_did::integrations::derive_did_account;
let (did_account, bump) = derive_did_account(key.to_bytes())
其中 key
是DID的标识符(在上面的例子中为 abc
)
为了减少推导DID账户所需的计算量,可以将 bump
值作为参数传递
use sol_did::integrations::derive_did_account_with_bump;
let did_account = derive_did_account_with_bump(key.to_bytes(), bump)?;
注意,在这种情况下,函数返回一个Result,以防bump值不正确。
检查一个密钥是否是DID的权限
为了在您的程序中使用DID,将DID账户添加到您的指令账户列表中。
Did账号是存储DID信息的。注意:这可以是生成性
(见上文)。
要检查一个密钥是否是DID的权威,请使用is_authority
指令。
use sol_did::integrations::is_authority;
let signer_owns_did = is_authority(
&did_account,
None,
&[],
&signer.to_bytes(),
None,
None
);
此函数在生成性和非生成性情况下都适用。在生成性情况下,did_account必须由系统程序拥有。
控制器关系
一个DID可以成为另一个DID的控制器
。
如果密钥a
是did:sol:abc
的权威,并且did:sol:abc
是did:sol:def
的控制器,那么以下is_authority
关系是正确的
use sol_did::integrations::is_authority;
let signer_owns_did = is_authority(
&abc_account,
None,
&[(def_account_info, def)],
&abc.to_bytes(),
None,
None
);
指令
初始化
参数
- size:
u32
账户
- didData
isMut
- authority
isSigner
,isMut
- payer
isSigner
,isMut
- 系统程序
调整大小
参数
- size:
u32
- ethSignature:
Option<Secp256k1RawSignature>
账户
- didData
isMut
- authority
isSigner
- payer
isSigner
,isMut
- 系统程序
关闭
参数
- ethSignature:
Option<Secp256k1RawSignature>
账户
- didData
isMut
- authority
isSigner
- destination
isMut
- 系统程序
添加验证方法
参数
- verificationMethod:
VerificationMethod
- ethSignature:
Option<Secp256k1RawSignature>
账户
- didData
isMut
- authority
isSigner
移除验证方法
参数
- fragment:
string
- ethSignature:
Option<Secp256k1RawSignature>
账户
- didData
isMut
- authority
isSigner
添加服务
参数
- service:
Service
- allowOverwrite:
bool
- ethSignature:
Option<Secp256k1RawSignature>
账户
- didData
isMut
- authority
isSigner
移除服务
参数
- fragment:
string
- ethSignature:
Option<Secp256k1RawSignature>
账户
- didData
isMut
- authority
isSigner
设置验证方法标志
参数
- flagsVm:
UpdateFlagsVerificationMethod
- ethSignature:
Option<Secp256k1RawSignature>
账户
- didData
isMut
- authority
isSigner
设置控制器
参数
- setControllersArg:
SetControllersArg
- ethSignature:
Option<Secp256k1RawSignature>
账户
- didData
isMut
- authority
isSigner
更新
参数
- updateArg:
UpdateArg
- ethSignature:
Option<Secp256k1RawSignature>
账户
- didData
isMut
- authority
isSigner
迁移
参数
账户
- didData
isMut
- authority
- payer
isSigner
,isMut
- legacyDidData
- 系统程序
部署
- Mainnet-beta: didso1Dpqpm4CsiCjzP766BGY89CAdD6ZBL68cRhFPc
- Devnet: didso1Dpqpm4CsiCjzP766BGY89CAdD6ZBL68cRhFPc
- Testnet: TODO...
APR参考
did:sol
程序在APR
依赖项
~20–30MB
~507K SLoC