在現實的生產環境下,我們可能會遇到如下的場景,之前安裝的鏈碼,不能滿足當前業務的需求,需要將其修改,通常的思路是刪除掉鏈碼,再重新安裝和初始化,但是Fabric的設計是不支持鏈碼的刪除,不用的話可以將其容器停掉,或者需要業務升級的時候升級鏈碼。
下面我們來看看具體升級鏈碼的步驟。升級鏈碼其實比較簡單:
只需要三步 就可以完成鏈碼的升級操作:
1>從宿主機將chaincode拷貝進cli容器
1 docker cp community2.0 cli:/opt/gopath/src/github.com/hyperledger/fabric/examples/chaincode/go
2>安裝新版本chaincode,打包到peer節點
1 docker exec -it cli bash 2 peer chaincode install -n mycc -v 2.0 -p github.com/hyperledger/fabric/examples/chaincode/go/community2.0
3>升級chaincode和其背書策略
1 peer chaincode upgrade -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n mycc -v 2.0 -c '{"Args":["init"]}' -P "OR ('Org1MSP.member','Org2MSP.member')"
下面我們來做個試驗:
本次實驗基於《Fabric 組織錨節點的添加》實驗結果繼續做升級鏈碼和背書策略的操作
這次的實驗是將官方的chaincode_example02 版本更改為2.0,背書策略從OR ('Org1MSP.member') 更改為AND ('Org1MSP.member')
其中為了觀看直觀,我們將a的值調整成1000,b的值調成2000
第一次安裝和初始化時的命令如下:
1 peer chaincode install -n mycc -p github.com/hyperledger/fabric/network006/chaincode/go/chaincode_example02 -v 1.0 2 peer chaincode instantiate -o orderer.example.com:7050 -C mychannel -n mycc -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "OR ('Org1MSP.member')"
結果可以參考上篇文章
更新操作的命令:
1 peer chaincode install -n mycc -p github.com/hyperledger/fabric/network006/chaincode/go/chaincode_example02 -v 2.0 2 peer chaincode upgrade -o orderer.example.com:7050 -C mychannel -n mycc -v 2.0 -c '{"Args":["init","a","1000","b","2000"]}' -P "AND ('Org1MSP.member')"
結果是:
可以看到2.0的鏈碼被安裝並且成功實例化
下面我們通過命令來查詢a的值和b的值有沒有發生變化
可以看到我們通過admin用戶和usertest用戶查詢的a就是我們更新后的值
同樣的方法查詢b的值
我們再來看看通道信息是否發生變化:
1 peer channel getinfo -c mychannel
結果:
之前的結果是: