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