在HyperLeDger织物中读取(查询)交易流



我试图了解HyperLeDger织物中的"查询"事务流。我了解织物中的"写入"流,因为它已经有充分的文献记录。但是,当涉及阅读/查询交易时,情况并不清楚。

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

  1. 使用SDK的客户端准备查询链代码的交易建议。
  2. 该提案是通过承诺的同行传输到认可的同龄人的,这些同行验证和模拟交易的末尾。假设一切都成功了,认可的同龄人会为提案提供认可。每个认可都包含世界状态的 READSET 。由于这只是一个查询事务,因此在每个insorsement中未添加 Writeset 。我的理解在这里正确吗?
  3. 一旦客户收到所需的认可量,它就会准备发送给订单器的交易。

我不太确定此之后的流程。写入交易是可以理解的:进行一些检查后,该顺序将创建一个块并将块传播到连接到相应通道的所有同行。在进行块中所有交易的验证后,所有同行都将附加分类帐中的块,这实质上会更新分类帐。

但是阅读交易呢?订购者在收到读取交易后会返回什么?以下流程是什么?

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

预先感谢。

您可能想看一下https://github.com/hyperledger/fabric-samples/blob/release/fabcar/query.jsSDK。您会注意到它使用便利方法https://fabric-sdk-node.github.io/channel.html#querybybychaincode__anchor提供了SDK提供的帮助。

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

,只要您符合认可策略,就可以将查询交易中的响应发送给订购者。感谢Dave Enyeart的以下内容:

查询是一个链式调用,它读取分类帐的当前状态但确实如此不写信给分类帐。链代码函数可能会在分类帐上查询某些键,或者可能会在分类帐上查询一组键。由于查询不会改变分类帐状态,因此客户端应用程序通常不会提交这些仅阅读交易以订购,验证和委托。尽管不是典型的,但客户端应用程序可以选择提交仅阅读交易以进行订购,验证和提交,例如客户希望在分类帐链上可审核的证据,以了解特定分类帐在某个时间点陈述。同行将验证并添加仅阅读交易到分类帐链,但不会对分类帐的当前状态进行更新。

这似乎与您在此问题的答复中发表的内容相矛盾:hyperledger中的角色(读取 写)

您在这里描述的行为是有道理的,而上述答案中的行为似乎完全破坏了。然而,似乎不允许频道上的读者执行调用。

最新更新