Chaincode接口的Invoke方法返回两个值:
Invoke(stub *ChaincodeStub, function string, args []string) ([]byte, error)
但是,第一个返回值似乎被忽略了。在示例中,它始终设置为nil
,并且在验证事务(不包括在块中)之后似乎没有任何方法可以检索该值。
这是预期的行为吗?如果是,为什么这个返回值存在?
通过使用stub.SetEvent
发出事件,还有另一种保存此值的方法,但是当直接返回值似乎存在时,这是非常不愉快的。
答案 0 :(得分:1)
此返回值有一个用例。也就是说,如果您从另一个内部调用一个链代码。在这种情况下,返回值将传递给第一个链代码,允许它根据响应执行处理。
例如,考虑用户通过以下方法调用链码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
的值
答案 1 :(得分:0)
大多数现有样本都是微不足道的,并且返回零。可能不理想,但它们就是现在的样子。但是,目的是提供一个Invoke来返回响应值。