每当我更改链码并进行部署时,它会返回一个新的chaincodeID,我必须再次执行init,但在生产环境中,我们不能这样做,我们只想更新链码并且历史数据必须保持健康。我联系了,https://jira.hyperledger.org/browse/FAB-22这个网址告诉我,现在hyperledger不支持链码升级,所以如果我现在需要这个怎么办?如果我误解了它,你可以告诉我。谢谢!
答案 0 :(得分:3)
正如您在FAB-22中发现的,Fabric v0.5-0.6不支持链码“升级”。这种行为的原因是Fabric如何在分类帐中保存信息。 当chaincode尝试调用PutState方法时:
PutState(customKey string, value []byte) error
Fabric会自动将ChaincodeId添加到密钥中,并使用名称CHAINCODE_ID + customKey
保存提供的“值”。
因此,每个链代码只能访问自己的变量。更新后,chaincode接收新的ChaincodeId和新的可见区域。
我们找到了几种解决方法来解决这个问题。
自定义升级功能:
DAO图层:
您可以创建单独的链代码,负责“读/写”操作。所有版本都将使用此DAO作为所有“PutState”和“GetState”请求的代理。通过这种方法,Chaincode的所有版本都可以在相同的可见区域内工作。同时,这个DAO层负责安全性,并且应该保证没有其他链路代码可以访问私人信息。