交易何时在 HLF v1 中完成?

When transaction is finalized in HLF v1?

根据架构解释 (http://hyperledger-fabric.readthedocs.io/en/latest/arch-deep-dive.html),排序服务将交易 (RWSets) 收集到块中,以便分发给提交节点。然后,提交节点验证背书策略,然后 RWsets 将交易应用到账本。

为了验证交易是否成功,客户端应用程序是否应该等到所有提交的节点都返回 "Success" 事件?或者只需要验证一个 "Success" 事件 ?

To verify the transaction was succeeded, should client application wait until all committing peers returned "Success" event ? Or just need to verify only one "Success" event ?

田中,这是一个很好的问题! 简短的回答是

原因是,与现有的流行区块链相比,HLF 具有独特的交易生命周期,它可以:

  • 在某一个或几个背书人上模拟交易
  • 它被发送到排序服务并被切割成一些块
  • 区块被发送给节点,他们都执行相同的验证码并且特定交易的所有验证码保证在所有节点中得出相同的结论,因为他们 运行 它在所有人中的顺序相同。

因此,如果一笔交易在某个节点上得到验证——当其他节点收到该交易所在的区块时——他们也会认为它是有效的。

但是 - 您应该考虑的一个非常重要的方面是数据可用性和同步。 例如,如果您有一个使用 10 个节点的应用程序,只有 1 个节点获得事件而其余节点没有,并且您在其他节点上调用另一个事务,则其他节点计算的背书可能是变成无效交易,因为他们会模拟旧数据(他们还没有得到事件的事实证明他们还没有处理该交易的块),所以你需要记住这一点。