chaincode Invoke 的第一个 return 值的目的是什么?

What's the purpose of the first return value of chaincode Invoke?

Chaincode接口的Invoke方法return的两个值:

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

source

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

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

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

大多数现有样本都是微不足道的,return 没有。可能不理想,但它们就是目前的样子。但是,目的是为 return 响应值提供调用。

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

例如,假设用户通过以下方法调用链代码 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
}

这应该在执行时将以下内容打印到控制台,表明已收到该值:

This is a value from B