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 魔法豆

Download history 143/week @ 2024-03-06 258/week @ 2024-03-13 227/week @ 2024-03-20 204/week @ 2024-03-27 215/week @ 2024-04-03 203/week @ 2024-04-10 212/week @ 2024-04-17 209/week @ 2024-04-24 187/week @ 2024-05-01 192/week @ 2024-05-08 184/week @ 2024-05-15 180/week @ 2024-05-22 180/week @ 2024-05-29 147/week @ 2024-06-05 184/week @ 2024-06-12 160/week @ 2024-06-19

每月下载量 701

MIT 许可证

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的控制器

如果密钥adid:sol:abc的权威,并且did:sol:abcdid: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
  • 系统程序

部署

APR参考

  • did:sol程序在APR

依赖项

~20–30MB
~507K SLoC