初出茅庐:第一次危机与修复

💡 2010年8月15日,有人在一笔交易中凭空造出了1844亿个比特币。中本聪在5小时内发布补丁、说服社区回滚网络。一个号称"不可篡改"的系统,在诞生第二年就不得不篡改自己。这次危机差点杀死比特币,也让它第一次证明了自己能活下来。
欢迎关注我的推特:@bhbtc1337
进入微信交流群请填表:表格链接
文章开源在 GitHub:Get-Started-with-Web3
2010年8月15日下午,Jeff Garzik 像往常一样打开区块浏览器。
他有个习惯——每天翻看最新的区块,像读报纸一样看里面的交易。区块74637,没什么特别的,几十笔小额转账。然后他点开了74638。
屏幕上的数字让他手里的咖啡杯停在了半空。
184,467,440,737.09551616 个比特币。
一千八百四十四亿。比特币的总量上限是2100万枚。这笔交易凭空造出了设计总量8000倍的比特币。
整数溢出
bug 的原理并不复杂。比特币的早期代码用64位整数存储金额。64位整数能表示的最大值刚好是那串天文数字。有人构造了一笔金额大到溢出上限的交易——就像老式里程表跑到99999后归零一样——系统在计算时"晕"了,把一个不可能的数字当成了合法金额。
这是一个古老的编程陷阱。但它出现在一个管理着真金白银的系统里,性质就完全不同了。
Jeff 截了屏,冲到 BitcoinTalk 论坛发了帖子:"ALERT: strange transaction in block 74638."
帖子发出不到五分钟,论坛炸了。管理员 Theymos 把帖子置顶并打上红色 EMERGENCY 标签。IRC聊天室里,所有人都在问同一个问题:比特币是不是完了?
Satoshi 上线
就在聊天室一片混乱的时候,一行字弹了出来。
"satoshi 上线了。"
键盘声停了。所有正在打字的手都悬在了半空中。聊天室里的消息流断了两秒——对于一个正在恐慌的频道来说,两秒的沉默比什么都响。
中本聪来了。
他先用三段话分析了 bug 的技术原理,语气严谨得像学术论文。然后话锋一转,说了一句让所有人心跳停了半拍的话:
"We need to roll back the network."
回滚。把已经写进区块链的历史擦掉,从更早的时间点重新开始。这可是区块链——号称"一旦写入就永远无法更改"的系统。创造者自己要求篡改它。
不回滚,1844亿假币留在链上,比特币的稀缺性承诺从根上就烂了。回滚,"不可篡改"的核心价值被创造者亲手打破。
慢性死亡和立即手术,中本聪选了手术。
五小时
中本聪花了两小时写完补丁——在交易验证中加一个金额范围检查。代码改动不大,但这是比特币的生死补丁。
真正的挑战是说服所有人同时升级。比特币没有强制更新的机制——每个矿工、每个节点都是自愿的。如果有一部分人不配合,网络就会分裂成两个版本。
Gavin Andresen 第一个站出来测试补丁。Hal Finney 从病床上发来支持——渐冻症已经让他行动不便,但他还在写邮件。早期开发者 Sirius 建了一个 IRC 聊天室,把散落在各地的开发者拉到一起协调。
大矿工 ArtForz 在论坛上表态:"我知道回滚违背初衷,但现在不是讨论哲学的时候。我已经升级了。谁跟我一起?"
晚上10点,中本聪发布了 0.3.10 版本:"所有人立即升级。"
然后是等待。论坛上,矿工们一个个报告:"升级了。""重新挖矿。""新块出来了。"
凌晨1点,新的区块74638被挖出来。干净的区块。那1844亿假币被从历史中抹去了。
从发现 bug 到修复完成,五个小时。
活着比纯粹重要
危机解除后,质疑声不少:"如果区块链可以被回滚,那它还算不可篡改的吗?谁来决定什么时候该回滚?"
问题问得对。但在"不可篡改的纯粹性"和"活着"之间,社区选了后者。一个死掉的纯粹系统不比一个活着的有缺陷的系统更好。
整个过程靠的是中本聪的技术判断加社区的自愿配合——没有人被强制升级,但大多数人选择了信任。这种"非正式领导+自愿共识"的模式,后来成了比特币治理的基本范式。2017年的扩容战争就是它的变体。
但这次危机也许让中本聪意识到了一件事:如果比特币每次都依赖他来拍板,那这个系统就不是真正的去中心化。创造者如果变成不可替代的领导者,就成了系统的单点故障——和乔姆的 DigiCash 一样。
也许,这就是他后来选择消失的原因之一。
这次整数溢出事件中冒出的"假币"数量 184,467,440,737.09551616,恰好是64位整数的最大值——说明攻击者对整数溢出原理非常了解。这个数字后来被写进了比特币代码的注释中,成为永远的纪念。而修复这个 bug 所需的代码改动,只有几行。有时候,几行代码就是一个系统的生死线。
⚡ 如果这个故事对你有价值,考虑支持一下作者
⚡ Lightning: latebrook396888@getalby.com
₿ BTC: bc1qjt7uhztd2pumpx6p5w0sl8jxfzmxp3nyahysmcqklqfkecqftuysu733ca