《Hyperledger Fabric菜鸟进阶攻略》 —2.2 Hyperledger Fabric交易流程分析

举报
华章计算机 发表于 2020/02/16 20:00:04 2020/02/16
【摘要】 本节书摘来自华章计算机《Hyperledger Fabric菜鸟进阶攻略》 一书中第2章,第2.2节,作者是黎跃春 韩小东 付金亮  。

2.2 Hyperledger Fabric交易流程分析

目标

熟知Hyperledger Fabric交易流程。

现在我们深入Hyperledger Fabric内部,详细了解Hyperledger Fabric交易流程,理解相应的核心内容。

区块链技术的重要特征之一就是能够保证实现安全的交易。Hyperledger Fabric与公有链的交易实现又有很大的区别,如权限、认证、数据隔离等。

Hyperledger Fabric典型的交易流程如下图所示。

完整的交易流程如下。

1)客户端利用受支持的SDK(Golang、Java、Node、Python)提供的API构建交易提案请求,将交易事务提案打包成为一个正确的格式。交易提案包含如下要素。

①channelID:通道信息。

②chaincodeID:要调用的链码信息。

③timestamp:时间戳。

④sign:客户端的签名。

 image.png

⑤txPayload:提交的事务本身包含的内容,包含两项。

operation:要调用的链码的函数及相应的参数。

metadata:调用的相关属性。

2)在交易提案中使用用户的加密凭据为此事务提案生成唯一的签名,之后将事务提交给背书节点。其具体过程如下图所示。

 image.png

其中,交易提案(Proposal)消息在Hyperledger Fabric源代码中的结构如下图所示。

3)背书节点对接收到的交易提案请求进行验证。

①交易提案格式是否正确;

②交易在之前并未提交过(重复性攻击保护);

③提交交易提案的客户端签名是否有效(使用MSP);

④提交交易提案的请求者是否在该通道中有相应的执行权限。

 image.png

验证通过后调用链码进行模拟执行,产生包括响应值、读集和写集的事务结果。对结果进行背书并响应给客户端。其过程如下图所示。

 image.png

其中,交易提案响应(Proposal Response)消息在Hyperledger Fabric源代码中的结构如下图所示。

 image.png

此时的调用链码是模拟执行,不会对账本中的数据进行真正意义上的更改。

4)应用程序收集到足够的消息和背书签名之后,构建合法的交易请求并将交易请求广播给Ordering服务节点,如下图所示。

 image.png

如果应用程序的请求仅仅是查询分类账本,则应用程序将检查查询响应信息,并且不会将事务提交给Ordering(排序)服务。

如果客户端应用程序的请求是更新分类账本数据,则会将事务提交给Ordering服务以继续下一步的操作,并且应用程序在提交事务之前检查确定请求是否已满足指定的认可策略(即指定的背书节点都认可)。

5)交易请求被提交到Orderer节点,该事务将包含读/写集、背书签名和通道ID。Orderer

节点接收到事务请求之后,并不需要检查交易中的具体数据,只是从网络中的所有通道接收交易,按时间顺序对它们进行排序,并创建交易区块,之后广播给同一通道内所有组织的Leader节点,如下图所示。

 image.png

6)Leader节点:Leader节点对接收到的区块进行验证(交易消息结构是否正确、是否重复、是否有足够的背书、读写集版本),通过验证后将结果写入本地的分类账本中,如下图所示。

 image.png

7)同步广播:Leader节点同步广播给组织内的其他节点(保证在同一通道内的)。在Hyperledger Fabric中,广播给其他节点默认为临近的3个节点。此广播数量可以通过配置进行修改。注意,跨组织广播则由组织内的锚节点负责。

8)分类账本更新:每个Peer节点将区块附加到区块链中,写集被提交到当前的状态数据库中,并且对于每个有效的事务,发出一个事件,通知客户端应用程序事务(调用)已被不可变地附加到链中,以及通知该事务是否已经过验证或为无效事务。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。