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

结果:

 

 

之前的结果是:

 

posted on 2020-12-18 09:24  EZgod  阅读(1101)  评论(0编辑  收藏  举报