第 11 讲:账户模型——nonce、重放与两种模型的权衡
以太坊的两类账户与状态的四个字段;nonce 同时承担的三项职责及其带来的队头阻塞;跨链重放攻击与 EIP-155;CREATE 与 CREATE2 的地址派生公式及「反事实部署」;以及 UTXO 与账户模型的完整权衡对比和 Solana、Cardano 的混合方案。
以太坊的两类账户与状态的四个字段;nonce 同时承担的三项职责及其带来的队头阻塞;跨链重放攻击与 EIP-155;CREATE 与 CREATE2 的地址派生公式及「反事实部署」;以及 UTXO 与账户模型的完整权衡对比和 Solana、Cardano 的混合方案。
为什么承诺一个「可变映射」不能用普通 Merkle 树:需要规范性、按键查找、不存在性证明和增量更新。从前缀树到路径压缩再到 Merkle 化,讲清以太坊 MPT 的三种节点与 HP 编码,为什么键要先哈希,以及它带来的写放大和随机磁盘访问——这是以太坊全节点最大的性能瓶颈。
SPV 到底验证了什么、它比全节点多信任了什么;以太坊同步委员会的信任假设;无状态客户端的思路与它撞上的墙——MPT 见证数据太大;以及 Verkle 树如何用向量承诺去掉「兄弟节点」这一项,把见证从 MB 级压到百 KB 级。
「传播时间」这个量被后面好几讲当常量用,这一讲把它推导出来:gossip 的跳数从哪来、传播时间由物理延迟/验证/传输三项组成而只有一项能靠加带宽改善、Compact Blocks 与 Erlay 在优化哪一项,以及 Eclipse 攻击为什么打的是共识证明的前提而不是共识算法本身。
PoW 谜题的三个性质为什么缺一不可,尤其是「无记忆性」如何保证大矿工没有额外优势;出块时间服从指数分布带来的高方差(36.8% 的区块间隔超过 10 分钟);难度调整公式、4 倍限幅、以及一个永远修不掉的 off-by-one bug;矿池的份额机制与它带来的集中化压力。
分叉选择规则为什么是「累计工作量最大」而不是「最长」;临时分叉与孤块率如何限制出块速度;中本聪的双花概率计算与「6 个确认」这个数字的来源;51% 攻击能做和不能做什么;以及自私挖矿如何把真正的安全阈值从 50% 拉低到 25%。
安全预算等于矿工收入这条核心等式的推导;2100 万总量的等比级数与减半机制;区块奖励归零后「纯手续费」为什么在理论上会让最长链共识变得不稳定;以及为什么链的安全性和币价正相关——熊市里的链更容易被攻击。
PoS 与 PoW 的结构性差异:稀缺资源在链内还是链外,以及由此产生的「罚没」这一 PoW 不具备的能力;无利害关系问题与长程攻击的成因和解法;以太坊的罚没条件、相关性惩罚为什么会鼓励客户端多样性、非活跃泄漏如何在活性与安全性之间做选择;以及 PoS 无法回避的三个批评。
PBFT 为什么需要三个阶段(含法定人数交集的完整论证)、视图切换的 O(n³) 代价;Tendermint 的锁定机制如何用两阶段实现即时最终性,以及它在网络分区时为什么会停机;HotStuff 如何用「多加一个阶段」换来线性复杂度和流水线化;以及为什么公链不能直接照搬 BFT。
以太坊如何把中本聪共识的「无准入、不停机」和 BFT 的「确定性最终性」缝在一起:LMD-GHOST 的子树权重分叉选择、Casper FFG 的证成与最终确定两条规则、可问责安全性为什么让回滚的代价等于三分之一总质押,以及 2023 年真实发生过的最终性停滞。