在Hyperledger Fabric中读取(查询)事务流

Rip*_*pul 5 transactions hyperledger hyperledger-fabric

我试图了解Hyperledger Fabric中的“查询”事务流。我了解Fabric中的“写入”流程,因为它有据可查。但是,当涉及读/查询事务时,事情还不清楚。

到目前为止,这是我所了解的:

  1. 使用SDK的客户端准备用于查询链码的交易建议。
  2. 提案通过提交对等方传输到认可对等方,并最终验证并模拟交易。假设一切成功,则背书的同行将对提案的背书。除其他事项外,每个背书都包含对世界状态的重新解读。由于这只是一个查询交易,一个写集是不是每个ensorsement里面添加。我的理解在这里正确吗?
  3. 客户收到所需的背书金额后,便准备一笔交易,发送给订购者。

我不太确定之后的流程。写事务是可以理解的:执行一些检查后,该命令将创建一个块并将该块传播到连接到相应通道的所有对等点。在对区块中的所有交易进行验证之后,所有对等方都会将该区块追加到分类账中,这实际上更新了分类账。

但是读事务呢?订购者在收到读取的交易记录后会返回什么?此后的流程如何?

任何帮助或指针将不胜感激。

提前致谢。

Gar*_*ngh 7

您可能想查看https://github.com/hyperledger/fabric-samples/blob/release/fabcar/query.js,其中演示了如何使用 Node SDK 进行查询。您会注意到它使用SDK 提供的便捷方法https://fabric-sdk-node.github.io/Channel.html#queryByChaincode__anchor来帮助方便查询。

根据您在帖子中概述的流程,步骤 1 和 2 是正确的。
此外,用于查询交易的链码函数通常会使用https://godoc.org/github.com/hyperledger/fabric/core/chaincode/shim#Success辅助函数来实际返回查询结果。在我上面发布的示例中,https://github.com/hyperledger/fabric-samples/blob/release/fabcar/query.js#L51调用https://github.com/hyperledger/fabric-samples/blob/release /chaincode/fabcar/fabcar.go#L135

无需将查询交易的响应发送给排序者,但只要满足背书策略即可。感谢 Dave Enyeart 提供以下内容:

查询是一个链码调用,它读取账本当前状态但不写入账本。链码函数可以查询账本上的某些键,也可以查询账本上的一组键。由于查询不会更改分类帐状态,因此客户端应用程序通常不会提交这些只读事务以进行排序、验证和提交。虽然不典型,但客户端应用程序可以选择提交只读事务以进行排序、验证和提交,例如,如果客户端想要在账本链上提供可审计的证据,证明它在某个时间点了解特定的账本状态. Peers 将验证只读交易并将其添加到账本链,但不会更新账本当前状态。