Return 来自 Hyperledger Fabric 链代码的值

Return values from chaincode in Hyperledger Fabric

我想从链代码交易中获取一些数据(对于查询来说太复杂了),但是,正如我从代码中看到的那样,交易 return 承诺不会解析为值。此外,chaincode 可以访问当前用户的身份,我不知道如何在查询中实现它。

Utilclass包含invokeChainCodequeryChainCode两个方法,但是BusinessNetworkConnectionclass只有submitTransaction 使用 invokeChainCode 且不 return 任何值的交易方法。

除了复制和修改 submitTransaction 的代码之外,从链代码获取数据的正确方法是什么?

据我了解你的问题,你希望 return 从交易中获得一些价值。

假设交易是调用类型(不是查询),那么无论您从链码中 returning 什么(例如 shim.Success(someData);,它都将成为您交易负载的一部分。)

因此,为了从交易中获取该交易有效负载,您必须确保将其提交到对等方的分类帐。

可以肯定的是,就在您提交交易之前,您可以使用给定的交易 ID 订阅交易事件)

一旦您收到此事件,您就可以确定您的事务已在对等方中成功提交。

您可以使用相同的交易 ID 来查询交易块的对等方。

一旦您在 JSON 中获得交易有效载荷,您可以深入研究 JSON 并在 JSON 有效载荷的提案响应部分中找到 return 值。

[P.S。假设您使用的是 Node JS SDK]

编辑 1:

Hyperledger Fabric 在更广泛的层面上仅支持 2 种类型的交易。

  1. 调用 - 如果您将提案响应发送给排序者,那么您的值(如果有的话)将写入状态,否则,任何查询的值都会 returned 作为提案响应有效负载的一部分。
  2. 部署 - 在负载只是链代码二进制文件的链代码部署交易的情况下。

因此,如果您有只读交易,那么您可以只提交交易并从对等点获取提案响应负载。提案响应本身就是您的查询调用的结果。