HotStuff
HotStuff(Yin et al.,PODC 2019)是部分同步、领导者驱动的 BFT。副本只与当前领导者通信(星型),投票聚合成 QC,视图切换携带最高 QC 即可,通信从 \(O(n^2)\) 降到 \(O(n)\)。模型见 BFT;对照 PBFT。
系统模型
- \(n \ge 3f+1\),至多 \(f\) 个拜占庭。
- 部分同步:GST 之前任意延迟,之后延迟 \(\le \Delta\)。
- 消息不可伪造(签名)。QC 可用阈值签名压成常数大小。
- 视图 \(v\) 有唯一领导者。Pacemaker 用超时推进视图,不参与 safety 证明。
数据结构
- 提案:视图号 +
node。node含命令、父哈希、父 QC。 - 投票:对某个
node哈希的签名。 - QC(Quorum Certificate):同一
node上 \(2f+1\) 张投票的聚合。QC 证明该节点已获得法定人数认可。 - 锁定:副本在 pre-commit 后把
lockedQC设为该 QC,后续只给其后代投票(除非新领导者出示更高视图的 QC)。
三阶段与三链提交
经典 HotStuff 一轮三个投票阶段。领导者收集 \(2f+1\) 张投票后广播对应 QC:
| 阶段 | 领导者广播 | 副本条件 | 结果 |
|---|---|---|---|
| Prepare | 新 node(须扩展最高 QC) | node 扩展 lockedQC,或带有更高 QC | Prepare QC |
| Pre-commit | Prepare QC | 验证 QC | 更新 lockedQC |
| Commit | Pre-commit QC | 验证 QC | Commit QC,提交祖先 |
三链规则:区块 \(B\) 被提交,当且仅当存在连续三代 \(B \leftarrow B’ \leftarrow B’’ \leftarrow B’‘’\),且后三代各自带 QC。提交 \(B’‘’\) 时一并提交祖先 \(B\)。
第三阶段消除 hidden lock:两阶段时,新领导者可能看不到某个副本的锁定,从而要求它给冲突分支投票,破坏 liveness。Pre-commit 把锁定写入 QC,新领导者用「最高 QC」覆盖。
链式 HotStuff
阶段叠在块上:第 \(k\) 块的 Prepare 同时作为第 \(k-1\) 块的 Pre-commit、第 \(k-2\) 块的 Commit。每出一块只做一轮星型投票,吞吐为每块 \(O(n)\) 投票,确认延迟约三块。
视图切换
Pacemaker 超时后新领导者:
- 向副本收集本地最高 QC。
- 选视图号最高者作为父,提出新
node。 - 副本在提案扩展该 QC(或 QC 高于自己的
lockedQC)时投票。
不携带 PBFT 的 prepared 集合,无需全对全 VIEW-CHANGE。通信 \(O(n)\)。
安全与活性
- Safety:冲突
node不能同时获得 QC(quorum 相交)。诚实副本不给与lockedQC冲突的非后代投票,除非新 QC 视图更高——更高 QC 已与旧锁定相交,不可能冲突。 - Liveness:GST 之后 Pacemaker 给出诚实领导者且超时大于 \(\Delta\),QC 可形成。响应性:同步后进度跟实际延迟走,不绑死最坏 \(\Delta\)。
两链变体
Jolteon / DiemBFT-2chain / AptosBFT 把提交压成两链,用超时证书(TC)处理 hidden lock:视图超时后聚合 \(2f+1\) 条超时消息,新提案必须携带 TC 或更高 QC。LibraBFT 是 HotStuff 的链上实例。数据传播与排序分离见 DAG-BFT。