Hyperledger Fabric 傻瓜书

企业区块链平台

Hyperledger Fabric 傻瓜书

各位读者下午好,我叫 Nikolai Nefedov,我是 IBM 技术专家,在本文中我想向您介绍区块链平台——Hyperledger Fabric。 该平台旨在构建企业级业务应用程序(企业级)。 文章的水平是针对没有IT技术基础知识的没有准备的读者。

Hyperledger Fabric 是一个开源项目,是 Linux 基金会联盟 Hyperledger 开源项目的分支之一。 Hyperledger Fabric 最初由 Digital Assets 和 IBM 推出。 Hyperledger Fabric 平台的主要特点是专注于企业应用程序。 因此,该平台的开发考虑到了交易的高速度和低成本,以及所有参与者的身份识别。 这些好处是通过分离交易验证服务和形成分布式注册表的新块,以及使用证书颁发机构和授权参与者来实现的。

我的文章是关于 Hyperledger Fabric 的一系列文章的一部分,在这些文章中我们描述了一个用于注册大学学生的系统项目。

Hyperledger Fabric 的总体架构

Hyperledger Fabric 是一个分布式区块链网络,由安装在网络节点上的各种功能组件组成。 Hyperledger Fabric 组件是 Docker 容器,可以从 DockerHub 免费下载。 Hyperledger Fabric 也可以在 Kubernetes 环境中运行。

为了编写智能合约(Hyperledger Fabric 上下文中的链代码),我们使用了 Golang(尽管 Hyperledger Fabric 允许您使用其他语言)。 为了开发自定义应用程序,在我们的例子中,Node.js 与相应的 Hyperledger Fabric SDK 一起使用。

节点运行业务逻辑(智能合约)——链代码,存储分布式注册表的状态(账本数据)并执行其他平台系统服务。 一个节点只是一个逻辑单元,不同的节点可以存在于同一台物理服务器上。 更重要的是节点如何分组(可信域)以及它们与区块链网络的哪些功能相关联。

总体架构如下所示:

Hyperledger Fabric 傻瓜书

图 1. Hyperledger Fabric 的总体架构

用户应用程序(提交客户端)是用户与区块链网络一起工作的应用程序。 要工作,您需要通过授权并拥有在网络上进行各种操作的适当权限。

对等点(节点)有几个角色:

  • Endorsing Peer 是模拟交易执行(执行智能合约代码)的节点。 在验证并执行智能合约后,节点将执行结果连同其签名返回给客户端应用程序。
  • 排序服务是在多个节点上的分布式服务,它用于形成分布式账本的新块并创建执行交易的顺序。 Ordering Service 不会向注册表添加新块(移动到 Committing Peers 以获得更好的性能)。
  • Committing Peer - 包含分布式注册表并向注册表添加新块(由排序服务形成)的节点。 所有 Committing Peer 都包含分布式分类帐的本地副本。 Committing Peer 在本地添加新块之前,检查块内所有交易的有效性。

背书策略是检查交易有效性的策略。 这些策略定义了必须在其上执行智能合约以使交易被识别为有效的必要节点集。

分布式注册表 - Lerger - 由两部分组成:WolrldState(也称为状态数据库)和 BlockChain。

区块链是一个区块链,存储分布式账本对象发生的所有变化的记录。

WolrldState 是一个分布式注册表组件,存储所有分布式注册表对象的当前(极值)值。

WorldState 是一个数据库,在基本版本 - LevelDB 或更复杂的版本 - CouchDB 中,其中包含键值对,例如:名字 - Ivan,姓氏 - Ivanov,在系统中的注册日期 - 12.12.21/17.12.1961/XNUMX,日期出生 - XNUMX 年 XNUMX 月 XNUMX 日等WorldState 和分布式账本必须在给定通道的所有成员之间保持一致。

由于 Hyperledger Fabric 是一个所有参与者都已知并经过身份验证的网络,因此这里使用了一个专门的证书颁发机构——CA(Certification Authority)。 CA 在 X.509 标准和公钥基础设施 - PKI 的基础上运作。

会员服务是一种服务,会员通过该服务验证对象是否属于特定组织或渠道。

在大多数情况下,交易是分布式分类帐中新数据的记录。
还有用于创建通道或智能合约的交易。 交易由用户应用程序发起,并以写入分布式账本结束。

通道(Channel)是由区块链网络中的两个或多个参与者组成的封闭子网,旨在在有限但已知的参与者圈子内进行保密交易。 通道由参与者决定,其分布式账本、智能合约、订购服务、WorldState。 每个通道成员都必须被授权访问通道并有权执行各种交易。 使用会员服务执行授权。

典型交易执行场景

接下来,我想以我们项目的例子来说说一个典型的执行交易的场景。

作为我们内部项目的一部分,我们创建了一个 Hyperledger Fabric 网络,旨在注册和记录进入大学的学生。 我们的网络由两个组织组成,分别由大学 A 和大学 B 拥有。每个组织都包含一个客户端应用程序,以及它自己的承诺和认可对等体。 我们还使用通用的订购服务、会员服务和证书颁发机构服务。

1)交易发起

用户应用程序使用 Hyperledger Fabric SDK 发起交易请求并将请求发送到具有智能合约的节点。 该请求可以是更改或读取分布式账本(Ledger)。 如果我们考虑一个大学生会计系统的测试配置示例,那么客户端应用程序向大学 A 和 B 的节点发送交易请求,这些请求包含在被调用智能合约的背书策略中。 节点 A 是位于注册新生的大学中的节点,节点 B 是位于另一所大学中的节点。 为了将交易保存到分布式账本中,根据业务逻辑必须批准交易的所有节点都必须成功执行具有相同结果的智能合约。 节点 A 的用户应用程序,使用 Hyperledger Fabric SDK 工具,接收 Endorsement policy(批准策略)并找出向哪些节点发送交易请求。 这是调用(调用)某个智能合约(链代码函数)以读取或写入某些数据到分布式分类帐的请求。 从技术上讲,客户端 SDK 使用相应的函数,其 API 传递一个带有交易参数的对象,还添加一个客户端签名,并通过 gRPC 上的协议缓冲区将此数据发送到适当的节点(背书节点)。

