DAG-BFT
把数据传播和排序拆开:验证者并发广播交易批次,用证书(或无证书的引用)织成 DAG,共识只在 DAG 上选一刀切齐的提交切面。数据面解决可用性,排序面解决最终性。模型仍是 BFT 的 \(n \ge 3f+1\)。
Narwhal(数据面)
每个验证者跑若干 worker:
- Worker 收集交易,打成 batch,广播。
- 其它验证者存储后回签名。
- \(2f+1\) 个签名形成 certificate,证明该 batch 可用(至少 \(f+1\) 个诚实节点持有)。
- Primary 把证书广播。新证书引用上一轮若干证书,形成 round 索引的 DAG。
诚实验证者每 round 至少一个证书(自己的或超时后的空块)。DAG 边是可用性证明,不是执行顺序。通信与存储随 worker 数水平扩展,共识消息只搬运证书哈希。
排序面
| 协议 | 网络 | 做法 |
|---|---|---|
| Tusk | 异步 | 随机选锚点,递归提交因果前驱 |
| Bullshark | 部分同步 | 固定 round 的锚点,GST 后无额外随机延迟 |
| Jolteon + Quorum Store | 部分同步 | 数据面 Narwhal 化,排序仍用 HotStuff 两链 |
提交规则(Bullshark 形状):在偶数 round 的锚点证书获得足够子引用后,其因果历史一次性 commit。已提交证书不再回滚。应用按确定性拓扑序(作者、round、哈希)把 DAG 线性化成交易流。
形状示例:round 索引的证书互相引用,箭头表示对证书的引用关系:
flowchart LR A1[A1] --> B2[B2] --> A3[A3] B1[B1] --> A2[A2] --> C3[C3] C1[C1] --> C2[C2] --> B3[B3] C1 --> B2 A2 --> B3 B1 --> C2 C2 --> A3
若 \(A3\) 是偶数 round 锚点且获得足够子引用,则 commit 其因果前驱 \(A1,B1,C1\) 及 \(A2,B2\) 等可到达集——排序面只看引用闭合,不看交易内容。
Sui:Mysticeti
Sui 先用 Narwhal-Bullshark,后换 Mysticeti:无证书 DAG,块直接引用 \(2f+1\) 个前驱。少一轮签名聚合,提交延迟降到 2–3 次广播。隐式 commit 规则在 DAG 图案上识别,不跑独立的 HotStuff 视图。对象级因果允许无冲突交易并行提交,这是执行模型,不是共识阈值的放宽。
Aptos:Quorum Store
Aptos 排序仍是 AptosBFT(HotStuff 两链 + 超时证书)。Narwhal 思想用在 Quorum Store:交易批次先散到验证者并收集签名,提案只带批次证明,领导者不再塞满交易体。共识带宽与 mempool 解耦。
对照
| 经典 HotStuff | Narwhal + Bullshark | Mysticeti | |
|---|---|---|---|
| 数据传播 | 跟提案走 | 证书 DAG | 无证书块 DAG |
| 排序 | 领导者 QC 链 | 锚点切面 | DAG 图案隐式 commit |
| 领导者瓶颈 | 出块与带宽 | 仅证书 | 弱化 |
| 最终性 | \(k\)-chain QC | 切面确定 | 切面确定 |
与 Avalanche Snow 的差别:DAG-BFT 仍收集 \(2f+1\) 可用性或引用,提交是确定的;Snow 用 \(k\)-抽样,提交是高概率的。