添加删除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条)