比特币为什么不只认区块最多的链?累计工作量的作用

 / 
3

"最长链"这个说法在比特币里其实是个容易误导的简称。节点真正跟随的,是累计工作量最大的那条链,而不是区块数量最多的链。两者在绝大多数时候重合,但在难度调整或有人试图攻击时,它们会分道扬镳。理解这个区别,才能明白比特币的安全边界到底建在哪里。

欧易OKX交易所
全球领先的加密货币平台,适合新手与进阶交易者
新手福利:注册即享20% 交易手续费减免!

区块多不等于工作量大

一个区块的"工作量"由它的难度目标决定。难度越高,矿工平均需要尝试的哈希次数就越多。比特币的难度每 2016 个区块调整一次,目的是把出块时间稳定在十分钟左右。这意味着不同时期的区块,代表的实际计算量并不相同。

假设一条链有 6 个区块,但每个区块的难度都很低;另一条链只有 5 个区块,但每个区块的难度都足够高。单纯数区块数量,前者"更长"。但把每个区块的工作量加总,后者可能代表更大的累计计算投入。比特币节点在比较分叉时,算的是这个总和,也就是 chainwork 。

比特币早期实现确实用过按区块数量比较的做法,后来很快修正为比较累计工作量。原因很直接:如果只看数量,攻击者可以通过操纵难度制造大量"轻量"区块,用数量压过诚实链,而不需要真正投入相应的算力 。

工作量为什么比数量更可靠

工作量证明的安全逻辑是:篡改历史需要重新完成自篡改点之后的所有计算,并且要超过诚实网络正在持续产生的新工作量。决定这个门槛的,是算力投入的累计值,不是区块的个数。

一个攻击者如果想用自己的链替换诚实链,他必须让替代链的累计工作量超过诚实链。这要求他在暗处持续挖矿,并且总算力占比足以在某个时间点追上并超过全网诚实算力的累计产出。区块数量多几条少几条,改变不了这个经济门槛。累计工作量直接对应的是"要烧掉多少电和硬件时间",这才是攻击成本的实质度量 。

如果规则改成"区块最多者胜",攻击者就多了一条低成本路径:想办法让自己的链在区块数量上领先,哪怕每个区块的实际计算量很低。难度调整机制虽然限制了单次调整的幅度,但把共识规则建立在"数量"而非"工作量"上,等于给攻击面留了一个不必要的口子。比较累计工作量,把这个口子关掉了。

分叉时节点具体怎么选

当两个矿工几乎同时找到有效区块,网络会短暂分叉。节点各自先看到其中一个,暂时在上面继续挖。下一个区块在某一侧被找到后,那一侧的累计工作量增加。此时另一侧的节点会发现,自己跟随的链在累计工作量上已经落后,于是切换到工作量更大的那条链,原先的区块成为孤块,其中的交易回到内存池等待重新打包 。

这个过程不需要节点去数"谁多了一个块",只需要比较两条链的累计工作量数值。哪个数值大,就切到哪边。如果累计工作量恰好相同(极罕见),才用"先看到"作为临时平局规则,直到下一块打破平衡 。

一个可以自己判断的理解方式

你可以把累计工作量理解为"这条链从创世区块到现在,全网为了生产它一共付出了多少次哈希尝试的期望值"。区块数量只是这个过程中的副产品。难度高的时期,一个区块就抵得上难度低时期的好几个区块。节点存储和比较的是这个累计值,用户平时看不到它,但它才是共识的实际标尺。

"最长链"这个叫法在口语里可以继续用,但心里要清楚:它指的是最重的那条链,不是最长的那条。

欧易OKX交易所
全球领先的加密货币平台,适合新手与进阶交易者
新手福利:注册即享20% 交易手续费减免!

参考资料

  1. Nervos知识库:比特币中的最长链规则是什么 
  2. Learn Bitcoin词条:最长链规则 
  3. Bitcoin Core开发者指南:运行模式 
  4. Bitcoin Core学院:共识模型