Hyperledger Fabric 改变 fabcar 示例

Hyperledger Fabric altering fabcar example

我一直在研究 fabcar 示例,并在没有任何改动的情况下 运行 完美地完成了它。我想做的是更新 fabcar.go 代码以添加更多字段并简单地使用示例,但是我的 docker 图像没有更新正确的代码。

要安装链代码,此命令在 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/

然而,在 code/go 更新之后(我实际上已经将其从 Car 更改为具有全新字段的 Ticket 对象并更新了所有相关的链命令以反映),teardown,然后启动我再次看到所有的旧领域。

我在这里错过了什么?

这是 "Invoke" 函数

上更改为门票的代码片段
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.")
}

但是这样做我只是在调用以下内容时收到消息 "Invalid Smart Contract function name.":

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

我建议两种可能的方法:

  1. 使用新名称或增量版本安装链码

同名,但更新版本:

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

或相同版本,但新名称:

peer chaincode install -n tickets -v 1.0 -p github.com/fabcar
  1. 清理旧链代码容器并重新安装替代链代码的更新版本。

您可以使用以下命令删除旧的链码容器镜像:

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