HyperLedger(超级账本)项目下的 Fabric 技术原理—链码消息交互

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

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

attachments-2017-12-EhD6TsB35a445c9924929.pngMercina-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


  • 发表于 2017-12-28 10:59
  • 阅读 ( 1996 )
  • 分类:hyperledger

6 条评论

请先 登录 后评论
不写代码的码农
于中阳Mercina-zy

区块链研究/开发 信息安全

78 篇文章

作家榜 »

  1. 社区运营-小以 430 文章
  2. 社区运营-小链 244 文章
  3. 于中阳Mercina-zy 78 文章
  4. 涂晶 71 文章
  5. 李晓琼 45 文章
  6. 兄弟连区块链培训 41 文章
  7. 吴寿鹤 36 文章
  8. John-smith 26 文章