Hyperledger Fabric 傻瓜书
图 2. 交易发起

2) 智能合约执行

节点(背书节点)在收到执行交易的请求后,检查客户端签名,如果一切正常,则它们获取带有请求数据的对象并运行智能合约执行的模拟(链代码功能)有了这些数据。 智能合约是交易的业务逻辑,一组特定的条件和指令(在我们的例子中,这是一个学生检查,是新学生,还是他已经注册,年龄检查等)。 要执行智能合约,您还需要来自 WorldState 的数据。 作为在 Endorsing peer 上的智能合约模拟的结果,获得了两个数据集 - Read Set 和 Write Set。 Read Set 和 Write Set 是原始的和新的 WorldState 值。 (新的 - 在通过模拟智能合约获得的意义上)。

Hyperledger Fabric 傻瓜书
图 3. 智能合约执行

3) 返回数据给客户端应用

智能合约模拟完成后,Endorsing Peers 将初始数据和模拟结果,以及由其证书签名的 RW Set 返回给客户端应用程序。 在此阶段,分布式账本没有变化。 客户端应用程序验证 Endorsing Peer 的签名,并将发送的原始交易数据与返回的数据进行比较(即检查模拟交易的原始数据是否已损坏)。 如果事务只是为了从注册表中读取数据,那么客户端应用程序相应地接收到必要的读取集,并且事务通常在不更改分布式注册表的情况下成功完成。 在应该更改注册表中的数据的事务的情况下,客户端应用程序还检查是否已实施背书策略。 客户端应用程序可能不检查背书策略执行的结果,但在这种情况下,Hyperledger Fabric 平台提供了在向注册表添加事务的阶段检查节点(Comitting Peers)上的策略。

Hyperledger Fabric 傻瓜书
图 4. 将数据返回给客户端应用程序

4) 发送 RW 集给排序节点

客户端应用程序将交易连同相关数据发送到排序服务。 这包括 RW 集、背书节点的签名和通道 ID。

排序服务——顾名思义,该服务的主要功能是以正确的顺序构建传入的交易。 以及分布式注册表新块的形成和保证将新生成的块交付给所有 Committing 节点,从而确保包含分布式注册表的所有节点(Committing peer)上的数据一致性。 同时,Ordering 服务本身不会以任何方式更改注册表。 Ordering Service 是系统的重要组成部分,因此它是一个由多个节点组成的集群。 排序服务不检查交易的有效性,它只是接受具有特定通道 ID 的交易,按特定顺序安排传入的交易,并从中形成分布式分类账的新块。 一项订购服务可以同时服务于多个渠道。 Ordering Service 包括一个 Kafka 集群,它维护着正确的(不变的)事务队列(见第 7 点)。

Hyperledger Fabric 傻瓜书
图 5. 将 RW 集发送到排序节点

5) 将生成的块发送给 Committing Peer

在排序服务中形成的块被广播到所有网络节点。 每个节点收到一个新块后,检查它是否符合背书政策,检查所有背书节点是否收到相同的结果(写集)作为智能合约模拟的结果,并检查原始值是否具有自交易开始以来发生了变化(即 - Read Set - 智能合约从 WorldState 读取的数据)。 如果满足所有条件,则交易被标记为有效,否则,交易将收到无效状态。

Hyperledger Fabric 傻瓜书
图 6. 将生成的块发送到 Committing Peer

6) 向注册表添加块

每个节点向其分布式账本的本地副本添加一个事务,如果事务有效,则将 Write Set 应用于 WorldState(当前状态),分别写入受事务影响的对象的新值. 如果一个交易收到一个无效的令牌(例如,在同一个区块中有两个具有相同对象的交易,那么其中一个交易将无效,因为原始值已经被另一个交易更改了). 该交易也被添加到带有无效标记的分布式账本中,但该交易的 Write Set 不适用于 WorldState 的当前状态,因此不会更改参与交易的对象。 之后,向用户应用程序发送一条通知,告知交易已永久添加到分布式账本中,以及交易的状态,即是否有效……

Hyperledger Fabric 傻瓜书
图 7. 向注册表添加块

订购服务

Ordering Service 由一个 Kafka 集群和相应的 ZooKeeper 节点以及一个位于 Ordering 服务客户端和 Kafka 集群之间的 Ordering Service Nodes (OSN) 组成。 Kafka集群是一个分布式的、容错的流(消息)管理平台。 Kafka 中的每个通道(主题)都是一个不可变的记录序列,只支持添加新记录(不能删除现有记录)。 下面给出了主题结构的说明。 正是 Kafka 的这个属性被用来构建区块链平台。

Hyperledger Fabric 傻瓜书
取自 kafka.apache.org

  • 图 8. 订购服务主题结构*

有用的链接

Youtube - 使用 Hyperledger 项目为业务构建区块链
Hyperledger Fabric 文档
Hyperledger fabric:许可区块链的分布式操作系统

致谢

对帮助我准备这篇文章的同事表示深深的感谢:
尼古拉玛丽娜
伊戈尔·哈波夫
德米特里·戈尔巴乔夫
亚历山大·泽姆佐夫
叶卡捷琳娜·古谢娃

来源: habr.com

添加评论