从Hyperledger Fabric中的Chaincode返回值

时间:2018-03-06 10:54:29

标签: blockchain hyperledger-fabric hyperledger hyperledger-composer

我想从链代码事务中获取一些数据(对于查询而言过于复杂),但是,正如我从代码中看到的那样,事务会返回不解析为值的promise。此外,chaincode可以访问当前用户的身份,我不知道如何在查询中实现它。

Util类包含invokeChainCodequeryChainCode方法,但BusinessNetworkConnection类只包含使用submitTransaction的{​​{1}}事务方法并且不会返回任何价值。

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

1 个答案:

答案 0 :(得分:2)

据我所知,您希望从交易中返回一些值。

假设事务是Invoke Type(不是查询),那么无论您从链代码返回什么(例如shim.Success(someData);,它都将是您的事务有效负载的一部分。)

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

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

收到此事件后,您可以确保您的交易在对等方中成功提交。

您可以使用相同的事务ID来查询对等方以获取事务块。

在JSON中获取事务有效负载后,您可以深入了解JSON并在JSON有效负载的提案响应部分中找到返回值。

[P.S。假设您正在使用Node JS SDK]

编辑1:

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

  1. 调用 - 如果您将建议响应发送到订货人,那么您的值(如果有)将被写入状态,否则任何查询的值将作为建议响应有效负载的一部分返回。
  2. 部署 - 如果是Chaincode部署事务,其中有效负载只是一个链代码二进制文件。
  3. 因此,如果您只有只读事务,那么您只需提交事务并从对等方获取提议响应有效负载。提案响应本身是查询调用的结果。