分享

HyperLedger(超级账本)项目下的 Fabric 技术原理

 紫火神兵 2018-07-14
                          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
  • 阅读 ( 1540 )
  • 分类:hyperledger

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多