我试图了解Hyperledger Fabric中的“查询”事务流程 . 我理解Fabric中的“写入”流程,因为它有详细记录 . 但是,当涉及读/查询事务时,事情并不那么清楚 .
这是我到目前为止所理解的:
-
使用SDK的客户端准备用于查询链代码的事务提议 .
-
该提案通过提交对等方传输给Endorsing对等方,后者验证并最终模拟交易 . 假设一切都成功,那么支持同行会回复他们对提案的认可 . 每个认可都包含世界各州的 readset . 由于这只是一个查询事务,因此不会在每个附件中添加 writeset . 我的理解在这里是否正确?
-
一旦客户收到所需的认可金额,它就会准备一份发送给订货人的交易 .
在此之后我不太确定流程 . 写入事务是可以理解的:在执行一些检查之后,顺序将创建块并将块传播到连接到相应通道的所有对等体 . 在对块中的所有事务进行验证之后,所有对等体都会将块附加到分类帐中,这实质上更新了分类帐 .
但是阅读交易怎么样?订货人在收到读取交易后会返回什么?以后的流程是什么?
任何帮助或指示将受到高度赞赏 .
提前致谢 .
2 回答
您可能需要查看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的以下内容:
这似乎与您在回答此问题时发布的内容相矛盾:Roles (read+write) in hyperledger
你在这里描述的行为是有道理的,而上述答案中的行为似乎完全被打破了 . 然而,似乎不允许 Channels 上的读者执行调用 .