Elea Notes.

词条 · 加密与分布式 · 核心

最长链规则

两份互相矛盾的账本,选背后堆了更多工作量的那一份

也称:最长链、最长链规则、longest chain、longest chain rule、最重链、累积工作量

一句话

当网络里出现两份互相矛盾的账本时,规则是:选背后累积工作量最大的那一份,并在它后面继续干活。白皮书把这条规则叫 the longest chain,但它真正比的不是块数。

先看这个选择题为什么无法回避。

先看一个麻烦:两份账本都说自己是真的

你在一个没有中心机构的网络里记账。今天早上,两个互不相识的人各发给你一份账本。

两份账本前面九百页完全一样,从第九百零一页开始不同。一份说甲把钱付给了乙,另一份说甲把同一笔钱付给了丙。两份内部都自洽,格式都正确,签名都能验过。

你必须选一份,因为这决定甲那笔钱到底归谁。你不能两份都收——那等于允许双花

难点在于,你手上没有任何”外部真相”可以对照。你看不到早上发生的事,只有这两份文件。

朴素尝试为什么都不够

招数一:选先收到的那一份。 这是最自然的反应,也确实是实现里的一部分,但它单独不成立:“先收到”是每台机器的私人经验,不是网络的共同事实。网络另一头的人先收到的是另一份。按这条规则,一千台机器会分成两派,各自坚信自己对,永远谈不到一起。共识必须依赖所有人都能看到的同一个量。

招数二:投票,少数服从多数。 那就要先数清”人”。而在一个谁都能匿名加入的网络里,一个人可以伪装成一万个身份,投票就变成”谁的伪装多谁赢”,而伪装几乎免费。按 IP 计票也一样——IP 可以租。任何按”个数”计票的方案,前提是身份稀缺,而这个前提在开放网络里不成立。

招数三:选页数更多的那一份。 有意思的一招,因为它换掉了计票的对象:不数人,数东西。但纸张同样便宜——伪造一份一万页的账本比一份九百页的并不难多少。除非”多一页”本身很贵,否则页数不构成证据。

招数四:选签名人更有名的那一份。 这就是重新引入权威,也就是整套设计要消掉的东西。

招数五:选内容更合理的那一份。 两份都合理。冲突不在合法性上——两笔支付各自都是合法的,冲突只在先后上,而先后恰恰是这里没有的信息。

五次失败凑出三条要求。用来裁决的那个量必须:

  1. 对所有人是同一个值——不能是”我先收到”这种私人经验;
  2. 造起来很贵,验起来很便宜
  3. 可以累加,这样两份账本才能比大小。

第 2 条正是算力那一条造出来的东西。把它加进招数三,招数三就成立了。

机制:数的不是页数,是页背后的电费

给每一页加上工作量证明之后,“多一页”不再便宜。于是招数三升级成:比较两条链各自累积的工作量。

每一页的工作量可以从它的难度算出来(难度 D 的块,平均需要 D × 2³² 次哈希),把整条链上每一块的难度加起来,就是这条链的累积工作量。

在难度不变的年代,两者完全等价:

链 A:5 个块,每块难度 1  →  累积工作量 5
链 B:3 个块,每块难度 1  →  累积工作量 3
选 A。此时"块多"和"工作量大"是同一件事。

难度一旦可变,就不等价了:

链 A:5 个块,每块难度 1  →  累积工作量 = 1+1+1+1+1 = 5
链 B:3 个块,每块难度 4  →  累积工作量 = 4+4+4     = 12
块数:A 更长(5 > 3)
工作量:B 更大(12 > 5)
规则选 B —— 尽管它的块更少。

再看一个更贴近实际的、只差一点的例子:

链 A:6 个块,难度都是 1        → 累积 6
链 B:4 个块,前三块难度 1,第四块难度 4 → 累积 1+1+1+4 = 7
按块数选 A,按工作量选 B。规则选 B。

选择的依据是”哪一条更难被重造”。链 B 背后烧掉的电更多,想推翻它就要烧掉更多,所以它更可信——块数只是工作量在难度恒定时的一个巧合的代理指标。

这也说明了为什么第 1 条要求被满足了:累积工作量是从链上数据算出来的,任何节点拿到同一条链都得出同一个数,不掺杂”我什么时候收到的”。

那么招数一去哪了?它降级成了平局时的处理办法:两条链工作量相同时,先收到哪条就先在哪条上干活,同时把另一条存着。白皮书原文正是这么写的——tie 会在下一个工作量证明出现时被打破。这是分叉与孤块的日常。

回头看:这条规则把”多数”重新定义了一次

招数二被否掉时,问题是”没法数人”。这条规则给出的解法不是找到了数人的办法,而是换掉了”多数”的计量单位:不按人头,按算力。白皮书原话说的是 one-CPU-one-vote,majority decision 由 the longest chain 代表,而它 has the greatest proof-of-work effort invested in it。

于是算力那一条里”可被陌生人验证的力气”在这里派上了真正的用场:它不只是一张收据,它是选票。而选票稀缺是因为电力稀缺,不是因为身份稀缺。

还有一处旧直觉被明确推翻:账本的真实性不再来自”谁写的”,而来自”重写它要花多少钱”。 历史不是因为被某个权威签署而不可改,是因为改它的成本随深度指数上升。这也是为什么确认数有意义——每压上一个块,重写的报价就涨一档。

边界与常见误解

“最长”这个词是白皮书留下的一处缺口。 原文写 the longest chain,并把它解释为 which has the greatest proof-of-work effort invested in it,等于把”最长”和”工作量最大”当同义词用。在难度恒定的假设下这没问题,但同一篇论文的第 4 节又引入了可变难度——两处放在一起,“最长”就不再准确了。实现里用的是累积工作量(有时叫”最重链”),不是块数。读白皮书时要知道这个词今天的含义比字面窄。

它不保证唯一,只保证收敛。 任何时刻都可能同时存在两条竞争的链;规则不消除分歧,只让分歧随时间指数衰减。所以”上链了”和”最终确定”是两件事,中间隔着确认数。

它不判断内容对错。 累积工作量最大的链如果包含无效交易,节点直接拒绝整条链——合法性检查在前,工作量比较在后。工作量证明只用来在若干条都合法的链之间选一条。

攻击者不需要 51% 才有机会。 掌握 q 比例算力的攻击者追上 z 个块的成功概率约为 (q/p)^z(p 为诚实方比例)。取 q=0.3、p=0.7:追 1 个块约 42.9%,2 个块约 18.4%,3 个块约 7.9%,6 个块约 0.62%。概率随深度指数下降,但从不为零。

超过 50% 也不等于能篡改任意历史。 攻击者能重排最近的块、审查交易、双花,但改不了别人的签名,也拿不走没有私钥的钱。重造很深的历史仍然要付出相应的时间。