在Hyperledger Fabric

时间:2017-09-16 12:31:20

标签: transactions hyperledger-fabric hyperledger

我试图了解Hyperledger Fabric中的“查询”事务流程。我理解Fabric中的“写入”流程,因为它有详细记录。但是,当涉及读/查询事务时,事情并不那么清楚。

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

  1. 使用SDK的客户准备用于查询链码的交易提案。
  2. 该提案通过提交对等方传输给Endorsing对等方,后者验证并模拟最终的事务。假设一切都成功,那么赞同的同行会回复他们对提案的认可。除其他事项外,每个认可都包含世界国家的 readset 。由于这只是一个查询事务,因此不会在每个附件中添加 writeset 。我的理解在这里是否正确?
  3. 一旦客户收到所需的认可金额,它就会准备一份发送给订货人的交易。
  4. 我对这之后的流程不太确定。写入事务是可以理解的:在执行一些检查之后,顺序将创建块并将块传播到连接到相应通道的所有对等体。在对块中的所有事务进行验证之后,所有对等体都会将块附加到分类帐中,这实质上更新了分类帐。

    但是阅读交易怎么样?订货人在收到读取交易后会返回什么?以后会有什么样的流程?

    任何帮助或指示都将受到高度赞赏。

    提前致谢。

2 个答案:

答案 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

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