
下午好,亲爱的读者,我叫Nikolai Nefedov,我是IBM的技术顾问,在本文中,我想向您介绍区块链平台-Hyperledger Fabric。 该平台旨在在企业级别(企业类)构建业务应用程序。 文章级别-适用于具有IT技术基础知识的未经培训的读者。
Hyperledger Fabric是一个开源项目,是Linux Foundation财团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用于开发自定义应用程序。
节点执行业务逻辑(智能合约)-链码,存储分布式注册表的状态(分类帐数据)并执行平台的其他系统服务。 一个节点只是一个逻辑单元,同一物理服务器上可以存在不同的节点。 更重要的是节点如何分组(受信任的域)以及与之关联的区块链网络的功能。
总体架构如下:

图1. Hyperledger Fabric的一般架构
用户应用程序(提交客户端)-用户与区块链网络一起使用的应用程序。 要进行工作,您必须被授权并拥有网络上各种操作的适当权限。
同行有几种角色:
- 支持对等节点-一个模拟交易执行(执行智能合约代码)的节点。 在检查并执行智能合约后,节点将返回客户端应用程序的结果及其签名。
- 订购服务-几个节点上的分布式服务,用于形成分布式注册表的新块并创建一系列交易。 订购服务不会向注册表中添加新的块(为了提高性能,此功能已转移到“提交对等方”)。
- 提交对等体-一个节点,其中包含分布式注册表,并向该注册表中添加了新的块(订购服务由其形成)。 所有提交对等方均包含分布式注册表的本地副本。 在本地添加新块之前,提交对等方会检查该块内的所有事务的有效性。
背书政策是一项交易验证政策。 这些策略确定必须在其上执行智能合约以使交易被识别为有效的必要节点集。
分布式注册表-Lerger-由两部分组成:WolrldState(也称为-State DataBase)和BlockChain。
BlockChain是一个块链,用于存储有关分布式注册表对象发生的所有更改的记录。
WolrldState是分布式注册表的组件,该组件将所有对象的当前(极值)值存储在分布式注册表中。
WorldState是基本版本的数据库-LevelDB或更复杂的版本-CouchDB,其中包含键值对,例如:名字-Ivan,姓氏-Ivanov,系统中的注册日期-12/12/21,出生日期-12/17/1961,等 WorldState和分布式注册表必须与此通道的所有成员一致。
由于Hyperledger Fabric是一个网络,在此网络中所有参与者都是已知的并经过身份验证,因此此处使用专用的证书颁发机构-CA(证书颁发机构)。 CA在X.509标准和公共密钥基础结构PKI的基础上运行。
成员资格服务是一项服务,参与者可以通过该服务来验证对象在特定组织或渠道中的所有权。
在大多数情况下,事务是分布式注册表中新数据的记录。
也有用于创建渠道或智能合约的交易。 事务由用户应用程序启动,并以分布式注册表中的记录结束。
通道是一个封闭的子网,由区块链网络中的两个或多个参与者组成,旨在在有限但众所周知的参与者圈子内进行机密交易。 该渠道由参与者,其分布式注册表,智能合约,订购服务,WorldState定义。 必须授权每个频道成员访问该频道,并有权进行各种交易。 使用会员服务执行授权。
典型的交易执行场景
接下来,我想以我们的项目为例讨论一个典型的事务执行场景。
作为内部项目的一部分,我们创建了Hyperledger Fabric网络,该网络旨在注册和记录进入大学的学生。 我们的网络由属于大学A和大学B的两个组织组成。每个组织都包含一个客户端应用程序及其“提交和认可对等”。 我们还使用公共服务订购服务,会员服务和证书颁发机构。
1)交易发起
用户应用程序使用Hyperledger Fabric SDK发起交易请求,并将请求发送到具有智能合约的节点。 该请求可以用于修改或从分布式注册表(分类帐)中读取。 如果我们考虑一个针对会计大学生的系统测试配置的示例,则客户端应用程序将交易请求发送到大学A和B的节点,这些请求包含在被称为智能合约的认可策略中。 节点A是在大学中注册新来学生的节点,节点B是在另一所大学中的节点。 为了将交易存储在分布式注册表中,有必要根据业务逻辑必须批准交易的所有节点成功完成具有相同结果的智能合约。 节点使用Hyperledger Fabric SDK工具的用户应用程序接收认可策略,并找出需要向其发送交易请求的节点。 这是调用特定智能合约(链码功能)以将某些数据读取或写入分布式注册表的请求。 从技术上讲,客户端SDK使用相应的功能,该API的API传递带有事务参数的对象,还添加了客户端签名,并通过gRPC通过协议缓冲区将该数据发送到相应的节点(认可对等方)。

