最长链原则¶
来源:
密码学引论 / electronic_payment/最长链原则.md
最长链原则常见于 比特币、区块链共识机制 里,意思是:
当网络中同时出现多条合法区块链分支时,节点默认承认“累计工作量最大”的那条链为主链。
在简化说法里,经常叫“最长链原则”。
注意,严格来说比特币不是单纯看“区块数量最长”,而是看 累计工作量最大。不过在难度相同的情况下,区块越多,通常累计工作量越大,所以就被称为“最长链”。
1. 为什么会出现多条链?¶
区块链网络是去中心化的,没有一个中央服务器来决定谁先记账。
假设某一时刻,两个矿工几乎同时挖出了新区块:
矿工甲挖出了区块 D1:
矿工乙也几乎同时挖出了区块 D2:
于是网络中就出现了分叉:
有些节点先收到 D1,有些节点先收到 D2。此时两条链都合法,暂时无法确定谁是最终主链。
2. 最长链原则怎么解决分叉?¶
节点会先接受自己看到的那条链,但会继续观察后续发展。
如果后来有矿工在 D1 后面继续挖出了 E1:
那么 D1 这条链更长,节点就会认为:
是主链。
而 D2 所在的分支会被放弃,变成“孤块”或者“叔块”。
所以最长链原则的核心是:
谁后面接上的区块更多,谁就更可能代表全网大多数算力的选择。
3. 它为什么能保证安全?¶
因为在 PoW,也就是工作量证明机制里,挖区块需要消耗真实算力。
如果攻击者想篡改历史交易,比如把某笔付款撤销,他需要从被篡改的那个区块开始,重新挖一条分叉链,并且追上甚至超过诚实节点维护的主链。
例如原链是:
攻击者想改 C 里面的交易,就要从 C 之前开始伪造:
只有当攻击链的累计工作量超过诚实链,网络节点才会接受攻击链。
但是如果攻击者算力不超过全网诚实算力,他追上的概率会随着确认数增加而迅速降低。
这就是为什么比特币交易一般要等多个确认,比如 6 个确认。
4. 最长链原则和“确认数”的关系¶
一笔交易被打包进区块后,还不是绝对安全。
假设交易在区块 C 中:
这时它有 1 个确认。
如果后面又接了 D、E、F:
那么 C 里的交易就有更多确认。
确认数越多,攻击者要重写历史的成本越高。
因此:
5. 用生活例子理解¶
可以把区块链想象成大家共同维护一本账本。
有时候两个人同时写了一页账,导致出现两个版本:
大家暂时不知道该认哪个版本。
后来更多人继续在版本1后面写:
于是大家认为版本1才是主账本。
因为它代表了更多人的持续投入。
6. 最长链原则的本质¶
最长链原则本质上是在解决去中心化系统里的一个问题:
没有中心裁判时,大家如何对同一份历史记录达成一致?
它的答案是:
承认累计工作量最大的历史版本。
所以它不是简单的“谁说得早听谁的”,而是“谁付出的计算成本最多,谁更可信”。
7. 需要注意的误区¶
第一个误区是:最长链不是绝对不可逆。
区块链不是说一旦写入就永远不能变,而是随着后续区块增加,被推翻的概率越来越低。
第二个误区是:最长链不一定是区块数最多。
严格来说,比特币比较的是累计工作量。如果两个分支区块难度不同,区块更多的链不一定是工作量最大的链。
第三个误区是:最长链原则主要适用于 PoW。
像 PoS,也就是权益证明系统,可能用的是其他分叉选择规则,不一定完全等同于比特币式最长链原则。
一句话总结:
最长链原则就是:当区块链发生分叉时,节点选择累计工作量最大的那条链作为主链。它通过算力竞争让全网在没有中心裁判的情况下达成共识。
