Hyperledger fabric 什么';chaincode调用的第一个返回值的用途是什么?

Hyperledger fabric 什么';chaincode调用的第一个返回值的用途是什么?,hyperledger-fabric,hyperledger,Hyperledger Fabric,Hyperledger,Chaincode接口的Invoke方法返回两个值: Invoke(stub *ChaincodeStub, function string, args []string) ([]byte, error) 但是,第一个返回值似乎被忽略。在示例中,它总是设置为nil,并且似乎没有任何方法在事务验证后检索值(不包括在块中) 这是预期的行为吗?如果是,为什么会存在此返回值 还有另一种保存此值的方法,即使用stub.SetEvent发出事件,但当直接返回值似乎存在时,这是非常令人不愉快的。大多数现有

Chaincode接口的Invoke方法返回两个值:

Invoke(stub *ChaincodeStub, function string, args []string) ([]byte, error)

但是,第一个返回值似乎被忽略。在示例中,它总是设置为
nil
,并且似乎没有任何方法在事务验证后检索值(不包括在块中)

这是预期的行为吗?如果是,为什么会存在此返回值


还有另一种保存此值的方法,即使用stub.SetEvent发出事件,但当直接返回值似乎存在时,这是非常令人不愉快的。

大多数现有示例都是琐碎的,并且返回nil。可能不太理想,但目前情况就是这样。但是,其目的是提供调用以返回响应值。

此返回值有一个用例。也就是说,如果您从一个链码中调用另一个链码。在这种情况下,返回值将传递给第一个链码,允许它根据响应进行处理

例如,考虑一个用户通过下面的方法调用链式代码A,这又调用了B.<

func (t *ChaincodeA) Invoke(stub *shim.ChaincodeStub, function string, args []string) ([]byte, error) {
    //DO stuff
    valFromB, err := stub.InvokeChaincode("ChaincodeBDeployName", "someFunc", args)

    fmt.Println(string(valFromB))
    return nil,nil
}
这是链码B供参考

func (t *ChaincodeB) Invoke(stub *shim.ChaincodeStub, function string, args []string) ([]byte, error) {
    return []byte("This is a value from B"),nil
}
执行时,应将以下内容打印到控制台,显示已收到值:

这是来自B的值


不要给出整个代码的链接,请将问题的相关代码复制/粘贴到此处OK,这样链码之间的调用是同步的。谢谢,这不明显。