Hyperledger Indy 作为超级账本中有关数字身份的核心组成部分,它实现了一个分布式账本技术以及在其上构建能够跟账本进行互动的应用程序。Hyperledger Indy 主要由两个部分组成:indy-sdk 以及 indy-node。
indy-sdk
Indy sdk 是一个能够创建同 Indy 网络进行互动的应用程序的软件开发包(software development kit, SDK),构建的这个应用程序通常被称为 agent。
Indy sdk 大部分都是用 Rust 编程语言编写的,最终会被编译成被称为 “libindy” 的 “C-callable” 类库,这里的 C-callable 意思是说这个类库里的组件具有标准的接口,所以它能够被大多数常见的编程语言所调用。同时 Indy 还提供了很多不同种语言的 “wrapper”。你可以使用 Python,Java,C#(.NET) 或者 Nodejs 来创建你的 Indy agents。
Indy-sdk 的两个组成部分:Indy 账本客户端以及 Indy 存储
Indy 账本客户端
主要负责如何跟 Indy 网络/账本进行互动。跟账本进行互动的基本流程如下:
- 应用程序准备需要发送给账本的消息,包括消息的类型,参数等
- 如果是对账本的写入操作的话,应用程序需要使用自己的私钥对消息进行加密。这样做确保了消息确实是由该应用程序发送的,并且只有自己能够解密。
- 消息会被发送给网络中的一个节点
- 应用程序会等待最后返回的结果。如果是一个写入操作成功了的话,是应该能够返回该次 transaction 在账本中的排序号的。这个信息需要 agent 及时存储起来,以备后续操作使用。
目前 Indy 的账本是不支持按照关键字来查询的,agent 必须要明确的知道 transaction 的排序号或者数据的主键(比如 DID)。
Indy 存储
Indy-sdk 的另外一个功能就是实现了对身份相关数据(比如 DID,私钥可验证的凭证等)的安全存储。早期的 Indy 将这个存储方式称为 “钱包”,这个说法将会在 Aries 中 被改称为 “密钥管理服务 Key Management Service, KMS”。
Indy 默认会使用 SQLite 数据库,但是 British Columbia 政府实现并贡献了 PostgreSQL 的数据库实现,更适合企业使用。
Indy 存储里都是比较简单的键值对的表,几乎所有的数据都是经过加密的。对于需要使用私钥来进行的操作,私钥是不会在用户代码中出现的。
indy-node
是 Indy 构成的 blockchain/DLT 网络。由 python 编写,其中包含了所有支持节点运行以及实现了DLT。
网友评论