fabric 2.0 alpha 新的链码生命周期

1. fabric 2.0 alpha新的链码生命周期

         Alpha版本改变了在peer上安装链码和在通道上启用这个链码的步骤,从而了去中心化控制的链码。新的fabric链码生命周期允许多组织在链码的参数上达成协议,例如应用到账本上之前的链码的背书策略。新的模型在之前的链码生命周期上进行了一些优化。

  • 多组织必须在链码的参数上达成一致:在fabric 1.x的realease版本中,单个组织具有给通道中所有成员设置链码参数(例如背书策略)的权利。新的fabric链码生命周期管理更加灵活,它同时支持中心化信任模型(例如1.x版本的生命周期模型)和非中心化的模型(要求有足够数量的组织认可背书策略后链码才能生效)。
  • 更加安全的链码升级步骤:在之前的链码生命周期中,升级的交易可以被单个组织发布,这对于那些通道内还没有安装新链码的成员会造成风险。新的模型只有在链码在足够数量的组织上安装后,链码的升级才能被成功。
  • 更加简单的背书策略升级:新的生命周期模型是背书策略的改变更加便捷,可以在不重新安装链码的情况下实施。用户也可以利用新的默认策略——要求背书来自通道内的大多数成员,这个背书策略会在有组织加入或离开通道时候自动更新。
    可检查的链码包:Fabric生命周期将链代码打包在易于阅读的tar文件中。这样可以更轻松地检查链代码包并协调跨多个组织的安装。
  • 使用一个包在一个通道上启动多个链码:之前的生命周期用链码包安装的时候的名称和版本来定义通道上的链码,因此每个链码包在通道内只能部署一次。现在可以使用单个链代码包并在相同或不同的通道上以不同的名称多次部署。

2. 使用新的链码生命周期

    以下是使用新的链代码生命周期的步骤:

  1. 打包链码:
    这一步可以由一个组织执行,也可以由每一个组织被别打包。链码要被打包成tar格式,以.tar.gz为文件扩展名的文件。打包后的包有两个文件,一个元数据文件 “Chaincode-Package-Metadata.json”和一个包含链码文件的tar包。“Chaincode-Package-Metadata.json” 是一个json格式的文件,里面指定了链码的语言、路径、包的标签。以下是一个示例:
{"Path":"github.com/chaincode/fabcar/go","Type":"golang","Label":"fabcarv1"}

    用cli打包链码的命令:

peer lifecycle chaincode package mycc.tar.gz --path github.com/hyperledger/fabric-samples/chaincode/abstore/go/ --lang golang --label mycc_1
  1. 安装链码:每个需要对交易背书和查询账本的组织都需要执行这一步。你需要把链码安装在每一个需要执行交易和背书交易的节点上。
    用cli安装链码的命令:
peer lifecycle chaincode install mycc.tar.gz

链码安装成后会返回链码的id标识,这个id在后面会使用,需要记录下来,安装链码返回值如下:

2019-04-21 13:48:53.691 UTC [cli.lifecycle.chaincode] submitInstallProposal -> INFO 001 Installed remotely: response:
2019-04-21 13:48:53.691 UTC [cli.lifecycle.chaincode] submitInstallProposal -> INFO 002 Chaincode code package identifier: mycc_1:3a8c52d70c36313cfebbaf09d8616e7a6318ababa01c7cbe40603c373bcfe173
  1. 认可组织的链码定义:
    每个使用链码的组织都可以执行这个步骤。链码定义需要被足够多的组织批准后,这个链码才能在通道上启用。具体需要多少组织同意,取决于生命周期背书策略,默认的是大多数组织同意。在cli中认可链码定义的命令
CC_PACKAGE_ID=mycc_1:3a8c52d70c36313cfebbaf09d8616e7a6318ababa01c7cbe40603c373bcfe173
peer lifecycle chaincode approveformyorg --channelID mychannel --name mycc --version 1.0 --init-required --package-id $CC_PACKAGE_ID --sequence 1 --waitForEvent
  1. 将链码定义提交到通道:
    一旦获得所需数量组织的批注,提交交易就可以由一个组织提交。提交者可以通过以下命令查看是否已经获取到了足够数量组织的认可:
peer lifecycle chaincode queryapprovalstatus --channelID $CHANNEL_NAME --name mycc --version 1.0 --init-required --sequence 1

    返回结果如下:

{
        "Approved": {
                "Org1MSP": true,
                "Org2MSP": true
        }
}

提交者通过查询确认收到足够数量组织的认可之后,便可以向通道提交链码,提交成功后,链码便可使用:

peer lifecycle chaincode commit -o orderer.example.com:7050 --channelID $CHANNEL_NAME --name mycc --version 1.0 --sequence 1 --init-required --peerAddresses peer0.org1.example.com:7051 --peerAddresses peer0.org2.example.com:9051 --waitForEvent

3. 限制

Fabric v2.0 Alpha版本中新的链代码生命周期尚未完成。尤其要注意alpha版本中的以下限制:

  • CouchDB索引暂不支持。
  • 利用新声明周期定义的链码目前还不能通过service discovery发现。

这些限制将会在alpha后面的版本解决。

微信图片_20190418195654.png

你可能感兴趣的:(fabric 2.0 alpha 新的链码生命周期)