16年前比特币最惊险的一天:凭空造出1840亿枚BTC,5小时后被修复
2010年8月15日,一个整数溢出漏洞让攻击者凭空生成了8000倍于总量上限的比特币,差点直接毁掉整个项目。这次危机的处理过程,直到今天都还在印证比特币最核心的运行逻辑。
2010年8月15日,比特币才诞生19个月,整个网络只有几千个节点,单枚价格还不到1美分,没人想到有人会在这个时候扔出一颗核弹。
UTC时间19点13分,一个未知地址广播了一笔利用漏洞构造的交易,直接凭空生出1844.67亿枚BTC,超过比特币设计总量上限的8000倍,随后这笔交易被分到了两个地址里。下一个矿工正常挖出了第74638号区块,把这笔交易打包进了链上,整个网络当时运行的旧代码默认这笔交易合法,全网都接受了这个出问题的区块。

漏洞本身其实是个非常经典的编程失误。当时检查交易输出总和的代码用了带符号64位整数,两个接近2^63的输出相加后,总和溢出变成了负数,而负数自然小于2100万BTC的上限,检查就这么通过了。任何那个时代写C++的程序员都可能踩这个坑,中本聪也不例外。
如果这个问题留到第二天,比特币基本就没了。2100万的总量上限是整个项目的核心共识,一旦公开被突破一次,就没人会相信这个承诺还能守住。
事情的进展比很多人印象中快得多。漏洞被发现后不到一小时,比特币论坛就有人发出了预警。UTC23点30分,也就是出问题后的四个多小时,中本聪就提交了修复补丁,发布了0.3.10版本,只加了一条额外检查拦截溢出情况。
真正的难点从来不是写代码改bug,而是协调全网回滚这条已经产出53个区块的坏链。
很多资料说这次修复是软分叉,其实严格来说这是比特币历史上唯一一次全社区一致同意的紧急硬分叉:旧版本认可坏区块,新版本直接拒绝,只有绝大多数节点同时升级切换,才能避免链分裂。按照社区用户的总结,当时刚好踩在了最适合修复的时间点:整个挖矿圈子小到能在论坛一个个联系到,协调起来没什么障碍,但项目已经足够有共识,没人愿意看着它死掉。
从坏区块被挖出算起,19小时后,打了补丁的新链长度超过了旧坏链,全网自动完成重组,53个区块被回滚,1840亿枚凭空出现的BTC直接从历史里消失了,2100万的总量上限保住了。

这件事后来常被用来反驳"比特币不是真的去信任"的说法:你看,创始团队说改就改了,还能回滚交易。但仔细看整个过程,其实刚好反过来。
这次修复能成,不是中本聪逼着大家改,是所有节点运营商和矿工都想保住2100万上限,主动选择升级运行新代码。坏链当时其实更长,最长链规则直接被社会共识 override 了,没人觉得不对,因为共识的核心本来就是规则,不是谁先出更长的块。
后来2014年还出过另一个类似的bug,开发者Pieter Wuille发现比特币区块奖励减半的代码用了移位操作,足够多次减半后,奖励不会归零,反而会绕回变成大额产出,这个bug要到2256年才会触发,不紧急,但社区还是直接做了修复,也就是BIP 42,悄悄就激活了。
两件事放在一起看逻辑很清楚:比特币的2100万上限不是写在白皮书里就自动成立的,也不是开发者说了算,是每一个运行全节点的人都在盯着这个规则,每一个区块都要检查,所有人都有动力拒绝任何突破上限的改动,才让这个承诺持续到今天。
有网友说,16年前比特币差点把自己玩死,社区在早餐前就修好了,你试试让美联储这么干?这话有点调侃,但道理是对的。一个货币系统刚诞生就遇到要命的bug,全程公开处理,所有步骤都可查,最后还能守住核心规则,这件事本身反而成了它最好的广告。
完整的事后分析可以看LearnBitcoinCom的原文:[The Inflation Bug Postmortem](https://www.learnbitcoin.com/rabbit-hole/inflation-bug-postmortem)
发布时间: 2026-05-21 21:51