#sign-in #solana #siws

siws-recap

基于 Sign-In with Solana 的机制,通过可扩展范围机制进行能力委托的知情同意

2 个版本

0.0.3 2024 年 5 月 2 日
0.0.2 2024 年 4 月 30 日
0.0.1 2024 年 4 月 30 日

#7#sign-in

Apache-2.0 OR MIT

26KB
506

SIWS ReCap

此软件包在 Solana 上实现了 EIP-5573,以 siws-rs 为基础。使用此软件包构建带有能力委托的钱包可签署的消息。生成的消息包含能力的两种表示:一种是无歧义的机器可读表示,另一种是人类可读的描述。这两种表示中,后者是从前者确定性地生成的。

消息格式

我们目前支持以下消息格式

SIWS 示例

以下示例

  • 具有无限制地 呈现 任何凭证的能力
  • 具有 呈现 类型 type1 凭证的能力(技术上冗余)
  • 具有无限制地从 kepler 位置 kepler:ens:example.eth://default/kv 列出、获取和检索 metadata 的能力
  • 具有无限制地从 kepler 位置 kepler:ens:example.eth://default/kv/publickepler:ens:example.eth://default/kv/dapp-space 列出、获取、检索 metadataputdelete 的能力
let msg: siws::mesasge::SiwsMessage = Builder::new()
    .with_actions_convert("urn:credential:type:type1", [("credential/present", [])])?
    .with_actions_convert(
        "kepler:ens:example.eth://default/kv",
        [("kv/list", []), ("kv/get", []), ("kv/metadata", [])],
    )?
    .with_actions_convert(
        "kepler:ens:example.eth://default/kv/public",
        [
            ("kv/list", []),
            ("kv/get", []),
            ("kv/metadata", []),
            ("kv/put", []),
            ("kv/delete", []),
        ],
    )?
    .with_actions_convert(
        "kepler:ens:example.eth://default/kv/dapp-space",
        [
            ("kv/list", []),
            ("kv/get", []),
            ("kv/metadata", []),
            ("kv/put", []),
            ("kv/delete", []),
        ],
    )?
    .build(siws::message::SiwsMessage {
        domain: "example.com".parse().unwrap(),
        address: "0000000000000000000000000000000000000000".into(),
        statement: None,
        uri: "did:key:example".parse().unwrap(),
        version: Some("1".into()),
        chain_id: "testnet",
        nonce: Some("mynonce1".into()),
        issued_at: Some("2022-06-21T12:00:00.000Z".parse().unwrap()),
        expiration_time: None,
        not_before: None,
        request_id: None,
        resources: vec![],
    })?;

这将生成以下 SIWS 消息

example.com wants you to sign in with your Solana account:
0000000000000000000000000000000000000000

I further authorize the state URI to perform the following actions on my behalf: (1) "kv": "get", "list", "metadata" for "kepler:ens:example.eth://default/kv". (2) "kv": "delete", "get", "list", "metadata", "put" for "kepler:ens:example.eth://default/kv/dapp-space". (3) "kv": "delete", "get", "list", "metadata", "put" for "kepler:ens:example.eth://default/kv/public". (4) "credential": "present" for "urn:credential:type:type1".

URI: did:key:example
Version: 1
Chain ID: testnet
Nonce: mynonce1
Issued At: 2022-06-21T12:00:00.000Z
Resources:
- urn:recap:eyJhdHQiOnsia2VwbGVyOmVuczpleGFtcGxlLmV0aDovL2RlZmF1bHQva3YiOnsia3YvZ2V0IjpbXSwia3YvbGlzdCI6W10sImt2L21ldGFkYXRhIjpbXX0sImtlcGxlcjplbnM6ZXhhbXBsZS5ldGg6Ly9kZWZhdWx0L2t2L2RhcHAtc3BhY2UiOnsia3YvZGVsZXRlIjpbXSwia3YvZ2V0IjpbXSwia3YvbGlzdCI6W10sImt2L21ldGFkYXRhIjpbXSwia3YvcHV0IjpbXX0sImtlcGxlcjplbnM6ZXhhbXBsZS5ldGg6Ly9kZWZhdWx0L2t2L3B1YmxpYyI6eyJrdi9kZWxldGUiOltdLCJrdi9nZXQiOltdLCJrdi9saXN0IjpbXSwia3YvbWV0YWRhdGEiOltdLCJrdi9wdXQiOltdfSwidXJuOmNyZWRlbnRpYWw6dHlwZTp0eXBlMSI6eyJjcmVkZW50aWFsL3ByZXNlbnQiOltdfX0sInByZiI6W119

依赖关系

~7.5MB
~140K SLoC