一、问题从哪来:同一个区块可以有两个历史
分布式系统里,「第 N 个区块是什么」不是一个客观事实,而是网络中多数节点的共同信念。 只要消息传播需要时间,就可能有两个节点在相近的时刻各自产出一个区块,两个分支同时被一部分节点接受, 各自继续延长。此时任何一笔交易都同时存在于两条历史中——它没有被「确认两次」,而是被「确认在两个互斥的世界里」。
所谓最终性(finality),指的就是一个系统承诺:从某个时刻起,被接受的区块不会再被替换。 分歧在于这个承诺以什么形式给出。主流方案分成两类,一类把承诺写成概率,一类把承诺写成投票记录。
二、概率性确认:把风险算成一个数
最长链规则(更准确地说是「累计工作量最大」规则)不禁止回滚,它只是让回滚越来越贵。
设攻击者控制全网算力比例 q,诚实节点占 p = 1 − q,
目标区块之后已经出现了 z 个确认区块。攻击者要想反超,必须在观察到的 z 个区块的时间里,
私下挖出 z + 1 个区块。这近似为一个泊松过程,其成功概率的上界可以写成:
P(追平) ≤ (q / p)^(z + 1)
中本聪在白皮书附录中给出了数值积分结果,下表是 q = 0.30 与 q = 0.10 两列常见取值:
| 确认数 z | q = 0.10 | q = 0.30 |
|---|---|---|
| 1 | 0.0000000 | 0.3639456 |
| 2 | 0.0000000 | 0.1322606 |
| 3 | 0.0000000 | 0.0479801 |
| 5 | 0.0000090 | 0.0061042 |
| 8 | 0.0000000 | 0.0002766 |
| 10 | 0.0000000 | 0.0000351 |
这张表里有两点值得强调。第一,概率的衰减是指数型的,但起点很高。
q = 0.30 时第 1 个确认仍有约 36% 的回滚可能,「1 个确认」在对手持有三成算力时几乎没有意义。
第二,这个上界假设攻击者的算力占比在观察期内保持不变,而真实市场中的算力是可以在数小时内迁移的——
租用算力把 q 短期推高的成本,并不等于长期持有该份额的成本。
概率性确认的时间代价由出块间隔直接决定。比特币平均 10 分钟一个区块,6 个确认对应约一小时; 同样的「6 个确认」在出块间隔 12 秒的链上只对应 72 秒,两者提供的安全边际完全不可比。 因此把「等 6 个确认」当作跨链通用规则,本身就是错误的抽象。
三、确定性终结:把风险写成投票记录
BFT 家族走的是另一条路。它不比较算力,而是要求验证者对具体区块留下可验证的签名。
经典结论是:在 3f + 1 个验证者中容忍 f 个拜占庭节点时,任意两个各含 2f + 1 名成员的法定集合必然相交。
这个交集意味着:两条互相冲突的记录不可能同时被证明为已终结,因为那至少需要 f + 1 个节点各自签下一次冲突承诺。
于是保证的形式变了。它不再是「回滚概率小于 ε」,而是:
若两个冲突的区块都被终结,则至少 f + 1 个验证者违反了协议规则,其签名可作为可验证的违规证据。
—「可问责性」(accountability)强调识别违规行为;是否处罚及如何执行,取决于具体协议。
以太坊的 Gasper 组合是这一思路的当代样本。LMD GHOST 负责链头选择,提供活性;
Casper FFG 负责终结,把检查点投票叠加在信标链的权益权重之上。
一个检查点被「终结」的条件是:超过三分之二的总质押权益先为其投票(justified),随后其子检查点也获得同样的多数支持。
按每个时隙 12 秒、每 epoch 32 时隙计算,从提议到终结通常要跨越两个 epoch,即约 12 分钟量级——
这个时间与比特币的 6 确认接近,但两者给出的不是同一种东西。
Casper 的罚没条件是这一保证的支点。协议规定验证者不得发出「包围投票」(surrounding vote):
不能先投 (source: s₁, target: t₁),再投一个 source 更旧而 target 更新的配对。
一旦违反,任何人在链上提交这两份签名即可触发罚没。因此「回滚一个已终结的区块」在以太坊上的含义是:
至少三分之一的质押权益同时作恶,并接受被销毁的后果。
弱主观性:确定性终结的隐藏前提
新加入的节点或长期离线后重新同步的轻客户端,无法只靠本地计算区分「当前规范链」与「一条在离线期间被秘密构建的分支」。 它必须从一个受信任的检查点开始同步,即所谓弱主观性(weak subjectivity)前提。 这个前提在实践中由社区维护的同步委员会、检查点广播与默认节点实现承担。它不削弱安全性论证,但把一部分信任从密码学转移到了运维流程上。
四、两种保证不可通约
把两者放在一起看,差异集中在四处:
| 维度 | 概率性确认 | 确定性终结 |
|---|---|---|
| 保证形式 | 回滚概率上界,随确认数指数衰减 | 布尔判定,取决于法定人数是否达成 |
| 安全假设 | 资源占比、传播条件与确认深度 | 验证者权益分布与违规处罚规则 |
| 网络分区 | 各分支独立延长,恢复后按累计难度收敛 | 少数侧停止终结,多数侧继续;恢复后少数侧回滚未终结部分 |
| 活性 / 安全性取舍 | 活性优先,安全性可被高算力短期侵蚀 | 安全性优先,网络异常时宁可停链 |
第二行反映了不同的安全假设:工作量证明依赖资源分布,权益证明还涉及协议的处罚规则与验证者集中度。 评估时应分别检查资源占比的变化、权益集中程度,以及违规证据能否被识别和处理, 不能仅用单一成本指标推断系统可靠性。
工程后果:为什么风控参数无法通用
一个托管多链的提款服务需要为每条链单独设定规则,因为可查询的信号本身不同:
- 概率性链:能查的是「本分支当前高度」与「最近一次重组深度」。策略是设定
z,并持续监控重组深度是否超出历史分布;一旦超出,立即上调z并暂停出金。 - 终结性链:能查的是「该区块所属检查点是否已 finalized」。策略是等待终结标记,此时重组深度这一指标不存在——未终结分支会被直接丢弃,不产生「回滚」事件。
- 混合结构:Layer 2 的批量提交同时受两层影响。L2 自身的排序器预确认(preconfirmation)既非概率性也非确定性,它只是运营方的服务承诺;真正的终结仍要回到 L1 的检查点。
常见的错误做法是把三条链都配成「等 15 分钟」。在终结性链上这多等的时间换不到额外保证,在概率性链上又可能不足够—— 同一个数字在两套语义下毫无可比性。
五、如何为一个系统选择最终性模型
可以按三个问题倒推:
- 能否接受停链?若业务必须持续出块(例如高频撮合),概率性模型或低终结门槛的方案更合适;若宁可停也不接受回滚,BFT 类更合适。
- 验证者集合是否已知?许可链中
f是内部参数,法定人数容易证明;开放网络中必须先解决「谁的投票算数」,这本身就引入了额外的信任层(算力或权益)。 - 回滚的恢复成本由谁承担?如果上层应用(交易所、跨链桥)会在确认前释放资产,回滚损失就落在运营方身上;此时应当优先选择终结性明确、且终结证据可被第三方独立验证的链。
最终性不是一个可以「配置」的参数,而是共识设计的输出结果。把它当成一个可调的确认数, 是把两种不同的安全论证压进了同一个变量名里。
- Satoshi Nakamoto, Bitcoin: A Peer-to-Peer Electronic Cash System, 附录「概率分析」。
- M. Castro, B. Liskov, Practical Byzantine Fault Tolerance, OSDI 1999。
- V. Buterin, D. Griffith, Casper the Friendly Finality Gadget, 2017。
- D. Dolev, N. Lynch, Reaching Consensus on an Asynchronous Network 系列工作,关于部分同步模型下活性与安全性的不可能性边界。