在上一节分享了添加一个组织机构进入通道,过程还是比较复杂的。
本节分享在新的组织机构加入通道后,如何升级chaincode,以便让新的组织也能够参与到chaincode的业务中
进入org3cli容器中执行install命令,这里直接使用2.0版本
docker exec -it Org3cli bash
peer chaincode install -n mycc -v 2.0 -p github.com/chaincode/chaincode_example02/go/
上述命令默认是peer0.org3,如果要在peer1.org3也安装该chaincode,切换到相应的环境:
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org3.example.com/msp
CORE_PEER_ADDRESS=peer1.org3.example.com:12051
CORE_PEER_LOCALMSPID="Org3MSP"
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer1.org3.example.com/tls/ca.crt
peer chaincode install -n mycc -v 2.0 -p github.com/chaincode/chaincode_example02/go/
回到cli容器中,安装新版本链码
exit
docker exec -it cli bash
peer chaincode install -n mycc -v 2.0 -p github.com/chaincode/chaincode_example02/go/
设置环境变量,然后直接调用upgrade,把链码的策略定义成"OR ('Org1MSP.peer','Org2MSP.peer','Org3MSP.peer')"
export ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem && export CHANNEL_NAME=mychannel
peer chaincode upgrade -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA -C $CHANNEL_NAME -n mycc -v 2.0 -c '{"Args":["init","a","90","b","210"]}' -P "OR ('Org1MSP.peer','Org2MSP.peer','Org3MSP.peer')"
需要注意的是,upgrade方法和instantiate一样都要调用到链码的init方法,因此都要传递init方法中需要的参数。
调用链码查看是否部署成功:
peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}'
如果返回90即代表部署成功。
调用链码:
peer chaincode invoke -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA -C $CHANNEL_NAME -n mycc -c '{"Args":["invoke","a","b","10"]}'
再次查询:
peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}'
返回结果是80
上述示例仅在peer0.org1、peer0.org3、peer1.org3容器中部署了链码,并且仅在peer0.org1上面实例化了链码,其他的节点想要部署或者实例化,参考前文命令即可。
每个peer的环境变量:
peer0.org1
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
CORE_PEER_ADDRESS=peer0.org1.example.com:7051
CORE_PEER_LOCALMSPID="Org1MSP"
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
peer0.org2
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
CORE_PEER_ADDRESS=peer0.org2.example.com:9051
CORE_PEER_LOCALMSPID="Org2MSP"
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
peer1.org1
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
CORE_PEER_ADDRESS=peer1.org1.example.com:8051
CORE_PEER_LOCALMSPID="Org1MSP"
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt
peer1.org2
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
CORE_PEER_ADDRESS=peer1.org2.example.com:10051
CORE_PEER_LOCALMSPID="Org2MSP"
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt
转载请注明来源