Fabric架构与交易处理流程


近年来的企业实践表明,联盟链是极具重要应用前景与潜力的区块链落地技术方案,而超级账本Hyperledger Fabric已经成为联盟链领域中具有国际影响力的主流技术,其目标是面向企业级应用场景的许可区块链,用以解决企业主体间的信任问题,降低复杂繁琐业务流程带来的信任成本,从而有效提升企业主体间大规模协作活动的效率。

新书《Hyperledger Fabric技术内幕:架构设计与实现原理》深入研究了Hyperledger Fabric的源代码,从宏观上分析了Hyperledger Fabric的整体架构、设计逻辑与运行机制,从微观上剖析了各核心模块的设计理念与实现原理,涵盖隐私数据集合PDC、Gossip消息协议等底层细节,同时兼顾区块链系统底层架构研发者与上层应用开发者的需求,帮助读者掌握Hyperledger Fabric的精髓。

本系列第1部分介绍Hyperledger Fabric架构与交易处理流程,后续部分将介绍Orderer排序节点、Peer节点、Endorser背书节点、Committer记账节点、Gossip消息模块等内容。

1. Fabric系统逻辑架构

Hyperledger Fabric 1.0以后的系统逻辑架构发生了很大变化,从应用层视角看,主要提供了身份管理(证书与私钥等)、账本管理(查询与保存账本)、交易管理(交易背书与排序等)、智能合约管理(链码生命周期管理)等区块链服务,如图1所示。

▲ 图1  Hyperledger Fabric逻辑架构示意图[1]

从底层视角看,Hyperledger Fabric提供了成员关系服务(CA节点、MSP等)、共识服务(支持交易排序)、链码服务(Docker容器与多语言链码)、安全与密码服务(支持可插拔的BCCSP组件)等服务。

2. Fabric系统运行时架构

Hyperledger Fabric 1.0以后分离出了Orderer节点与Committer节点,有效提高了系统的可扩展性与并发性,并引入模块插件化的共识算法,使得整个系统架构日臻成熟实用,目前包括Client节点、CA节点、Endorser背书节点、Committer记账节点、Leader主节点、Orderer排序节点等,如图2所示。

▲ 图2  Hyperledger Fabric系统运行时架构示意图

  • CA节点:提供用户注册、证书颁发等用户管理与证书服务;

  • Client节点:需要登记注册用户(或其他合法途径)以获取合法证书与私钥,再执行用户程序或命令请求交易背书与排序;

  • Peer节点:Endorser背书节点负责启动链码容器以模拟执行签名提案,并对模拟执行结果签名背书。Committer记账节点验证交易(调用VSCC系统链码与执行MVCC检查),标记其有效性并提交账本。Leader主节点代表组织通过Deliver()服务接口请求指定通道的账本区块数据,并通过Gossip消息协议广播到组织中;

  • Orderer排序节点:负责对交易进行排序,并提供Broadcast()与Deliver()服务接口。其中,Broadcast()服务接口用于处理交易排序请求,并转发给共识组件进行排序,再添加到本地缓存的交易消息列表中,按照出块规则(出块时间配置等)切割打包成新区块,最后提交到Orderer节点账本。同时,Deliver()服务接口用于处理区块请求消息,从账本中获取区块后回复给请求节点(如Leader主节点)。

3. Fabric交易处理流程

当Fabric系统网络正常启动后,Client节点从Fabric CA或通过工具生成合法的身份证书等以获得合法身份,就能正常发送交易到网络中请求处理,如图3所示。

▲图3  Hyperledger Fabric系统中交易处理流程示意图

① 提交签名提案消息到Endorser背书节点请求处理

Client节点构造签名提案消息,通过ProcessProposal()接口提交到Endorser背书节点,请求模拟执行交易提案并签名背书。

② Endorser背书节点模拟执行交易提案并签名背书

Endorser背书节点首先检查签名提案消息的格式合法性与签名有效性,并验证其是否满足指定通道上的/Channel/Application/Writers权限,如果通过上述检查,则启动链码容器以模拟执行交易提案,并将结果暂时保存在交易模拟器中,最后,调用ESCC系统链码对模拟结果签名背书。

