我试图了解Hyperledger Fabric中的“查询”事务流程。我理解Fabric中的“写入”流程,因为它有详细记录。但是,当涉及读/查询事务时,事情并不那么清楚。
这是我到目前为止所理解的:
我对这之后的流程不太确定。写入事务是可以理解的:在执行一些检查之后,顺序将创建块并将块传播到连接到相应通道的所有对等体。在对块中的所有事务进行验证之后,所有对等体都会将块附加到分类帐中,这实质上更新了分类帐。
但是阅读交易怎么样?订货人在收到读取交易后会返回什么?以后会有什么样的流程?
任何帮助或指示都将受到高度赞赏。
提前致谢。
答案 0 :(得分:3)
您可能需要查看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的以下内容:
A query is a chaincode invocation which reads the ledger current state but does
not write to the ledger. The chaincode function may query certain keys on the ledger,
or may query for a set of keys on the ledger. Since queries do not change ledger state,
the client application will typically not submit these read-only transactions for ordering,
validation, and committal. Although not typical, the client application can choose to
submit the read-only transaction for ordering, validation, and commit, for example if the
client wants auditable proof on the ledger chain that it had knowledge of specific ledger
state at a certain point in time. Peers will validate and add the read-only transaction
to the ledger chain, but there will be no updates to ledger current state.
答案 1 :(得分:0)
这似乎与您在回答此问题时发布的内容相矛盾:Roles (read+write) in hyperledger
你在这里描述的行为是有道理的,而上述答案中的行为似乎完全被打破了。然而,似乎不允许频道上的读者执行调用。