json - 如何在 Invoke json 响应中返回值

标签 json go blockchain hyperledger

我正在尝试设计一个 hyperledger 链代码,它通过 Web API 访问,它将 json 对象传递给代码。但是,每当我执行调用方法时,我实际上无法在 json 响应中将值返回给用户。

例如,这里有一些示例代码:

func (t *TLCChaincode) Invoke(stub *shim.ChaincodeStub, function string, args []string) ([]byte, error) {
    //Do some stuff
    return []byte("Some string"), nil
}

以及一些返回错误的示例代码

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")
}

但是这两个都返回这样的消息,消息总是像下面这样的一些随机字符串(我怀疑是某种哈希):

{
  "jsonrpc": "2.0",
  "result": {
    "status": "OK",
    "message": "1e1123e3-b484-4120-a28e-c3a8db384557"
  },
  "id": 11
}

如您所见,此响应既不包含我返回的响应(在第一种情况下),也不包含我返回的错误(在第二种情况下)。我将如何将返回的字节或返回的错误获取到返回的 json 中?

编辑:请注意,如果我从另一个链代码调用调用方法,它会收到正确的返回值。只有当它返回给用户时,它才能正常工作。

最佳答案

“调用”不是同步调用。 Peer 在收到您的 Web 请求时立即生成此 OK 消息。 稍后,当验证节点尝试生成新 block 时,此“调用”方法将与其他缓存事务一起执行。

反过来,链码到链码的调用是同步的并同时执行。

作为解决方法,我们使用另一个查询请求来检查此已提交调用的状态。如果有人能提出更好的解决方案,那就太好了。

关于json - 如何在 Invoke json 响应中返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38486970/

相关文章:

jquery - 在 jQuery 中解析 JSON 对象并创建下拉菜单

go - Bosun - 使用 .GetMeta 获取主机的 IP 地址

blockchain - Fabric Composer 测试代码不工作

blockchain - 测试网上的 Chainlink 预言机

hashtable - 分布式哈希表技术和比特币区 block 链有什么区别?

Jquery - 选择随机 JSON 对象

javascript - 通过模板输出时Python字典对象转换为JSON

javascript - JSON 与 Angular JS 不起作用(Ionic 和 Cordova)

pointers - 当存储在指针内时, slice 的`reflect.Kind()`成为`Struct`

postgresql - Golang Postgres 如何将表转储为 JSON