(Fabric 学习五)更新fabcar链码并升级合约

一、修改官方示例中的fabcar链码

添加删除car和查看car是否存在两个函数

// DeleteCar deletes an given asset from the world state.
func (s *SmartContract) DeleteCar(ctx contractapi.TransactionContextInterface, carNumber string) error {
    exists, err := s.CarExists(ctx, carNumber)
    if err != nil {
        return err
    }
    if !exists {
        return fmt.Errorf("the asset %s does not exist", carNumber)
    }
 
    return ctx.GetStub().DelState(carNumber)
}


// CarExists returns true when asset with given ID exists in world state
func (s *SmartContract) CarExists(ctx contractapi.TransactionContextInterface, carNumber string) (bool, error) {
    assetJSON, err := ctx.GetStub().GetState(carNumber)
    if err != nil {
        return false, fmt.Errorf("failed to read from world state: %v", err)
    }

    return assetJSON != nil, nil
}

保存后退出

二、更新链码

2.1 创建链码包

因为官方示例中的fabcar运行的是test-network网络,所以到test-network网络下进行操作。

首先配置环境变量

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

export FABRIC_CFG_PATH=$PWD/../config/

创建链码包

peer lifecycle chaincode package fabcar.tar.gz --path ../chaincode/fabcar/go/ --lang golang --label fabcar_2

注意这里创建创建链码包 label可以根据你上传的版本进行修改

2.2  在org1的节点上安装链码包

首先初始化成员org1

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

在org1上安装链码包

peer lifecycle chaincode install fabcar.tar.gz

结果:

如果用的是java写的链码很有可能无法配置环境

这样就要我们查看一下docker的容器 ,并且log其中javaenv的容器ID

docker ps 
docker logs -f javaenv的那个容器id

2.3 在org2节点安装链码包

重复2.2 的操作

成员org2:

export PATH=${PWD}/../bin:$PATH
export CORE_PEER_TLS_ENABLED=true
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_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
export CORE_PEER_ADDRESS=localhost:9051

在org2的节点安装

peer lifecycle chaincode install fabcar.tar.gz

结果:

当然也可以通过 查询包id查看是否在节点上安装成功

peer lifecycle chaincode queryinstalled

结果:

 

2.4 批准链码

这里需要修改它的版本和序列号
Org1和Org2的虚拟机中都要进行以下操作,其中链码的ID要根据上面查询的结果替换到下面的命令中。

export CC_PACKAGE_ID=fabcar_2:ed7196cb77fa3fc8c927a825bf03a83cde6addf785a03b030e7ae7c71c36f346

export ORDERER_CA=${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls true --cafile "$ORDERER_CA" --channelID mychannel --name fabcar --version 2.0 --package-id $CC_PACKAGE_ID --sequence 2

结果:

2.5 查看链码是否就绪

这里对应上面批准链码的版本号和序列号

peer lifecycle chaincode checkcommitreadiness --channelID mychannel --name fabcar --version 2.0  --sequence 2 --tls true --cafile "$ORDERER_CA" --output json

结果:

2.6 提交链码(org1或者org2 提交一次即可)

peer lifecycle chaincode commit -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name fabcar --version 2.0 --sequence 2 --tls true --cafile "$ORDERER_CA" --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

升级链码合约操作完成! 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值