ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Indy SDK分布式账本交互详解:NYM交易、Schema与凭证定义全流程

Indy SDK分布式账本交互详解:NYM交易、Schema与凭证定义全流程

Indy SDK分布式账本交互详解:NYM交易、Schema与凭证定义全流程

【免费下载链接】indy-sdkindy-sdk项目地址: https://gitcode.com/gh_mirrors/in/indy-sdk

Indy SDK是一个功能强大的分布式账本交互工具包,它提供了完整的身份管理和凭证处理能力。通过NYM交易创建身份标识、定义Schema规范数据结构、发布凭证定义实现可验证凭证的发行,构成了 Indy 生态系统中核心的工作流。本文将详细介绍这三个关键环节的实现流程,帮助开发者快速掌握分布式身份交互的核心技术。

一、NYM交易:构建分布式身份的基石

NYM交易是 Indy 账本中最基础的身份记录操作,用于在分布式账本上注册和管理DID(去中心化标识符)。通过NYM交易,我们可以创建新的DID、设置或轮换验证密钥,以及分配用户角色。

1.1 NYM交易的核心要素

一个完整的NYM交易包含三个关键字段:

  • dest:目标DID,即要创建或更新的身份标识符
  • role:用户角色,如Steward、Trust Anchor等,决定了该身份在账本中的权限
  • verkey:验证密钥,用于验证该DID签署的交易

1.2 创建NYM交易的流程

创建NYM交易通常需要以下步骤:

  1. 生成DID和验证密钥
  2. 构建NYM请求
  3. 签名并提交请求到账本
  4. 查询NYM记录确认交易结果

在 Indy SDK 中,可以通过以下命令构建NYM请求:

// 构建NYM请求示例代码 let nym_request = ledger::build_nym_request(&steward_did, &trust_anchor_did, Some(&verkey), Some("TRUST_ANCHOR"), None).unwrap();

1.3 NYM交易的应用场景

NYM交易广泛应用于以下场景:

  • 新身份加入分布式账本
  • 身份验证密钥的更新与轮换
  • 身份角色的分配与变更
  • 身份信息的查询与验证

二、Schema:定义可验证凭证的数据结构

Schema(模式)是描述凭证中包含的属性列表的语义结构,它定义了凭证的"格式"和"内容规范"。在 Indy 生态系统中,Schema由可信机构(如政府、企业)创建并发布到账本,供发行者用于创建具体的凭证。

2.1 Schema的基本组成

一个标准的Schema包含以下元素:

  • 名称(name):Schema的唯一标识名称
  • 版本(version):Schema的版本号,用于版本控制
  • 属性列表(attr_names):凭证中包含的属性名称数组

2.2 创建和发布Schema的步骤

创建并发布Schema到账本的流程如下:

  1. 使用issuer_create_schema创建Schema
  2. 构建Schema请求
  3. 签名并提交请求到账本
  4. 从账本获取Schema并验证

以下是创建Schema的示例代码:

// Node.js创建Schema示例 const {id: schemaId, schema} = await indy.issuerCreateSchema(issuerDid, 'Transcript', '1.2', ['first_name', 'last_name', 'degree', 'status', 'year', 'average', 'ssn']);

2.3 Schema的特点与最佳实践

  • 不可变性:一旦发布到账本,Schema不能被修改,只能创建新版本
  • 版本控制:通过版本号管理Schema的演进
  • 属性限制:属性数量不能超过125个
  • 命名规范:名称和版本应具有描述性,便于识别和管理

三、凭证定义:实现可验证凭证的发行

凭证定义(Credential Definition)是发行者基于特定Schema创建的,包含用于签署凭证的公钥和相关元数据。它是连接Schema与实际凭证的关键环节。

3.1 凭证定义的作用

凭证定义主要有以下作用:

  • 关联特定的Schema
  • 存储用于签署凭证的公钥
  • 定义凭证的类型和特性
  • 支持凭证的验证过程

3.2 创建凭证定义的流程

创建凭证定义的步骤如下:

  1. 从账本获取已发布的Schema
  2. 使用issuer_create_and_store_credential_def创建凭证定义
  3. 构建凭证定义请求
  4. 签名并提交请求到账本

以下是创建凭证定义的示例代码:

# Python创建凭证定义示例 cred_def_id, cred_def_json = await indy.issuer_create_and_store_credential_def(wallet_handle, issuer_did, schema_json, tag, 'CL', json.dumps({"support_revocation": True}))

3.3 凭证定义与Schema的关系

凭证定义与Schema是一对多的关系:

  • 一个Schema可以有多个凭证定义
  • 每个凭证定义由不同的发行者创建
  • 凭证定义继承Schema的属性结构
  • 凭证定义添加了发行者的签名信息

四、完整工作流:从身份创建到凭证发行

将NYM交易、Schema和凭证定义结合起来,形成一个完整的可验证凭证发行流程:

  1. 创建身份:通过NYM交易在账本上注册发行者身份
  2. 定义Schema:创建并发布凭证的属性结构
  3. 创建凭证定义:基于Schema创建包含签名密钥的凭证定义
  4. 发行凭证:使用凭证定义创建具体的可验证凭证
  5. 验证凭证:验证者使用账本上的Schema和凭证定义验证凭证真伪

五、实际应用与代码示例

5.1 注册Trust Anchor身份

// 构建NYM请求添加Trust Anchor println!("7. Build NYM request to add Trust Anchor to the ledger"); let nym_request = ledger::build_nym_request(&steward_did, &trust_anchor_did, Some(&verkey), Some("TRUST_ANCHOR"), None).unwrap(); // 发送NYM请求 println!("8. Sending NYM request to ledger"); let _response = ledger::sign_and_submit_request(pool_handle, wallet_handle, &steward_did, &nym_request).unwrap();

5.2 创建并发布Schema

// 创建Schema println!("9. Create Schema and Build the SCHEMA request to add new schema to the ledger as a Steward"); let (schema_id, schema_json) = anoncreds::issuer_create_schema(&trust_anchor_did, "gvt", "1.0", &["name", "age", "sex", "height"]).unwrap(); let schema_request = ledger::build_schema_request(&trust_anchor_did, &serde_json::from_str(&schema_json).unwrap()).unwrap(); // 发送Schema请求 let _response = ledger::sign_and_submit_request(pool_handle, wallet_handle, &trust_anchor_did, &schema_request).unwrap();

5.3 创建凭证定义

// 创建凭证定义 println!("11. Creating and storing CREDENTIAL DEFINITION using anoncreds as Trust Anchor, for the given Schema"); let (cred_def_id, cred_def_json) = anoncreds::issuer_create_and_store_credential_def(wallet_handle, &trust_anchor_did, &schema_json, "tag", "CL", Some(r#"{"support_revocation": true}"#)).unwrap();

通过以上步骤,我们完成了从身份创建到凭证发行的全流程。Indy SDK提供了丰富的API和工具,使得分布式身份和可验证凭证的实现变得简单而高效。无论是金融、医疗、教育还是供应链等领域,Indy SDK都能为身份管理和数据交换提供安全、可信的技术支持。

要深入了解更多细节,可以参考项目中的官方文档和示例代码:

  • 保存Schema和凭证定义
  • 发行凭证
  • 验证凭证

通过掌握这些核心概念和操作流程,开发者可以快速构建基于分布式账本的身份应用,为用户提供安全、隐私保护的数字身份体验。

【免费下载链接】indy-sdkindy-sdk项目地址: https://gitcode.com/gh_mirrors/in/indy-sdk

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

返回列表