在现实的生产环境下,我们可能会遇到如下的场景,之前安装的链码,不能满足当前业务的需求,需要将其修改,通常的思路是删除掉链码,再重新安装和初始化,但是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
结果:
之前的结果是: