Fabric 技术原理:链码消息交互分步骤阐述!

作者:Mercina-zy

本文转载自区块链兄弟,区块链兄弟——技术专业问答先行者,区块链爱好者聚集地

本文约2000字,阅读(观看)需要15分钟

Fabric是最早加入到HyperLedger(超级账本)项目中的顶级项目,Fabric主要由IBM、DAH等企业于2015年底提交至社区。该项目的定位是面向企业的分布式账本平台,创新的引入了权限管理支持等技术,设计上支持可插拔、可扩展等。其目前处于活跃状态。本文将以分步介绍的方式,对其链码消息交互进行阐述。(Mercina-zy)

用户链码容器和所属的Peer节点之间主要的交互过程可用下图表示。

制图:Mercina-zy

现以典型情况为例,将链码和Peer之间的交互过程,分步骤阐述如下:

1)用户链码调用 shim.Start() 方法后,首先会向Peer发送ChaincodeMessage_REGISTER消息尝试进行注册。其后,开始等待接收来自 Peer 的消息。此时候的状态为初始的 created 。

2)Peer 在收到来自链码容器的 ChaincodeMessage_REGISTER 消息后,会注册到本地的一个 handler 结构,返回ChaincodeMessage_REGISTERED消息给链码容器。并且更新状态为 established ,然后会自动发出ChaincodeMessage_READY消息给链码侧,并且更新状态为 ready 。

3)链码侧在收到 ChaincodeMessage_REGISTERED 消息之后,先不进行任何的操作,完成注册步骤。更新状态为established。在收到 ChaincodeMessage_READY 消息之后再更新状态为ready

4)Peer侧发出ChaincodeMessage_INIT消息给链码容器,对链码进行初始化。

5)链码容器收到 ChaincodeMessage_INIT 消息之后,调用用户代码Init() 方法进行初始化,成功之后,返回ChaincodeMessage_COMPLETED消息。到此,链码容器可以被调用了。

6)链码被调用的时候,Peer 发出ChaincodeMessage_TRANSACTION消息给链码。

7)链码在收到 ChaincodeMessage_TRANSACTION 消息之后,会调用Invoke()方法,根据 Invoke 方法中用户的逻辑,可以发送如下的消息给 Peer 侧:

ChaincodeMessage_GET_HISTORY_FOR_KEY

ChaincodeMessage_GET_QUERY_RESULT

ChaincodeMessage_GET_STATE

ChaincodeMessage_GET_STATE_BY_RANGE

ChaincodeMessage_QUERY_STATE_CLOSE

ChaincodeMessage_QUERY_STATE_NEXT

ChaincodeMessage_INVOKE_CHAINCODE

Peer 侧在收到这些消息之后,会进行相应的处理,并回复ChaincodeMessage_RESPONSE消息。最后,链码侧会回复调用完成的消息 ChaincodeMessage_COMPLETE 至 Peer 侧。

8)上述消息交互过程当中,Peer 和链码侧还会进行一项操作,那就是定期相互发送ChaincodeMessage_KEEPALIVE消息给对方,以确保彼此是在线状态

热文推荐

区块链兄弟——技术专业问答先行者,区块链爱好者聚集地

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20171228G0ORKI00?refer=cp_1026

扫码关注云+社区