Return 来自 Hyperledger Fabric 链代码的值
Return values from chaincode in Hyperledger Fabric
我想从链代码交易中获取一些数据(对于查询来说太复杂了),但是,正如我从代码中看到的那样,交易 return 承诺不会解析为值。此外,chaincode 可以访问当前用户的身份,我不知道如何在查询中实现它。
Util
class包含invokeChainCode
和queryChainCode
两个方法,但是BusinessNetworkConnection
class只有submitTransaction
使用 invokeChainCode
且不 return 任何值的交易方法。
除了复制和修改 submitTransaction
的代码之外,从链代码获取数据的正确方法是什么?
据我了解你的问题,你希望 return 从交易中获得一些价值。
假设交易是调用类型(不是查询),那么无论您从链码中 returning 什么(例如 shim.Success(someData);
,它都将成为您交易负载的一部分。)
因此,为了从交易中获取该交易有效负载,您必须确保将其提交到对等方的分类帐。
可以肯定的是,就在您提交交易之前,您可以使用给定的交易 ID 订阅交易事件)
- 参考:
https://github.com/hyperledger/fabric-samples/blob/release/balance-transfer/app/invoke-transaction.js#L90
- 事件中心:https://fabric-sdk-node.github.io/EventHub.html
一旦您收到此事件,您就可以确定您的事务已在对等方中成功提交。
您可以使用相同的交易 ID 来查询交易块的对等方。
- 参考:https://github.com/hyperledger/fabric-samples/blob/release/balance-transfer/app/query.js#L95
- Channel.queryTransaction : https://fabric-sdk-node.github.io/Channel.html#queryTransaction__anchor
一旦您在 JSON 中获得交易有效载荷,您可以深入研究 JSON 并在 JSON 有效载荷的提案响应部分中找到 return 值。
[P.S。假设您使用的是 Node JS SDK]
编辑 1:
Hyperledger Fabric 在更广泛的层面上仅支持 2 种类型的交易。
- 调用 - 如果您将提案响应发送给排序者,那么您的值(如果有的话)将写入状态,否则,任何查询的值都会 returned 作为提案响应有效负载的一部分。
- 部署 - 在负载只是链代码二进制文件的链代码部署交易的情况下。
因此,如果您有只读交易,那么您可以只提交交易并从对等点获取提案响应负载。提案响应本身就是您的查询调用的结果。
我想从链代码交易中获取一些数据(对于查询来说太复杂了),但是,正如我从代码中看到的那样,交易 return 承诺不会解析为值。此外,chaincode 可以访问当前用户的身份,我不知道如何在查询中实现它。
Util
class包含invokeChainCode
和queryChainCode
两个方法,但是BusinessNetworkConnection
class只有submitTransaction
使用 invokeChainCode
且不 return 任何值的交易方法。
除了复制和修改 submitTransaction
的代码之外,从链代码获取数据的正确方法是什么?
据我了解你的问题,你希望 return 从交易中获得一些价值。
假设交易是调用类型(不是查询),那么无论您从链码中 returning 什么(例如 shim.Success(someData);
,它都将成为您交易负载的一部分。)
因此,为了从交易中获取该交易有效负载,您必须确保将其提交到对等方的分类帐。
可以肯定的是,就在您提交交易之前,您可以使用给定的交易 ID 订阅交易事件)
- 参考: https://github.com/hyperledger/fabric-samples/blob/release/balance-transfer/app/invoke-transaction.js#L90
- 事件中心:https://fabric-sdk-node.github.io/EventHub.html
一旦您收到此事件,您就可以确定您的事务已在对等方中成功提交。
您可以使用相同的交易 ID 来查询交易块的对等方。
- 参考:https://github.com/hyperledger/fabric-samples/blob/release/balance-transfer/app/query.js#L95
- Channel.queryTransaction : https://fabric-sdk-node.github.io/Channel.html#queryTransaction__anchor
一旦您在 JSON 中获得交易有效载荷,您可以深入研究 JSON 并在 JSON 有效载荷的提案响应部分中找到 return 值。
[P.S。假设您使用的是 Node JS SDK]
编辑 1:
Hyperledger Fabric 在更广泛的层面上仅支持 2 种类型的交易。
- 调用 - 如果您将提案响应发送给排序者,那么您的值(如果有的话)将写入状态,否则,任何查询的值都会 returned 作为提案响应有效负载的一部分。
- 部署 - 在负载只是链代码二进制文件的链代码部署交易的情况下。
因此,如果您有只读交易,那么您可以只提交交易并从对等点获取提案响应负载。提案响应本身就是您的查询调用的结果。