← 全部笔记

最终性的两种含义:概率性确认与确定性终结

进阶 共识机制

「这笔交易已经最终了」在两条不同的链上意味着两件不同的事。一条链说的是「按当前算力分布,回滚它的概率已低于某个阈值」, 另一条链说的是「回滚它需要至少三分之一的验证者违反 slashing 条件并承受罚没」。前者是一个随时间衰减的数,后者是一个关于作恶成本的不等式。 本文讨论这两种保证的推导前提,以及为什么把它们写进同一份风控文档会出问题。

一、问题从哪来:同一个区块可以有两个历史

分布式系统里,「第 N 个区块是什么」不是一个客观事实,而是网络中多数节点的共同信念。 只要消息传播需要时间,就可能有两个节点在相近的时刻各自产出一个区块,两个分支同时被一部分节点接受, 各自继续延长。此时任何一笔交易都同时存在于两条历史中——它没有被「确认两次」,而是被「确认在两个互斥的世界里」。

所谓最终性(finality),指的就是一个系统承诺:从某个时刻起,被接受的区块不会再被替换。 分歧在于这个承诺以什么形式给出。主流方案分成两类,一类把承诺写成概率,一类把承诺写成投票记录。

二、概率性确认:把风险算成一个数

最长链规则(更准确地说是「累计工作量最大」规则)不禁止回滚,它只是让回滚越来越贵。 设攻击者控制全网算力比例 q,诚实节点占 p = 1 − q, 目标区块之后已经出现了 z 个确认区块。攻击者要想反超,必须在观察到的 z 个区块的时间里, 私下挖出 z + 1 个区块。这近似为一个泊松过程,其成功概率的上界可以写成:

P(追平) ≤ (q / p)^(z + 1)

中本聪在白皮书附录中给出了数值积分结果,下表是 q = 0.30 与 q = 0.10 两列常见取值:

双花成功概率的上界估计(引自 Bitcoin 白皮书附录表,取整展示)
确认数 zq = 0.10q = 0.30
10.00000000.3639456
20.00000000.1322606
30.00000000.0479801
50.00000900.0061042
80.00000000.0002766
100.00000000.0000351

这张表里有两点值得强调。第一,概率的衰减是指数型的,但起点很高。 q = 0.30 时第 1 个确认仍有约 36% 的回滚可能,「1 个确认」在对手持有三成算力时几乎没有意义。 第二,这个上界假设攻击者的算力占比在观察期内保持不变,而真实市场中的算力是可以在数小时内迁移的—— 租用算力把 q 短期推高的成本,并不等于长期持有该份额的成本。

概率性确认的时间代价由出块间隔直接决定。比特币平均 10 分钟一个区块,6 个确认对应约一小时; 同样的「6 个确认」在出块间隔 12 秒的链上只对应 72 秒,两者提供的安全边际完全不可比。 因此把「等 6 个确认」当作跨链通用规则,本身就是错误的抽象。

历史校准 概率性系统的尾部风险由实际重组深度而非公式给出。2013 年 3 月,一次客户端版本不兼容导致的非预期分叉, 使回滚深度达到数十个区块的量级,远超任何按「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)前提。 这个前提在实践中由社区维护的同步委员会、检查点广播与默认节点实现承担。它不削弱安全性论证,但把一部分信任从密码学转移到了运维流程上。

四、两种保证不可通约

把两者放在一起看,差异集中在四处:

概率性确认与确定性终结的对照
维度概率性确认确定性终结
保证形式回滚概率上界,随确认数指数衰减布尔判定,取决于法定人数是否达成
安全假设资源占比、传播条件与确认深度验证者权益分布与违规处罚规则
网络分区各分支独立延长,恢复后按累计难度收敛少数侧停止终结,多数侧继续;恢复后少数侧回滚未终结部分
活性 / 安全性取舍活性优先,安全性可被高算力短期侵蚀安全性优先,网络异常时宁可停链

第二行反映了不同的安全假设:工作量证明依赖资源分布,权益证明还涉及协议的处罚规则与验证者集中度。 评估时应分别检查资源占比的变化、权益集中程度,以及违规证据能否被识别和处理, 不能仅用单一成本指标推断系统可靠性。

工程后果:为什么风控参数无法通用

一个托管多链的提款服务需要为每条链单独设定规则,因为可查询的信号本身不同:

常见的错误做法是把三条链都配成「等 15 分钟」。在终结性链上这多等的时间换不到额外保证,在概率性链上又可能不足够—— 同一个数字在两套语义下毫无可比性。

五、如何为一个系统选择最终性模型

可以按三个问题倒推:

  1. 能否接受停链?若业务必须持续出块(例如高频撮合),概率性模型或低终结门槛的方案更合适;若宁可停也不接受回滚,BFT 类更合适。
  2. 验证者集合是否已知?许可链中 f 是内部参数,法定人数容易证明;开放网络中必须先解决「谁的投票算数」,这本身就引入了额外的信任层(算力或权益)。
  3. 回滚的恢复成本由谁承担?如果上层应用(交易所、跨链桥)会在确认前释放资产,回滚损失就落在运营方身上;此时应当优先选择终结性明确、且终结证据可被第三方独立验证的链。

最终性不是一个可以「配置」的参数,而是共识设计的输出结果。把它当成一个可调的确认数, 是把两种不同的安全论证压进了同一个变量名里。

  1. Satoshi Nakamoto, Bitcoin: A Peer-to-Peer Electronic Cash System, 附录「概率分析」。
  2. M. Castro, B. Liskov, Practical Byzantine Fault Tolerance, OSDI 1999。
  3. V. Buterin, D. Griffith, Casper the Friendly Finality Gadget, 2017。
  4. D. Dolev, N. Lynch, Reaching Consensus on an Asynchronous Network 系列工作,关于部分同步模型下活性与安全性的不可能性边界。