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)
但是,第一个 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
Chaincode接口的Invoke方法return的两个值:
Invoke(stub *ChaincodeStub, function string, args []string) ([]byte, error)
但是,第一个 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