图2.交易启动
2)履行智能合约
接收到交易请求的节点(背书对等节点)验证客户签名,如果一切正常,则将请求数据作为对象,并使用该数据开始智能合约执行的仿真(链码功能)。 智能合约是交易的业务逻辑,一组特定的条件和说明(在我们的情况下,这是学生的验证,这是新学生或已经注册的学生,年龄验证等)。 要执行智能合约,您还需要来自WorldState的数据。 作为在背书对等方上智能合约的模拟结果,获得了两个数据集-读取集和写入集。 读取集和写入集是WorldState的原始值和新值。 (新-在模拟智能合约期间获得的意义)。

图3.智能合约的执行
3)将数据返回到客户端应用程序
模拟智能合约之后,背书对等方将初始数据和模拟结果以及用其证书签名的RW集返回到客户端应用程序。 在此阶段,不会对分布式注册表进行任何更改。 客户端应用程序检查背书对等方的签名,还比较发送的事务的源数据和返回的数据(即,它检查在其上模拟事务的源数据是否失真)。 如果事务仅用于从注册表中读取数据,则客户端应用程序将相应地接收必要的读取集,并且通常可以成功完成事务而无需更改分布式注册表。 如果应该更改注册表中的数据,则客户端应用程序还会检查“认可”策略的实施。 客户端应用程序可能不检查背书策略的结果,但是在这种情况下,Hyperledger Fabric平台提供了在将事务添加到注册表的阶段检查节点(Comitting Peers)上策略的方法。

图4.将数据返回到客户端应用程序
4)将RW集发送给订购对等方
客户端应用程序将交易以及关联的数据发送到订购服务。 其中包括RW集,认可对等方和频道ID。
订购服务-根据名称,该服务的主要功能是按照正确的顺序构建传入的交易。 以及形成分布式注册表的新块,并确保将新形成的块交付给所有提交节点,从而确保包含分布式注册表的所有节点(提交对等项)上数据的一致性。 同时,订购服务本身不会以任何方式更改注册表。 订购服务是系统的重要组成部分,因此它是由多个节点组成的集群。 订购服务不检查交易的有效性,它仅接受具有特定通道标识符的交易,以一定顺序排列传入的交易,并从中形成分布式注册表的新块。 一个订购服务可以同时服务多个渠道。 订购服务包括一个Kafka集群,该集群支持正确的(未更改的)交易队列(请参阅第7章)。

图5.将RW集提交给订购对等方
订购服务中形成的模块将传输到所有网络节点。 收到新区块的每个节点均会检查其是否符合背书策略,验证所有背书对等端是否通过模拟智能合约收到了相同的结果(写集),还检查原始值是否已更改(即-读集-自交易启动以来,由智能合约从WorldState读取的数据)。 如果满足所有条件,则该事务将标记为有效;否则,该事务将收到无效的状态。

图6.将已形成的块发送给Commiting Peer
6)添加一个块到注册表
每个节点将一个事务添加到其分布式注册表的本地副本,如果该事务有效,则将写入集应用于WorldState(当前状态),因此,记录受该事务影响的对象的新值。 如果事务接收到一个标记-无效(例如,在同一块中发生了两个事务且对象相同的事务,则其中一个事务将被视为无效,因为其他事务已更改了初始值)。 此事务还使用无效的令牌添加到分布式注册表中,但是此事务的“写入集”不适用于WorldState的当前状态,因此不会更改参与事务的对象。 此后,将向用户应用程序发送通知,告知该交易将永远添加到分布式注册表中,以及交易的状态,即它是否有效...

图7.在注册表中添加一个块
订购服务
订购服务由一个Kafka群集组成,该群集具有相应的ZooKeeper节点和订购服务节点(OSN),它们位于订购服务客户端和Kafka群集之间。 Kafka Cluster是一个分布式容错流(消息传递)管理平台。 Kafka中的每个频道(主题)都是不可变的记录序列,仅支持添加新记录(无法删除现有记录)。 下面给出了主题结构的说明。 Kafka的此属性用于构建区块链平台。

取自kafka.apache.org
图8.订购服务主题结构
有用的链接
Youtube-使用Hyperledger Project构建业务区块链
Hyperledger Fabric文档
Hyperledger Fabric:用于许可区块链的分布式操作系统
致谢
对于为我的同事准备这篇文章所提供的帮助,我深表感谢:
尼古拉·玛丽娜
伊戈尔·哈波夫(Igor Hapov)
德米特里·戈尔巴乔夫(Dmitry Gorbachev)
亚历山大·泽姆佐夫
叶卡捷琳娜·库登科娃(Ekaterina Kurdenkova)
叶卡捷琳娜·古塞娃(Ekaterina Guseva)