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