Hyperledger Fabric更改fabcar示例 [英] Hyperledger Fabric altering fabcar example

查看:232
本文介绍了Hyperledger Fabric更改fabcar示例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在研究fabcar示例,并在没有任何更改的情况下使其完美运行。我想做的是更新fabcar.go代码以添加更多字段,并仅使用示例进行操作,但是我的docker镜像未使用正确的代码进行更新。



要安装Chaincode,此命令在cli容器上运行:

  docker exec -e CORE_PEER_LOCALMSPID = Org1MSP -e CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1。 example.com/msp cli peer chaincode install -n fabcar -v 1.0 -p github.com/fabcar 

cli容器已设置此卷:

  ./../ chaincode /:/ opt / gopath / src / github .com / 

但是,在代码/更新后(我实际上已将其从Car更改为具有全新字段的票证对象,并更新了所有相关的链命令以反映),拆卸,然后重新启动,我仍然看到所有旧字段。



我在这里想念什么?



以下是 Invoke功能上更改为故障单的代码的片段

  func(s * SmartContract)调用(APIstub shim.ChaincodeStubInterface)sc.Response {

//检索请求的智能合约函数和参数
函数,args:= APIstub。 GetFunctionAndParameters()
//路由到适当的处理程序函数,以与分类账进行适当的交互
如果function == queryTicket {
return s.queryTicket(APIstub,args)
}否则,如果函数== initLedger {
返回s.initLedger(APIstub)
}否则,如果函数== createTicket {
返回s.createTicket(APIstub,args)
} else if function == queryAllTickets {
返回s.queryAllTickets(APIstub)
} else if function == sellTicket {
返回s.sellTicket(APIstub,args)
}

返回shim.Error(无效的智能合约功能名称。)
}

但是这样做,我只是收到消息无效的智能合约功能名称。调用w /时:

  const request = {
chaincodeId:options.chaincode_id,
txId :transaction_id,
fcn:'queryAllTickets',
args:['']
};


解决方案

我建议两种可能的方法:


  1. 使用新名称或版本增加的链代码安装

相同名称,但已更新版本:

 对等链代码安装-n fabcar -v 2.0 -p github.com/fabcar 

或相同版本,但新名称:

 对等链代码安装-n票-v 1.0 -p github.com/fabcar 



< ol start = 2>

  • 清理旧的链式代码容器并再次安装备用链式代码的更新版本。

  • 您可以使用以下命令删除旧的链式代码容器映像:

      docker images | grep fabcar | awk‘{print $ 2}’| docker rmi 


    I've been working through the fabcar example and have it running it perfectly when no alterations have happened. What I'm trying to do is update the fabcar.go code to add more fields and simply play around w/ the example, however my docker images aren't updating w/ the correct code.

    To install the chaincode, this command is run on the cli container:

    docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp" cli peer chaincode install -n fabcar -v 1.0 -p github.com/fabcar
    

    The cli container has set this volume:

    ./../chaincode/:/opt/gopath/src/github.com/
    

    however, after code/go updates (I've actually changed it from Car to a Ticket object with entirely new fields and updated all relevant chain commands to reflect), teardown, then start up again I still am seeing all the old fields.

    What am I missing here?

    Here's a snippet of the code changing to tickets on the "Invoke" function

    func (s *SmartContract) Invoke(APIstub shim.ChaincodeStubInterface) sc.Response {
    
        // Retrieve the requested Smart Contract function and arguments
        function, args := APIstub.GetFunctionAndParameters()
        // Route to the appropriate handler function to interact with the ledger appropriately
        if function == "queryTicket" {
            return s.queryTicket(APIstub, args)
        } else if function == "initLedger" {
            return s.initLedger(APIstub)
        } else if function == "createTicket" {
            return s.createTicket(APIstub, args)
        } else if function == "queryAllTickets" {
            return s.queryAllTickets(APIstub)
        } else if function == "sellTicket" {
            return s.sellTicket(APIstub, args)
        }
    
        return shim.Error("Invalid Smart Contract function name.")
    }
    

    But doing this I simply receive the message "Invalid Smart Contract function name." when calling w/ the following:

    const request = {
        chaincodeId: options.chaincode_id,
        txId: transaction_id,
        fcn: 'queryAllTickets',
        args: ['']
    };
    

    解决方案

    I would suggest two possible approaches:

    1. Install chaincode with new name or incremented version

    Same name, but updated version:

    peer chaincode install -n fabcar -v 2.0 -p github.com/fabcar
    

    or same version, but new name:

    peer chaincode install -n tickets -v 1.0 -p github.com/fabcar
    

    1. Cleanup old chaincode container and install updated version of alternated chaincode over again.

    You can use following command to remove old chaincode container image:

    docker images | grep fabcar | awk '{print $2}' | docker rmi
    

    这篇关于Hyperledger Fabric更改fabcar示例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