③ Endorser背书节点返回提案响应消息给客户端,并分发隐私数据明文

Endorser背书节点基于模拟执行结果构造提案响应消息,并回复给请求客户端。目前,模拟执行结果读写集包含公有数据(包括公共数据与隐私数据哈希值)与私有数据(或隐私数据)。其中,公有数据被发送给Orderer节点排序出块,并提交到账本区块数据文件中,再广播到该通道上的所有节点。隐私数据则通过Gossip消息协议发送给通道内授权的其他节点(由隐私数据集合配置的签名策略决定),交由transient隐私数据存储对象暂时保存到本地的transient隐私数据库,并在提交账本时存储到隐私数据库。

④ 处理提案响应消息

Client节点解析回复的提案响应消息,获取背书结果并检查提案响应消息状态的合法性,以判断是否收集到了足够多符合要求的背书签名信息。

⑤ 发送交易数据给Orderer服务节点请求排序

当收集到足够多符合要求的Endorser背书签名之后,Client节点基于模拟执行结果构造合法的签名交易消息,通过Broadcast()服务接口将该消息提交给Orderer节点,请求对交易进行排序。

⑥ Orderer服务节点对交易排序并构造新区块

Orderer排序节点提供了可插拔的共识组件,如Solo、Kafka等类型,对符合通道处理要求的合法交易消息进行排序并达成一致观点,同时对一段时间内接收的一批交易消息按照打包交易的出块规则构造新区块,最后提交账本。如果处理配置交易消息,则还需要创建应用通道或更新通道配置。

⑦ Leader主节点请求Orderer服务节点获取通道账本区块

Leader主节点通过Deliver()服务接口代表组织从Orderer节点请求获取通道账本上所有的区块数据,通过Gossip消息协议分发到组织内的其他Peer节点。如果不存在请求的区块数据,则Orderer节点默认阻塞等待,直到指定区块创建完成并提交账本,再将该区块发送给Leader主节点。

⑧ Committer记账节点验证交易并提交账本

Committer记账节点先验证区块数据与隐私数据,检查通过后再提交至本地账本。

其中,Committer记账节点首先检查交易消息的格式正确性等,调用VSCC系统链码以验证签名背书结果是否符合指定的背书策略,通过验证后对模拟结果中公有数据(即区块数据,含有公共数据与隐私数据哈希值)的读写集执行MVCC检查,将存在读写冲突的交易标记为无效交易。

接着,验证模拟结果中隐私数据的正确性,遍历区块中有效交易的隐私数据读写集哈希值,取出对应交易的原始隐私数据读写集明文,重新计算其哈希值并将两者进行比较。如果两者完全相同,则说明该交易的隐私数据是真实有效的。

然后,保存所有的区块数据(即公有数据)到区块数据文件中,保存所有的私有数据(即隐私数据)读写集到隐私数据库中,建立区块索引信息,将最新的有效交易数据更新到状态数据库,最后将区块数据中经过Endorser背书的有效交易数据同步到历史数据库。同时,清理transient隐私数据库中的过期数据。

⑨ Leader主节点分发数据与同步状态

Leader主节点基于Gossip消息协议将区块数据分发到组织内的其他节点上。同时,节点之间通过反熵算法等机制主动拉取缺失的数据(区块数据与隐私数据),确保组织内所有节点上的账本数据等信息保持同步。

⑩ Committer记账节点验证交易并提交账本(同步骤⑧)

至此,Hyperledger Fabric系统上的一次完整交易处理流程结束。

4. 参考文献

[1] Binh Nguyen. Hyperledger Fabric v1.0 Deep Dive. IBM, 2017.

推荐阅读

长按二维码
了解及购买

《Hyperledger Fabric 技术内幕:架构设计与实现原理》

作者:李鑫

本书深入分析了Hyperledger Fabric的源代码,从宏观上分析了Hyperledger Fabric的整体架构、设计逻辑和运行机制,从微观上剖析了各核心模块的设计理念与实现原理,同时兼顾区块链系统底层架构研发者和上层应用开发者的需求,帮助读者掌握Hyperledger Fabric的精髓。

京东活动

你与世界

只差一个

公众号

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值