为基于 Hyperledger Fabric v0.6 的区块链网络开发客户端应用程序(1)
- UID
- 1066743
|
为基于 Hyperledger Fabric v0.6 的区块链网络开发客户端应用程序(1)
借助 Hyperledger Fabric Client SDK for Node.js,您可以轻松地使用 API 来与基于 Hyperledger Fabric v0.6 的区块链交互。本教程将介绍如何编写客户端应用程序中的一些最常见和必要的功能。教程中的所有代码示例都包含在可重用的中,您可以下载并自定义它来满足您的需求。
,本教程是最后一部分,您将学习如何开发一个 Node.js 客户端应用程序,用它来与基于 Hyperledger Fabric v0.6 的区块链网络通信。您将了解注册、登记和通过 TCert 执行访问控制,并获取设置区块链网络、基于 Cloudant 的键值存储,以及用于调用和查询区块链的 API 层的代码。按照本教程中的步骤,可以将中开发的链代码部署到 IBM Bluemix® 上的 上,并从客户端应用程序调用它。
前提条件致 Java 开发人员想使用 Java™ 语言为 Hyperledger Fabric v0.6 编写链代码?请参阅 。
我们将继续介绍中介绍的住房贷款申请用例。
- 本教程将引用中编写的链代码,所以在继续之前请复习该教程。
- 您应该熟悉 Node.js 和 Bluebird promise。
- 应该已经在机器上安装了 。
- 应该已经在机器上安装了 。
- 应该已经在机器上安装了 。
- 您需要一个 Bluemix 帐户()。
- 您需要样本代码包(从本教程)。
重要术语和概念Hyperledger Fabric Client SDK 是 Hyperledger Fabric v0.6 的官方 SDK。它是用 TypeScript 编写的,拥有丰富的 API,可通过 Node.js 应用程序与基于 Hyperledger Fabric 的区块链网络进行交互。该 SDK 使用 gRPC 与区块链网络通信。
- 链。链是让程序运转起来的顶级对象。链对象用于配置对等节点、成员服务、安全性、键值存储和事件中心。链对象能访问可用的成员对象,而成员对象用于在区块链网络上执行事务。
- 成员。成员对象表示能在区块链网络上执行事务的实体。成员对象用于向成员服务注册和登记。完成注册和登记后,成员对象将收到的证书存储在以前配置的键值存储中。然后可以使用成员对象与区块链网络上的对等节点进行通信,以便调用事务和查询账本。
- 键值存储。键值存储用于存储成员元数据和登记证书。该 SDK 为键值存储提供了一种基于文件的默认实现,可用在客户端应用程序中。但是,建议您自行为键值存储编写更安全、更容易访问的实现。我将带领您在我们的客户端中实现一个基于 Cloudant NoSQL 数据库的键值存储。
- 注册、登记和访问控制。要与基于 Hyperledger Fabric 的区块链网络交互,用户需要向证书颁发机构 (CA) 注册和登记。CA 生成事务证书,需要这些证书才能在区块链网络上执行事务,它们也可用于实现基于属性的访问控制。CA 提供了几种不同的证书服务:
- 登记证书颁发机构 (ECA)。ECA 使新用户能向区块链网络注册,并在以后请求一个登记证书对。这个证书对包含两个证书,一个用于数据签名,另一个用于数据加密。
- 事务证书颁发机构 (TCA)。用户在区块链网络中登记后,可以请求事务证书 (TCert)。要在区块链网络上部署链代码和调用链代码事务,需要使用 TCert。也可以在 TCert 中嵌入经过加密的用户定义属性。然后可以在链代码中访问这些属性来执行访问控制。一种确保隐私的最佳做法是为每个事务请求一个不同的 TCert。这是该 SDK 的默认行为。
- TLS 证书颁发机构。TLS 证书保护客户端、对等节点和 CA 之间的通信渠道。TLS 证书可从 TLS 证书颁发机构 (TCA) 请求获得。
- 属性证书颁发机构 (ACA)。ACA 将每个用户的属性和从属关系存储在一个数据库中。它证明某个特定用户是否拥有这些属性。对于经过认证的属性,ACA 会返回一个 ACert,其中包含加密的属性值。
此图展示了用户、登记证书颁发机构 (ECA)、事务证书颁发机构 (TCA) 和属性证书颁发机构 (ACA) 之间的交互流。
在上图中:
- 用户向 ECA 发出注册请求并传入一个登记 ID、角色、从属关系和属性键值对等信息。
- 如果传入的登记 ID 尚未注册,那么 ECA 会向用户回复一个一次性密码。
- 用户向 ECA 发出登记请求,并传入一个签名和加密密钥,以及在上一步中获得的一次性密码令牌。
- 完成验证后,ECA 会返回一个登记证书对。这个证书对包含两个证书,一个用于签名,另一个用于加密。然后,这个证书对连同其他用户元数据一起被存储在链对象中配置的键值存储中。
- ECA 向 ACA 发出一个获取属性请求,并传入第 4 步中生成的 ECert。
- ACA 将 ECert 连同其他细节一起存储在它的数据库中,这些细节包括从属关系、属性键/值对和它们的有效性等。
- 用户向 TCA 请求 TCert,TCert 可用于调用链代码。用户传入 ECert、要生成的 TCert 数量和一组属性,这些属性可以是第 1 步中传入的一组属性的子集。
- TCA 向 ACA 发出请求,以确保用户拥有这些属性。TCA 传入 ECert 和这组属性。
- ACA 在其数据库中查找这些属性。
- 如果未找到任何属性,则返回一个错误。如果找到所有或部分属性,则将一个包含已找到的属性的 ACert 返回给 TCA。
- TCA 创建一批 TCert 并将它们返回给用户。每个 TCert 都包含有效的属性。
开始实践本教程中和可供的代码样本是使用以下软件和版本来开发和测试的:
- Node v4.5.0
- NPM v2.15.9
- Git v2.7.4
|
|
|
|
|
|