Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Execute-Order-Validate

Execute-Order-Validate(执行-排序-验证)是 Hyperledger Fabric 的共识架构:把「共识」拆成**排序(ordering)+ 背书(endorsement)+ 验证(validation)**三段——排序层只给已经过背书的交易排全序,交易合法性由背书策略与 peer 本地验证决定。排序层实现可选 CFT(Raft)或 BFT(SmartBFT,v3.0 起);无论哪种,共识不裁决交易内容。模型对照见 BFT。

三段流水线

  1. Endorse(执行 + 背书)。客户端提交提案,endorser 按背书策略执行交易,返回读写集(RW set)与背书签名;执行结果不立即写账本。
  2. Order(排序)。客户端把背书后的交易交给 ordering service;orderer 不执行、不判断内容,只按接收顺序打包成区块并广播。
  3. Validate(验证 + 提交)。每个 peer 收到区块后本地验证——背书策略是否满足、背书是否一致、读写集是否与最新状态冲突(MVCC);无效交易保留在区块里但标记 invalid,不更新状态。

关键:执行发生在排序之前且多副本各自执行,所以「哪个执行结果合法」不由共识裁决,而由背书策略 + 本地验证决定。区块一旦生成即最终,账本不分叉。

排序层:Raft 与 SmartBFT

实现容错节点数状态
Raft(etcd/raft)CFT\(\ge 2f+1\),过半可用生产默认(v1.4.1 起)
SmartBFTBFT\(\ge 3f+1\),恶意 \(< 1/3\)v3.0 起可用
Kafka / Solo——已弃用 / 移除
  • Raft:leader 选举 + 日志复制,确定性、无分叉。恶意节点可重排或审查,联盟链信任模型通常靠治理兜底。
  • SmartBFT:源自 BFT-SMART(非流水线的 PBFT)。leader 被怀疑故障时轮转更换;客户端把交易发给所有 orderer,以对抗 leader 故意忽略交易(审查)。
  • 排序层只解决「全序」,不解决「对错」——即使 orderer 诚实,恶意交易也会在 validate 阶段被 peer 拒绝。

与 BFT 系协议的关系

FabricCometBFT / TBFT
交易执行背书阶段(排序前)提案打包(共识中)
排序层容错可选 CFT / BFT必须 BFT
验证peer 本地(背书策略 + MVCC)共识内
非确定性背书策略约束(endorser 结果须一致)共识剔除(TBFT)
  • Fabric 把「确定最终状态」下放到每个 peer:验证独立于排序,故排序层可以退到 CFT 而不破坏账本一致性。
  • 代价:执行放大(同一交易被多个 endorser 与 peer 重复执行)、MVCC 冲突导致交易失效需重试、背书策略成为信任集中点。
  • SmartBFT 把排序层推到 \(3f+1\),对应「orderer 本身不可信」的场景;但交易正确性仍由背书 + 验证负责,与 BFT 系「共识裁决一切」的分工不同。

对照

Fabric 是「把共识职责最小化」的代表:排序只管全序,正确性放应用层。与之相对,CometBFT / TBFT 把打包与验证绑进共识,Gasper 用分叉选择 + FFG 裁决。联盟链的信任模型决定选哪种:orderer 可信则 Raft,orderer 可能作恶则 SmartBFT。