Fabric学习(二)之安装升级链码(Fabric1.4.4)

时间:2019.12.15.23.05

1、前提条件

根据Fabric学习(一)之搭建第一个Fabric网络搭建好第一个网络之后,即 ./byfn.sh up 执行完成并成功搭建起网络

2、安装升级链码

2.1 示例 java 链码


import io.netty.handler.ssl.OpenSsl;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hyperledger.fabric.protos.peer.ChaincodeShim;
import org.hyperledger.fabric.shim.ChaincodeBase;
import org.hyperledger.fabric.shim.ChaincodeStub;
import org.hyperledger.fabric.shim.ledger.KeyModification;
import org.hyperledger.fabric.shim.ledger.KeyValue;
import org.hyperledger.fabric.shim.ledger.QueryResultsIterator;
import org.hyperledger.fabric.shim.ledger.QueryResultsIteratorWithMetadata;

public class BCGISChaincode extends ChaincodeBase {
    private static Log _logger = LogFactory.getLog(BCGISChaincode.class);

    public static void main(String[] args) {
        System.out.println("OpenSSL avaliable: " + OpenSsl.isAvailable());
        new BCGISChaincode().start(args);
    }

    @Override
    public Response init(ChaincodeStub stub) {
        return newSuccessResponse();
    }

    @Override
    public Response invoke(ChaincodeStub stub) {
        try {
            _logger.info("Invoke java BCGIS chaincode");
            String func = stub.getFunction();
            List<String> params = stub.getParameters();
            List<byte[]> paramsByte = stub.getArgs();

            if (func.equals("PutRecord")) {
                return putRecord(stub, params);
            }
            if (func.equals("GetRecordByKey")) {
                return getRecordByKey(stub, params);
            }           
        } catch (Throwable e) {
            return newErrorResponse(e);
        }
    }

    private Response putRecord(ChaincodeStub stub, List<String> args){
        int argsNeeded = 2;
        if (args.size() != argsNeeded){
            return newErrorResponse("Incorrect number of arguments.Got" + args.size() + ", Expecting " + argsNeeded);
        }
        String key = args.get(0);
        String value = args.get(1);
        stub.putStringState(key, value);
        return newSuccessResponse("Invoke finished successfully." );
    }

    private Response getRecordByKey(ChaincodeStub stub, List<String> args) {
        int argsNeeded = 1;
        if (args.size() != argsNeeded){
            return newErrorResponse("Incorrect number of arguments.Got" + args.size() + ", Expecting " + argsNeeded);
        }
        String key = args.get(0);
        byte[] tmpVal = stub.getState(key);
        String message = "Query key->\"" + key + "\" successfully";
        return newSuccessResponse(message, tmpVal);
    }
}

2.2 安装升级链码

进入容器 将链码文件拷贝到容器中

$ docker exec -it cli bash

root@15ba21bec560:/opt/gopath/src/github.com/hyperledger/fabric/peer#   // 15ba21bec560 为容器名

// 在容器外执行将连阿妈拷贝到容器中
$ docker cp FabricChaincode 15ba21bec560:/opt/gopath/src/github.com/hyperledger/fabric/peer

设置环境变量

$ 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

安装链码 ---->mycc 链码名

$ peer chaincode install -l java -n mycc -v 1.0 -p FabricChaincode/

2019-12-15 15:15:44.787 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 001 Using default escc
2019-12-15 15:15:44.787 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default vscc
2019-12-15 15:15:44.809 UTC [chaincodeCmd] install -> INFO 003 Installed remotely response:<status:200 payload:"OK" > 

初始化链码(由于在启动时已经初始化过,这里直接跳过,升级链码即可)


$ peer chaincode instantiate -o  orderer.example.com:7050 -C  mychannel -n mycc -v 1.0 --tls true --cafile $ORDERER_TLSCA -c '{"Args": ["init"]}'

升级链码 ---->mychannel 通道名

$ peer chaincode upgrade -o orderer.example.com:7050 -C mychannel -n mycc -v 1.0 --tls true --cafile $ORDERER_TLSCA -c '{"Args":["init"]}'

2019-12-15 12:43:02.834 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 001 Using default escc
2019-12-15 12:43:02.835 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default vscc

执行链码

$ peer chaincode invoke -o  orderer.example.com:7050 -C  mychannel -n mycc --tls true --cafile $ORDERER_TLSCA -c '{"Args":["PutRecord","testKey","testValue"]}'

2019-12-15 15:14:29.726 UTC [chaincodeCmd] chaincodeInvokeOrQuery -> INFO 001 Chaincode invoke successful. result: status:200 message:"Invoke finished successfully."

$ peer chaincode query -o  orderer.example.com:7050 -C mychannel -n mycc --tls true --cafile $ORDERER_TLSCA -c '{"Args":["GetRecordByKey","testKey"]}'

testValue

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值