如果多个交易在 Hyperledger Fabric 中的同一块中更改同一资产,那么块会发生什么情况?

dee*_*mar 2 hyperledger-fabric

我对理解以下用例有点困惑:

假设,我们在同一个区块中有多个交易正在改变同一资产的状态,那么在 Hyperledger Fabric 的共识周期中会发生什么?

  • 区块将被拒绝
  • 区块中的第一笔交易将成功,但其余交易将失败

请帮助我理解这个极端情况。

Gar*_*ngh 5

Fabric 中的共识涉及多个部分:

  1. 通过调用链码并接收来自正确数量的对等点的响应,调用链码函数并获取足够的背书(通常是签名)以满足背书策略
  2. 将交易提交给排序服务节点,排序服务节点就交易顺序达成共识,然后将其打包成块
  3. 排序节点将交易广播到对等节点,然后对等节点验证交易并提交有效交易的状态更改

节点通过检查确保每笔交易符合所调用的链码的背书策略来验证交易,然后检查每笔交易的读取集以确保在链码中读取的每个密钥的版本没有更改。如果已更改,则该事务将被标记为无效,并且不会处理其写入集(状态更改)。交易仍然保留在块中,但该块用指示块中每个交易的状态的元数据进行注释。验证和提交逻辑是确定性的。

您应该通读文档中的事务流读写集语义以了解较低级别的详细信息。