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

配图

status author date difficulty

💡 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

results matching ""

    No results matching ""