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

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,或带有更高 QCPrepare QC
Pre-commitPrepare QC验证 QC更新 lockedQC
CommitPre-commit QC验证 QCCommit 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 超时后新领导者:

  1. 向副本收集本地最高 QC。
  2. 选视图号最高者作为父,提出新 node。
  3. 副本在提案扩展该 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。