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

我正在研究一个链码,需要从另一个链中读取先前存储的数据。 </ p>

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

您可以使用 marble </ code>链码复制它,并将其以不同的名称安装在同一对等节点上。</ p>

其中(A)我实现了invokeChaincode(B),以这种方式读取B存储的数据:</ p>

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

queryMarble:=“ queryMarble”

如果len(args)!= 3 {
返回shim.Error(“参数数目不正确。应为3”)
}

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

响应:= stub.InvokeChaincode(chaincodeName,chaincodeArgs, chaincodeChannel)
if response.Status!= shim.OK {
返回shim.Error(fmt.Sprintf(“无法查询链码:%s”,response.Payload))
}
返回shim.Success( response.Payload)
}
</ code> </ pre>

使用对等链代码调用.. </ code>运行该方法,

我收到状态:200 </ code>,但是有效负载为空。 </ p>

您能告诉我我在做什么错吗?</ p>
</ div>

展开原文

原文

I am working on a chaincode where I need to read data previously stored from another one.

They are instantiated on the same channel and I can use them individually to read and write data separately.

You can replicate it using the marble chaincode, installing it with different names on the same peer.

In one of them (A) I implemented invokeChaincode(B), to read data stored by B in this way:

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)
}

Running that method using peer chaincode invoke .. , I receive status: 200, but Payload is empty.

Could you advise on what I am doing wrong?

1个回答



如果 shim.success(response.Payload)</ code>为空,则链代码B最有可能返回一个空 有效载荷。 为了确保在返回之前尝试在链码A中记录什么 response.Payload </ code>。 </ p>

此外,在链码B中添加一些日志记录,以便您可以确切地看到应该向链码A返回的链码B。</ p>
</ div>

展开原文

原文

If shim.success(response.Payload) is empty its most likely that chaincode B is returning an empty payload. To be sure try logging what response.Payload here in chaincode A before returning.

In addition, add some logging to chaincode B so you can see exactly what chaincode B is supposedly returning to chaincode A.

drudfe0446838
drudfe0446838 看来我在调用错误的函数queryMarble而不是queryMarbles,并且func Invoke默认返回nil。 立即修复,谢谢提示!
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