• Fabric升级智能合约



    参考:升级智能合约 & 视频

    当我们修改了智能合约之后,需要将新的智能合约安装在节点上。

    可以使用相同的 Fabric 链码生命周期流程来升级已部署到通道的链码。通道成员可以通过安装新的链码包,然后批准具有新包 ID、新链码版本和序列号加一的链码定义来升级链码。在将链码定义提交到通道后,可以使用新的链码。此过程允许通道成员在升级链代码时进行协调,并确保有足够数量的通道成员准备好使用新的链代码,然后再将其部署到通道。

    渠道成员还可以使用升级过程来更改链码背书策略。通过使用新的背书策略批准链码定义并将链码定义提交给通道,通道成员可以更改管理链码的背书策略,而无需安装新的链码包。

    打包智能合约

    1.1拉取最新的代码

    cd ~fabric-samples/chaincode/hyperledger-fabric-contract-java-demo
    git pull
    
    • 1
    • 2

    1.2 返回到test-network所在目录,以便可以将链码与其他网络部件打包在一起

    cd ../../test-network
    
    • 1

    1.3 将bin目录中二进制文件添加到CLI路径

    export PATH=${PWD}/../bin:$PATH
    
    • 1

    1.4 设置FABRIC_CFG_PATH为指向fabric-samples中的core.yaml文件

    export FABRIC_CFG_PATH=$PWD/../config/
    
    • 1

    1.5 创建链码包

    peer lifecycle chaincode package hyperledger-fabric-contract-java-demo.tar.gz --path ../chaincode/hyperledger-fabric-contract-java-demo/ --lang java --label hyperledger-fabric-contract-java-demo_2
    
    • 1

    安装链码包

    打包 hyperledger-fabric-contract-java-demo 智能合约后,我们可以在peer节点上安装链码。需要在将认可交易的每个peer节点上安装链码。因为我们将设置背书策略以要求来自Org1和Org2的背书,所以我们需要在两个组织的peer节点上安装链码:peer0.org1.example.com和peer0.org2.example.com

    2.1 Org1 peer节点安装链码

    设置以下环境变量,以Org1管理员的身份操作peer CLI。

    export CORE_PEER_TLS_ENABLED=true
    export CORE_PEER_LOCALMSPID="Org1MSP"
    export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
    export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
    export CORE_PEER_ADDRESS=localhost:7051
    
    • 1
    • 2
    • 3
    • 4
    • 5

    使用 peer lifecycle chaincode install 命令在peer节点上安装链码。

    peer lifecycle chaincode install hyperledger-fabric-contract-java-demo.tar.gz
    
    • 1

    注意:可以打开一个新的终端,首先输入命令:docker ps来查看所有容器,获取第一个container id 复制下来,然后在输入命令:docker logs -f +刚刚的id。这样就可以查看到安装链码的日志,还有就是安装过程比较慢,在原来的终端页面可能会提示超时,等日志中成功后,再次在之前的终端中运行安装链码的命令即可。下面安装链码同理。

    2.2 Org2 peer节点安装链码

    设置以下环境变量,以Org2管理员的身份操作peer CLI。

    export CORE_PEER_LOCALMSPID="Org2MSP"
    export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
    export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
    export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
    export CORE_PEER_ADDRESS=localhost:9051
    
    • 1
    • 2
    • 3
    • 4
    • 5

    使用 peer lifecycle chaincode install 命令在peer节点上安装链码。

    peer lifecycle chaincode install hyperledger-fabric-contract-java-demo.tar.gz
    
    • 1

    通过链码定义

    安装链码包后,需要通过组织的链码定义。该定义包括链码管理的重要参数,例如名称,版本和链码认可策略。

    如果组织已在其peer节点上安装了链码,则他们需要在其组织通过的链码定义中包括包ID。包ID用于将peer节点上安装的链码与通过的链码定义相关联,并允许组织使用链码来认可交易。

    3.1 查询包ID和之前安装过的版本

    peer lifecycle chaincode queryinstalled
    
    • 1

    该queryinstalled命令将返回已在peer节点上安装的链码的列表:

    Installed chaincodes on peer:
    Package ID: hyperledger-fabric-contract-java-demo_2:762e0fe3dbeee0fzf11fb6200adeb4a3a20f649a00f168c0b3c2257e53b6e506, Label: hyperledger-fabric-contract-java-demo_2
    Package ID: hyperledger-fabric-contract-java-demo_1:762e0fe3dbeee0fzf11fb6200adeb4a3a20f649a00f168c0b3c2257e53b6e559, Label: hyperledger-fabric-contract-java-demo_1
    
    • 1
    • 2
    • 3

    demo_2是刚刚安装上的。

    通过链码时,我们将使用包ID,因此,将包ID保存为环境变量。将返回的包ID粘贴到下面的命令中。

    注:包ID对于所有用户而言都不相同,因此需要使用上一步中从命令窗口返回的包ID来完成此步骤。而不是直接复制命令!!!

    使用包标签找到新链码的包ID,并将其另存为新的环境变量:

    export NEW_CC_PACKAGE_ID=hyperledger-fabric-contract-java-demo_2:762e0fe3dbeee0fzf11fb6200adeb4a3a20f649a00f168c0b3c2257e53b6e506
    
    • 1

    3.2 Org2 通过链码定义

    因为已经设置了环境变量为peer CLI作为Orig2管理员进行操作,所以我们可以以Org2组织级别将 hyperledger-fabric-contract-java-demo 的链码定义通过。使用 peer lifecycle chaincode approveformyorg命令通过链码定义:

    peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name hyperledger-fabric-contract-java-demo --version 2.0 --package-id $NEW_CC_PACKAGE_ID --sequence 2 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
    
    • 1

    注:修改版本号和序列号为2。

    3.3 Org1 通过链码定义

    设置以下环境变量以Org1管理员身份运行:

    export CORE_PEER_LOCALMSPID="Org1MSP"
    export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
    export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
    export CORE_PEER_ADDRESS=localhost:7051
    
    • 1
    • 2
    • 3
    • 4

    用 peer lifecycle chaincode approveformyorg命令通过链码定义

    peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name hyperledger-fabric-contract-java-demo --version 2.0 --package-id $NEW_CC_PACKAGE_ID --sequence 2 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
    
    • 1

    注:修改版本号和序列号为2。

    将链码定义提交给通道

    使用peer lifecycle chaincode checkcommitreadiness命令来检查通道成员是否已批准相同的链码定义:

    peer lifecycle chaincode checkcommitreadiness --channelID mychannel --name hyperledger-fabric-contract-java-demo --version 2.0 --sequence 2 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --output json
    
    • 1

    注:修改版本号和序列号为2。

    如果命令返回以下JSON,则表示链代码已准备好升级:

    {
    	"approvals": {
    		"Org1MSP": true,
    		"Org2MSP": true
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    升级链码:

    peer lifecycle chaincode commit -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name hyperledger-fabric-contract-java-demo --version 2.0 --sequence 2 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
    
    • 1

    注:修改版本号和序列号为2。

    可以使用peer lifecycle chaincode querycommitted命令来确认链码定义已提交给通道。

    peer lifecycle chaincode querycommitted --channelID mychannel --name hyperledger-fabric-contract-java-demo --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
    
    • 1

  • 相关阅读:
    EOS将发布的官方EVM怎么样?
    React Hooks 源码学习
    STM8的C语言编程(14)--+PWM
    Landsat Collection 2 数据集详细介绍(T1/T2产品差异)
    【Docker】用Dockerfile制作个人的镜像文件
    信奥中的数学:平面直角坐标系
    JavaScript概述
    计算机网络(第8版)-第6章 应用层
    MySQL与ES数据同步之异步调用
    软件TFN 2K的分布式拒绝攻击(DDos)实战详解
  • 原文地址:https://blog.csdn.net/wan_ide/article/details/125892271