Hyperledger Fabric链码-无法使用InvokeChaincode从另一个链码读取数据。状态200,但有效载荷为空

时间:2018-10-04 16:55:08

标签: go hyperledger-fabric hyperledger

我正在研究一个链码,在这里我需要读取先前从另一个存储的数据。

它们在同一通道上实例化,我可以单独使用它们分别读取和写入数据。

您可以使用marble链码复制它,并将其以不同的名称安装在同一个对等体上。

在其中一个(A)中,我实现了invokeChaincode(B),以这种方式读取B存储的数据:

func (chaincode *SimpleChaincode) queryMarblesFromAnotherChaincode(stub shim.ChaincodeStubInterface, args []string) peer.Response {

    queryMarble := "queryMarble"

    if len(args) != 3 {
        return shim.Error("Incorrect number of arguments. Expecting 3")
    }

    chaincodeName := args[0]
    chaincodeArgs := toChaincodeArgs(queryMarble, args[1])
    chaincodeChannel := args[2]

    response := stub.InvokeChaincode(chaincodeName, chaincodeArgs, chaincodeChannel)
    if response.Status != shim.OK {
        return shim.Error(fmt.Sprintf("Failed to query chaincode: %s", response.Payload))
    }
    return shim.Success(response.Payload)
}

使用peer chaincode invoke ..运行该方法, 我收到status: 200,但是有效负载为空。

您能告诉我我在做什么错吗?

1 个答案:

答案 0 :(得分:1)

如果to central (http://repo1.maven.org/maven2): connect timed out ->为空,则链码B最有可能返回空的有效载荷。为了确保在返回之前尝试在链码A中记录此处shim.success(response.Payload)的内容。

此外,在链码B中添加一些日志记录,以便您可以确切地看到应该由什么链码B返回链码A。