fabric升级合约

还是先在控制台输入 docker exec -it cli bash 进入cli的控制台,默认cli的环境变量节点为peer0.org1.example.com.

1.查看需要升级的智能合约信息

目前已部署一个智能合约到peer0.org1.example.com,cli控制台输入命令:

peer lifecycle chaincode queryinstalled

查看mycc合约的package_id如下:
在这里插入图片描述

查看mycc在mychannel通道的合约定义,cli控制台输入命令:

peer lifecycle chaincode querycommitted -C mychannel

可以看到mycc具体信息

在这里插入图片描述

 peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

此时控制台输出a的值为90
在这里插入图片描述

2. 修改合约代码

假如本地不存在该合约代码,2.0提供从节点上获取代码包的操作
控制台输入以下命令

 peer lifecycle chaincode getinstalledpackage --package-id  mycc_1:00ef9e95ea103b2c27eacd5a62efd9b34863c672d236a1ce99a7d539b2f9ef7a

packge-id:使用1步骤中查询获取的合约packge_id

当前目录出现mycc.tar.gz包为合约包,解压合约包里面的code.tar,编辑合约代码
或者直接编写合约

3. 重新打包合约

控制台输入以下命令打包合约:

 peer lifecycle chaincode package mycc.tar.gz --path github.com/hyperledger/fabric-samples/chaincode/abstore/go/ --lang golang --label mycc_1

将根据新的合约代码打包成新的智能合约包mycc.tar.gz

4. 重新安装合约

进入新的智能合约包的目录更新合约代码需要重新将合约安装到节点上

peer lifecycle chaincode install mycc.tar.gz

控制台输出合约安装信息:

在这里插入图片描述
此时我们再查询一下节点安装合约信息,控制台输入:

peer lifecycle chaincode queryinstalled

控制台输出:

在这里插入图片描述

可以看到新增了一个package_id不一样的mycc,原来的还在。

5.修改合约定义

真正升级的操作其实是在合约定义这一步骤
控制台输入以下命令,与原来相比将package_id修改为新安装的合约package_id,sequence要改成2,因为install了2次

peer lifecycle chaincode approveformyorg --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 --channelID mychannel --name mycc --version 1 --init-required --package-id  mycc_1:49db4ee9c092a6324b43e4087272edef6ef8cbc9bf3fd275ab9be5884928d770 --sequence 2 --waitForEvent

在这里插入图片描述

检查approve状态,控制台输入:

peer lifecycle chaincode checkcommitreadiness --channelID mychannel --name mycc --version 1 --sequence 2 --output json --init-required 

sequence要改成2,因为install了2次,否则报错Error: query failed with status: 500 - failed to invoke backing implementation of ‘CheckCommitReadiness’: requested sequence is 1, but new definition must be sequence 2

6.切换节点重复 3,4,5操作

环境变量切换peer0.org2.example.com,

export CORE_PEER_LOCALMSPID="Org2MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
export CORE_PEER_ADDRESS=peer0.org2.example.com:9051

重复3,4,5步,知道出现以下结果
在这里插入图片描述

7.重新提交合约定义

完成智能合约lifecycle策略后,重新提交合约定义

 peer lifecycle chaincode commit -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 --channelID mychannel --name mycc --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses peer0.org2.example.com:9051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt --version 1 --sequence 2 --init-required

注意序列号sequence

控制台输出以下结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伤何123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值