我想从链代码事务中获取一些数据(对于查询而言过于复杂),但是,正如我从代码中看到的那样,事务会返回不解析为值的promise。此外,chaincode可以访问当前用户的身份,我不知道如何在查询中实现它。
Util
类包含invokeChainCode
和queryChainCode
方法,但BusinessNetworkConnection
类只包含使用submitTransaction
的{{1}}事务方法并且不会返回任何价值。
除了复制和修改invokeChainCode
的代码之外,从链代码获取数据的正确方法是什么?
答案 0 :(得分:2)
据我所知,您希望从交易中返回一些值。
假设事务是Invoke Type(不是查询),那么无论您从链代码返回什么(例如shim.Success(someData);
,它都将是您的事务有效负载的一部分。)
因此,为了从事务中获取该事务有效负载,您必须确保将其提交给对等的分类帐。
可以肯定的是,在您提交交易之前,您可以使用给定的交易ID订阅交易事件。
收到此事件后,您可以确保您的交易在对等方中成功提交。
您可以使用相同的事务ID来查询对等方以获取事务块。
在JSON中获取事务有效负载后,您可以深入了解JSON并在JSON有效负载的提案响应部分中找到返回值。
[P.S。假设您正在使用Node JS SDK]
编辑1:
Hyperledger Fabric在更广泛的层面上仅支持两种类型的交易。
因此,如果您只有只读事务,那么您只需提交事务并从对等方获取提议响应有效负载。提案响应本身是查询调用的结果。