Hyperledger Fabric 2.x 動態更新智能合約

file

一、說明

在上一篇文章中分享了智能合約的安裝與使用,如果業務有變更代碼需要修改怎麼辦呢?本文分享如何對已安裝的合約進行版本更新。

 

二、環境準備

區塊鏈網絡安裝:《Hyperledger Fabric 2.x 環境搭建》
智能合約安裝:《Hyperledger Fabric 2.x 自定義智能合約》

 

執行以下命令,可以看到已安裝的合約信息:

peer lifecycle chaincode queryinstalled

file

 

三、重新打包代碼

重新把最新的合約源代碼打包:

peer lifecycle chaincode package mycc.tar.gz --path /opt/app/my-fabric-chaincode-java --lang java --label mycc

 

四、重新安裝合約

再次分別爲 peer0.org1peer0.org2 兩個機構安裝合約:

peer lifecycle chaincode install mycc.tar.gz

執行以下命令,重新查看已安裝的合約信息:

peer lifecycle chaincode queryinstalled

可以發現新增加了一條 Label 名稱相同 Package ID 不一樣的記錄:

file

 

五、重新審批

再次分別爲 peer0.org1peer0.org2 兩個機構審批合約:

peer lifecycle chaincode approveformyorg \
  -o localhost:7050 \
  --ordererTLSHostnameOverride orderer.example.com \
  --tls \
  --cafile ${MSP_PATH}/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem \
  --channelID mychannel \
  --name mycc \
  --version 1.1 \
  --package-id mycc:ecd2abc60ea098508aeefc135d8838787e9c1e3b8e411386a23ca56b7dfed758 \
  --sequence 2

package-id:需填入新安裝的 Package ID
sequence:因爲是審批第二個合約,所以需要填 2
version:只是標識符,可改可不改

 

執行以下命令,檢查節點審批狀態:

peer lifecycle chaincode checkcommitreadiness --channelID mychannel --name mycc --version 1.1 --sequence 2 --output json

返回:

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

 

六、重新提交

執行以下命令,向通道提交合約:

peer lifecycle chaincode commit \
  -o localhost:7050 \
  --ordererTLSHostnameOverride orderer.example.com \
  --tls \
  --cafile ${MSP_PATH}/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem \
  --channelID mychannel \
  --name mycc \
  --peerAddresses localhost:7051 \
  --tlsRootCertFiles ${MSP_PATH}/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt \
  --peerAddresses localhost:9051 \
  --tlsRootCertFiles ${MSP_PATH}/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt \
  --version 1.1 \
  --sequence 2

需要把 sequenceversion 改爲審批時的值

 

 

七、查看已提交合約

執行一下命令:

peer lifecycle chaincode querycommitted --channelID mychannel --name mycc --output json

可以看到現在通道 mychannel 名字爲 mycc 的合約已經更新爲 1.1 版本:

{
	"sequence": 2,
	"version": "1.1",
	"endorsement_plugin": "escc",
	"validation_plugin": "vscc",
	"validation_parameter": "EiAvQ2hhbm5lbC9BcHBsaWNhdGlvbi9FbmRvcnNlbWVudA==",
	"collections": {},
	"approvals": {
		"Org1MSP": true,
		"Org2MSP": true
	}
}

 

掃碼關注有驚喜!

file

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章