1

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

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

来源

但是,第一个返回值似乎被忽略了。在示例中,它始终设置为nil,并且似乎没有任何方法可以在交易验证后检索该值(不包括在块中)。

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

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

4

2 回答 2

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 的值

于 2016-07-21T18:11:34.347 回答
0

大多数现有样本都是微不足道的并且返回零。可能并不理想,但它们就是它们现在的样子。但是,目的是提供 Invoke 返回响应值。

于 2016-06-27T22:52:05.363 回答