
当一条链改写自己:Ravencoin 的共识缺陷,以及一次确认究竟值多少
绝大多数加密事故都与密钥有关。有人被钓走了助记词,某个合约存在重入缺陷,某家交易所丢了热钱包。账本本身依然诚实;只是某一批具体的币,违背主人的意愿换了手。
八月的 Ravencoin 事件属于另一个类别,而且是罕见的那一类。没有任何人的密钥被碰过。散架的是账本本身。
发生了什么
2026 年 8 月 7 日 15:44 UTC,在区块高度 4,487,776,一个本不该存在的区块被全网接受了。随后还有更多。在一段被检查过的 2,089 个区块里,有 96 个是无效的。这个缺陷在 8 月 11 日被公开演示,距离第一个被利用的区块已过去四天——也就是说,在有人宣布之前,这条链已经悄无声息地生产了将近一周的伪造区块。
RVN 下跌约 20%,跌至 0.0027 美元附近。Upbit 与 Bitget 暂停了充值与提现。Ravencoin 项目方要求交易所、区块浏览器和节点运营者立即升级,并把区块 4,487,775 之后确认的每一笔交易都标记为可能被回滚。
值得停下来细想的正是最后这句话。不是「有些交易被回滚了」。而是三天之内的全部交易,都只是暂定的。
缺陷:一个没人核对的数字
Ravencoin 使用 KAWPOW 挖矿,那是一种由 ProgPoW 衍生而来、对内存要求苛刻的工作量证明算法。内存苛刻正是它的全部用意:运算依赖一份必须驻留在内存里的大型数据集,而这正是让 ASIC 变得不划算、让显卡仍能参与挖矿的原因。这份数据集会周期性地重新生成,而你需要哪一份,是由区块的高度推导出来的。
区块头里带有一个字段 nHeight,声明这个区块位于链上的什么位置。节点会依据区块自己声称的高度来校验工作量证明。它们从未把这个声称,与区块在链上的真实位置核对过。
于是你可以撒谎。声明一个来自链上早期的高度,拿到一份很小的数据集,只做一小部分运算,就能产出一个存在缺陷的节点会欣然认定为有效的区块。那份让 Ravencoin 挖矿变得昂贵的内存硬度,只要你宣称自己在挖的是另一个区块,就成了可选项。用项目方自己的说法,无效区块的生产成本,变得比合法区块低得离谱。
作为一个共识缺陷,这已经触及最根本的层面。工作量证明正是区块链把电力转化为最终性的机制。如果证明能被廉价伪造,就不存在最终性——只剩下最终性的外观。
解药就是那次重组
接下来这一段从外面看令人不安,实际上却是正确的。
2Miners 与 RavenMiner 合计掌握全网多数算力,它们宣布正在挖一条自 4,487,776 起排除被利用分支的链。打过补丁的节点软件(2Miners 发布了 4.6.1.1-hf1)会拒绝声明高度与真实高度不符的区块,并把区块 4,487,775 硬编码为检查点——一条界线,越过它,那段被污染的旧历史就再也无法被重新接受。
结果是一次深度约三天的链重组。三天的区块被丢弃并替换。
深度重组通常是遭受攻击的症状。在这里它却是治疗手段。被利用的那条分支并不是谁改写的合法历史;它本来就是无效的,而全网选择不再假装它有效。
那道接缝今天仍然能在链上看到。区块 4,487,775 挖出于 8 月 7 日 15:43:57 UTC。区块 4,487,776——恢复后那条链上诚实的那一个——的时间戳是 8 月 10 日 14:09:42 UTC。在一条以一分钟为目标的链上,相邻两个区块之间隔了两天二十二小时二十六分钟。那道空隙就是疤痕组织。
如果你持有 RVN,这意味着什么
如果你的币放在自己掌控的钱包里,而且那几天没有发起交易,你什么事也没有。密钥从来不是问题所在。4,487,775 之前的余额从未受到质疑。
如果你确实在那个窗口里交易了,你的交易必须被重新挖进恢复后的链才能存活。普通付款一般都挺过来了——它们本就是有效交易,只是恰好待在被丢弃的区块里,随后回到内存池等待再次确认。挨不过一次重组的,是任何以「被丢弃的历史是永久的」为前提的东西。典型例子是向交易所充值:币到账、被记入、被交易或提走,然后这笔充值变成从未发生过。这恰恰说明了为什么暂停充提是正确决定,也说明了那些反应迅速的交易所是在保护自己和用户,而不是在恐慌。当另一个选项是记入一笔日后会蒸发的钱时,停机是交易所可以也应当吸收的一种故障模式。
一次确认真正承诺了什么
包括我们在内,大多数钱包都会显示一个确认数,让你据此推断安全程度。有必要把这个数字的含义说精确,因为正是在这类事件里,含糊会咬人。
确认不是保证。它是一句经济学陈述:要从这一点开始改写历史,就得重做这么多工作量证明,而那笔开销会超过这笔付款的价值。 比特币的六次确认是一条关于成本的经验法则,而不是关于永久性的密码学证明。
这句陈述里埋着一个隐含前提:生产区块是昂贵的。Ravencoin 的缺陷抹掉了这个前提。当无效区块几乎不花钱,「多少次确认」就不再度量任何东西。你屏幕上的数字仍在往上走;它所计数的对象,却已在无声中变得毫无意义。
诚实的结论不是「确认没用」。而是:确认数是一句关于某条链共识规则健康程度的陈述,因而继承了那些规则的每一处弱点。让你的耐心与所涉金额相称;面对一场正在发生的共识事故,正确的反应是彻底停止交易,而不是等一个更大的数字。
SSP 当时的处境
我们自建 Ravencoin 基础设施,而不是从别人的接口读取余额,这意味着「SSP 在正确的链上吗」这个问题有一个可核验的答案,而不是一句让人安心的话。
我们的节点运行 Ravencoin 4.8.0——远在硬分叉之后——撰写此文时位于恢复链的高度 4,522,205。接缝的两侧都与参考链完全一致:
- 4,487,775 →
000000000002d64509e06e76ddbbe418c725291687ec62b41ecfc40386a091fd - 4,487,776 →
0000000000042bb50281ebb2f68d3f9143980b041178849015d95b067d52a841
与官方 Ravencoin 浏览器相同的哈希,相同的三天空隙。SSP 用户不需要做任何事,SSP 中的 Ravencoin 与此前完全一样地运作。
诚实的边界
我们写这类文章,是为了讲清楚我们的架构保护了什么,因此同样要讲清楚它没有保护什么。
二取二多签保护的是签名这一侧。它意味着任何单台被攻陷的设备都无法动你的币,每一笔付款都在两台彼此独立的硬件上被批准两次,拿到你笔记本电脑的窃贼一无所获。这些性质在整个事件期间始终成立,而且正是它们,对人们丢失加密资产的绝大多数途径真正有效。
但它们统统挡不住一次链重组。硬件钱包挡不住,气隙签名器挡不住,密码短语挡不住,任何规模的多签门限也挡不住。共识故障位于这一切之下——它是网络的性质,而不是你保管方式的性质。谁若声称自家钱包能保护你不受坏区块影响,那是在卖东西给你。
一个钱包可以诚实提供的是这些:运行真实的节点基础设施,保持补丁更新,并对自己跟随哪条链保持透明。那是一份运维承诺,不是密码学保证——而这正是一个恰如其分的承诺尺度。
从八月里还值得带走的另一件事,是关于风险究竟栖身何处的提醒。Ravencoin 的这个缺陷在被人利用之前,已经在代码里躺了很多年,藏在最不起眼的地方:一个区块头字段,人人都以为别人已经在核对它了。Coldcard 的熵故障是同一形状的问题——一行细小、乏味、无人细看的代码,从外面完全看不见,却托着它上面的一切。
真正伤人的正是这类缺陷。不是那些奇诡的密码学攻击,而是那个谁也没为它写过测试的前提。


