如何在调用 json 响应中 return 值
How to return values in Invoke json response
我正在尝试设计一个 hyperledger 链代码,它通过网络 API 访问,它将 json 对象传递给代码。但是,每当我执行调用方法时,我实际上无法在 json 响应中向用户提供 return 值。
例如,这里有一些示例代码:
func (t *TLCChaincode) Invoke(stub *shim.ChaincodeStub, function string, args []string) ([]byte, error) {
//Do some stuff
return []byte("Some string"), nil
}
以及return错误
的一些示例代码
func (t *TLCChaincode) Invoke(stub *shim.ChaincodeStub, function string, args []string) ([]byte, error) {
//Try to do some stuff
//Get some sort of error
return nil, errors.New("someError")
}
但是这两个 return 都是这样的消息,消息总是像下面这样的一些随机字符串(我怀疑是某种哈希):
{
"jsonrpc": "2.0",
"result": {
"status": "OK",
"message": "1e1123e3-b484-4120-a28e-c3a8db384557"
},
"id": 11
}
如您所见,此响应既不包含我 returned 的响应(在第一种情况下),也不包含我 returned 的错误(在第二种情况下)。我将如何获取 returned 字节,或将 returned 错误放入 returned json?
编辑:请注意,如果我从另一个链代码调用调用方法,它会收到正确的 return 值。只有当它 return 发送给用户时,它才能正常工作。
“调用”不是同步调用。 Peer 在收到您的 Web 请求时立即生成此 OK 消息。
稍后,当验证节点尝试生成新块时,此“调用”方法将与其他缓存事务一起执行。
轮到链码到链码的调用是同步的并且同时执行。
作为解决方法,我们使用另一个查询请求来检查此已提交调用的状态。如果有人能提出更好的解决方案,那就太好了。
如果您需要在处理 Invoke 后立即获得一个 return 值(包含在一个块中),您最好的选择是使用一些事件(目前我猜)。
在您的链代码中,只需设置事件:
func (stub *ChaincodeStub) SetEvent(name string, payload []byte) error
您可以直接使用 SDK 或 protobuf 消息来侦听应用程序中的事件。我在开发者预览中就是这样做的;但似乎检索调用结果的标准方法是通过查询轮询区块链。
有一个相关的 GitHub 问题 here。
我正在尝试设计一个 hyperledger 链代码,它通过网络 API 访问,它将 json 对象传递给代码。但是,每当我执行调用方法时,我实际上无法在 json 响应中向用户提供 return 值。
例如,这里有一些示例代码:
func (t *TLCChaincode) Invoke(stub *shim.ChaincodeStub, function string, args []string) ([]byte, error) {
//Do some stuff
return []byte("Some string"), nil
}
以及return错误
的一些示例代码func (t *TLCChaincode) Invoke(stub *shim.ChaincodeStub, function string, args []string) ([]byte, error) {
//Try to do some stuff
//Get some sort of error
return nil, errors.New("someError")
}
但是这两个 return 都是这样的消息,消息总是像下面这样的一些随机字符串(我怀疑是某种哈希):
{
"jsonrpc": "2.0",
"result": {
"status": "OK",
"message": "1e1123e3-b484-4120-a28e-c3a8db384557"
},
"id": 11
}
如您所见,此响应既不包含我 returned 的响应(在第一种情况下),也不包含我 returned 的错误(在第二种情况下)。我将如何获取 returned 字节,或将 returned 错误放入 returned json?
编辑:请注意,如果我从另一个链代码调用调用方法,它会收到正确的 return 值。只有当它 return 发送给用户时,它才能正常工作。
“调用”不是同步调用。 Peer 在收到您的 Web 请求时立即生成此 OK 消息。 稍后,当验证节点尝试生成新块时,此“调用”方法将与其他缓存事务一起执行。
轮到链码到链码的调用是同步的并且同时执行。
作为解决方法,我们使用另一个查询请求来检查此已提交调用的状态。如果有人能提出更好的解决方案,那就太好了。
如果您需要在处理 Invoke 后立即获得一个 return 值(包含在一个块中),您最好的选择是使用一些事件(目前我猜)。
在您的链代码中,只需设置事件:
func (stub *ChaincodeStub) SetEvent(name string, payload []byte) error
您可以直接使用 SDK 或 protobuf 消息来侦听应用程序中的事件。我在开发者预览中就是这样做的;但似乎检索调用结果的标准方法是通过查询轮询区块链。
有一个相关的 GitHub 问题 here。