区块链(35):Fabric 的背书、排序与有效提交是三个阶段
与前面开放成员网络不同,Fabric 以组织身份与许可规则限定参与者。卖家提交合成订单更新请求,背书 peer 先在当前状态下模拟并签名读写集,排序服务把交易排进块,提交 peer 再核查背书策略、读版本和相同块中先前有效写入是否造成冲突。拿到排序块不意味着这笔订单已经有效写入 world state。
sequenceDiagram
participant C as 订单客户端
participant E as 多组织背书 peer
participant O as 排序服务
participant P as 提交 peer
C->>E: 提案/模拟
E-->>C: 带签名读写集
C->>O: 组装交易
O-->>P: 有序区块
P->>P: 背书与 MVCC 版本检查
P-->>C: 有效写入或无效标记
反例一:只取得组织 A 背书却需 A+B,模拟结果相同也应因策略不符而无效。反例二:两笔交易都读取订单版本 v,第一笔有效提交写成 v+1 后第二笔的旧读版本不再匹配;无效交易可留下链上记录,但其写集不能生效。排序顺序和订单现实交付仍是两个问题;许可成员减少开放网络抗女巫难题,却引入证书签发、组织治理与排序者信任。
一次模拟不等于一次真实写入
组织 A/B 约定订单变更必须满足双方背书。客户端提交“从 OPEN 改成 PAID”的同一提案,两家背书 peer 各自在自己看到的当前状态上模拟,分别形成签名和读写集;如果 A 读取订单版本 v,B 已同步到 v+1,简单收集两个签名不能修补不一致的模拟输入。客户端应先核对响应一致性,再把合格交易送排序服务。排序服务可以把它放进块,却不负责把每一条交易都执行成有效状态。提交 peer 检查背书策略,并按前面有效写入形成的新版本对比该交易读集,确认未冲突才把写集用于 world state。
例如同一块中两笔订单更新都读 v:第一笔有效,把版本写成 v+1;第二笔即使先前有合法背书,也应因读版本过旧被标无效。交易 ID 在块里可见、事件订阅已经读到“某提案提交”或 HTTP 返回成功,均不能直接代表有效写入;应用需取得提交验证码、对应块与最新世界状态再更新自己的订单表。若排序者停机、证书过期或背书组织撤回权限,分别影响活性、身份和治理条件。这里不复用 14 篇的 n=3f+1 玩具门槛:Fabric 的组织身份、背书和排序信任要按实际网络配置核对。多组织实验与源码 SHA 仍未冻结。
练习一:已出块且交易 ID 可查,能直接把订单标为已结算吗?答案:不能,需检查提交有效标记和 world state。练习二:两个组织各自模拟同一订单,不同读版本如何处理?答案:背书结果需满足一致的提案/读写集要求,提交阶段还要检查最新版本;不能将任意两签名直接相加。Fabric 多组织网络、背书不足/MVCC/有效提交三组真实对照 NOT_RUN。
可迁移原则:许可链把谁可签、谁排队和何时有效提交分离。参考:Fabric 交易流程、Fabric 背书策略(部署版本、源码 SHA 待核);导航:区块链(34):Validity rollup 的证明到底验证哪条命题 · 35 · 区块链(36):节点备份、RPC 与终局停滞不能混成“服务异常”。




