多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

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

Indy SDK分布式账本交互详解:NYM交易、Schema与凭证定义全流程 Indy SDK分布式账本交互详解NYM交易、Schema与凭证定义全流程【免费下载链接】indy-sdkindy-sdk项目地址: https://gitcode.com/gh_mirrors/in/indy-sdkIndy 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交易通常需要以下步骤生成DID和验证密钥构建NYM请求签名并提交请求到账本查询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包含以下元素名称nameSchema的唯一标识名称版本versionSchema的版本号用于版本控制属性列表attr_names凭证中包含的属性名称数组2.2 创建和发布Schema的步骤创建并发布Schema到账本的流程如下使用issuer_create_schema创建Schema构建Schema请求签名并提交请求到账本从账本获取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 创建凭证定义的流程创建凭证定义的步骤如下从账本获取已发布的Schema使用issuer_create_and_store_credential_def创建凭证定义构建凭证定义请求签名并提交请求到账本以下是创建凭证定义的示例代码# 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和凭证定义结合起来形成一个完整的可验证凭证发行流程创建身份通过NYM交易在账本上注册发行者身份定义Schema创建并发布凭证的属性结构创建凭证定义基于Schema创建包含签名密钥的凭证定义发行凭证使用凭证定义创建具体的可验证凭证验证凭证验证者使用账本上的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),仅供参考
返回列表