图文攻略

1844 亿枚假比特币:2010 值溢出事件全解

2010 年 8 月 15 日,有人利用整数溢出漏洞,在一笔交易里凭空造出 184,467,440,737.09551616 枚比特币——接近比特币总量上限的 8800 倍。随后发生的事,堪称比特币史上最惊险也最精彩的一次自救:一条论坛帖子、中本聪约 5 小时内写出的补丁,以及比特币历史上唯一一次链回滚。本页用原帖截图、档案画面和原始数字,一步步还原这场 24 小时内的攻防全过程。

9 分钟 • 16 个图解步骤 • 比特币史上唯一一次链回滚

编委会史料考证与链上复盘

本篇归档基于公开密码学文献、历史白皮书与链上交易数据进行独立交叉核实,遵循学术严谨性标准。

同行文献已核查

2010 比特币值溢出事件是什么?

值溢出事件是 2010 年 8 月 15 日发生在区块 74638 的一次漏洞利用:攻击者通过整数溢出(CVE-2010-5139)造出 184,467,440,737.09551616 枚 BTC——约 1844 亿枚假比特币,分给三个地址。两笔约 922.3 亿枚的输出加在一起超出了 64 位整数的表示范围,数值回绕后,未修复的客户端把这笔交易当成了合法交易。开发者 Jeff Garzik 在约一小时内于 Bitcointalk 论坛发现异常;中本聪和 Gavin Andresen 当晚就在帖子里贴出补丁,约 5 小时后修复版客户端(0.3.10 版)发布;矿工随即抛弃坏链——8 月 16 日好链在区块 74691 反超,经 53 个区块的重组,假币从账本上彻底消失。全程没有任何假币流通,没有任何人蒙受损失。

核心要点

  • 2010 年 8 月 15 日,区块 74638 里的一笔交易造出 184,467,440,737.09551616 枚 BTC——约 1844 亿枚假比特币,相当于比特币 2100 万枚硬顶的约 8800 倍,分给了三个不同地址。
  • 漏洞编号 CVE-2010-5139,本质是整数溢出:两笔各 92,233,720,368.54277039 枚 BTC 的输出相加后数值回绕,旧客户端便判定交易合法,出块人还多拿了本不存在的 0.01 枚 BTC。
  • Jeff Garzik 在 Bitcointalk 论坛发帖示警,并问出了给漏洞定性的一句话——"92233720368.54277039 BTC?Is that UINT64_MAX, I wonder?";几分钟内,其他用户就完成了诊断。
  • 中本聪在同一帖子里贴出了自己写的 CheckTransaction 补丁,并呼吁矿工停止在坏链上出块;发现后约 5 小时,修复版客户端发布,官方 0.3.10 版于次日上线。
  • 解决方案是软分叉,不是管理员按下撤销键:矿工只在好链上出块,好链于 8 月 16 日在区块 74691 反超坏链——53 个区块的重组之后,那笔 1844 亿枚的交易在比特币保留的账本上根本不存在。
  • 拿它对比以太坊 2016 年 DAO 回滚站不住脚:2010 年比特币历史最高价约 0.40 美元,全网总市值不足约 154 万美元;而以太坊是在约 10 亿美元市值时改写历史——比特币还在 2018 年抢在漏洞被利用之前抓出了第二起通胀漏洞(CVE-2018-17144)。

货币总账被撕开的那一天

2010 年 8 月 15 日,区块 74638。一笔本不该被写出的交易。

  1. 1

    黑客一口气造出 1844 亿枚比特币

    2010 年 8 月 15 日,区块 74638 里出现了一笔造出 184,467,440,737.09551616 枚 BTC 的交易——约 1844 亿枚,发往三个不同地址。其中两笔输出各持有约 922.3 亿枚 BTC,出块人还额外收到了交易发生前根本不存在的 0.01 枚 BTC。对比 2100 万枚的总量硬顶,这一笔交易就"印"出了全部合法供应量的约 8800 倍。它至今仍是主流区块链上单次造出假币数额最大的一次——而且整个事件在几小时内就画上句号,没有一枚假币流到任何交易所。

    CoinDesk 2020 年 8 月文章《The Day Someone Created 184 Billion Bitcoin》,Robert Stevens 撰文回顾 2010 比特币值溢出事件
    一笔交易,凭空造出 1844 亿枚 BTC。Watch at 0:18
  2. 2

    "没有安全审计"?开源本身就是审计

    这起事件成了山寨币推销员最爱引用的素材:相关文章总会强调比特币源码"至今零安全审计"。但只要看清比特币是什么,这个批评就不攻自破。客户端和区块链账本完全开源,每天有成千上万的开发者、矿工、交易所和研究员在逐行读这份代码——用视频里的说法,比特币拥有的"眼睛"可能比计算机科学史上任何项目都多。它本身就是一台巨型漏洞赏金机器:谁找到洞,谁就有机会偷走数千亿美元的比特币。任何付费审计都给不了这种激励——2010 年这个漏洞、以及 2018 年的第二个漏洞,正是这样被发现并快速修复的。

    Medium 文章《Bitcoin Hacked? It Happened (twice)》,文中"源码至今零安全审计"一句被高亮,下方就是 CVE-2010-5139 小节
    "零安全审计"——专用来卖币的一句话。Watch at 2:48
  3. 3

    档案里的官方记录

    Bitcoin Wiki 的"Value overflow incident"词条保存着这件事的权威事实:2010 年 8 月 15 日出块的 74638,携带着新造出的 184,467,440,737.09551616 枚 BTC,发往三个地址;该漏洞编号 CVE-2010-5139。根因相当隐蔽——交易校验逐笔检查了每个输出是否合规,却从没检查所有输出加总后会不会超出 64 位整数的表示范围。词条还记下了本案最余味悠长的注脚:攻击者为构造这笔交易所花出的 0.5 枚 BTC 至今仍在链上,十几年来原封未动;而那 1844 亿枚假币,早已被从历史中彻底抹去。

    Bitcoin Wiki 的 Value overflow incident 词条,首段中区块高度 74638 被高亮选中
    区块 74638——击穿规则的那个数字。Watch at 3:46

全网直播式排雷:论坛响应

毒块存活了不到一小时,就撞上了一位开发者的火眼金睛。接下来的一切,就是比特币治理的实时运作。

  1. 4

    原始交易数据:每笔输出 922 亿枚

    Jeff Garzik 不只是报告异常——他把整个区块的原始 JSON 贴了出来,任何人都能亲自验证。数据里,区块 74638 赫然躺着两个"value"字段,各 92,233,720,368.54277039 枚 BTC,旁边是一笔只有约 50 枚的普通区块奖励。内行一眼就会心跳加速:922 亿枚比特币,比这条链永远也挖不出来的总量还多。论坛老鸟几分钟内就算完账:两笔输出相加的和超出了 64 位整数空间,数值回绕——这正是未修复客户端放行它的原因。全程公开透明才是这段历史的核心:不需要任何可信第三方来"辟谣"。

    Bitcointalk 上 2010 溢出交易的原始 JSON,区块 74638 中两个 92233720368.54277039 BTC 的 value 字段清晰可见
    每笔输出 922 亿枚——就写在 JSON 里。Watch at 3:54
  2. 5

    Jeff Garzik:"Is that UINT64_MAX, I wonder?"

    警报拉响于 2010 年 8 月 15 日下午 6:08——开发者 Jeff Garzik 在 Bitcointalk 开帖《Strange block 74638》,正文一句话:"The 'value out' in this block #74638 is quite strange."原始交易下方,他问出了给漏洞定性的问题:"92233720368.54277039 BTC?Is that UINT64_MAX, I wonder?"——他敏锐地猜到,这些数字是撞上了 64 位整数的"天花板"。回复接踵而至:有人锁定数值是 INT64_MAX,有人惊呼"这是个严重问题",矿工开始丢弃坏链。从发现到确诊,总共不到一小时。

    Jeff Garzik 2010 年 8 月 15 日的 Bitcointalk 原帖:《The value out in this block 74638 is quite strange》,交易数据下方是他的 UINT64_MAX 之问
    让整条网络急停的那一帖。Watch at 4:06
  3. 6

    "我们需要尽快修复":紧急补丁帖

    另一个标题毫不掩饰的帖子《overflow bug SERIOUS》成了作战室。Gavin Andresen 提议直接拒绝任何超过 2100 万枚的输出;中本聪贴出了自己写的 CheckTransaction 函数补丁,呼吁矿工在修复扩散前"停止出块";当晚第一个打上补丁的构建就进了 SVN。天黑之前,中本聪已把 0.3.10 版——携带修复的紧急版本——的下载链接编辑进原帖,官方 0.3.10 正式版于次日发布。从第一声警报到可下载的修复版:约 5 小时,全程在公开场合拼装完成。

    Bitcointalk 论坛《overflow bug SERIOUS》帖子:网友报告负值交易并贴出 2010 年 8 月 15 日的 0.3.10 补丁下载链接
    一场完全公开的紧急发布。Watch at 4:14

5 小时修复,53 个区块回滚

改代码只是容易的那一半。链上已经带着毒块——全网必须就"哪段历史是真的"达成一致。

  1. 7

    中本聪的 5 小时补丁

    从 Jeff Garzik 发帖算起,只用了约 5 个小时,中本聪就写好并发布了软件补丁。放在什么背景下看这个速度?从"这看起来有点怪"到共识客户端修复完毕,没有基金会、没有值班表、没有紧急热线,只有论坛上的开源协作。修复版客户端还顺手把规则焊死:永久拒绝任何超过 2100 万枚的输出,让同类溢出永远无法再通过校验。企业级安全团队衡量漏洞响应速度用的是"天";2010 年,一个用论坛账号的匿名程序员立下的标杆,多数项目至今没追上。

    手写笔记:Jeff Garzik 报告 2010 比特币通胀漏洞后,中本聪在约 5 小时内就写出了软件补丁
    从漏洞报告到补丁:约 5 小时。Watch at 5:45
  2. 8

    两条链,一个选择

    补丁让比特币在最古老的意义上分叉了:两版历史同时存在。链一带着含 1844 亿枚 BTC 的区块 74638;链二直接拒绝这个区块。每个节点、每个矿工都必须选边。中本聪的指令很简单——只在好链上出块。由于好链承载的都是合法工作量,它持续生长,坏链则停滞原地。这就是全部机制:没有修改账本、没有管理后台、没有撤销按钮。网络用工作量证明投票,决定延续哪一段历史——和此后每一次分叉的裁决规则一模一样。

    手写对比 2010 年两条竞争链:携带 1844 亿枚 BTC 的坏链,和被高亮选中、守护 2100 万总量规则的好链
    两段历史;网络留下了诚实的那条。Watch at 6:14
  3. 9

    53 个区块,被工作量证明推翻

    终局落在区块 74691。完成升级的矿工持续延长好链,8 月 16 日它反超坏分支——按比特币自己的裁决规则,"累计工作量最多的链才是真链",坏链就此出局。坏链上的 53 个区块连同毒交易一起跌出主账本,不复存在。今天去查区块 74638,你会看到一个再普通不过的区块:那笔 1844 亿枚的交易根本不在比特币保留的链上。留下的唯一痕迹颇为诗意——攻击者为触发漏洞花掉的那 0.5 枚 BTC 至今原封未动地躺在链上,一躺就是十五年。

    手写笔记:中本聪引导矿工只在链二上出块,累计工作量最多的一链重新成为比特币的官方链
    区块 74691:好链获胜。Watch at 6:44
  4. 10

    没错,早期比特币确实中心化

    批评者拿这段历史证明"比特币过去是中心化的"——这没错,但不得要领。2009 年 1 月,整个网络就跑在中本聪的一台电脑上;不久之后,跑在中本聪和 Hal Finney 的机器上,谁想关掉它都行,包括美国政府。比特币从两台电脑的实验成长为任何人都关不掉的全球网络,不是什么见不得光的糗事,而是它全部成就本身。像 2010 年那种协调一致的修复,今天已经不可能重演——而这恰恰是设计意图所在。

    手写笔记:早期比特币先后只在中本聪的电脑和 Hal Finney 的机器上运行,之后才走向全球分布式
    从两台电脑,到关不掉。Watch at 7:20

"中本聪也回滚过"——他没有

这起事件在山寨币话术里的来世,建立在一个数字根本不支持的比较之上。

  1. 11

    以太坊式"你也一样"论

    2010 事件如今最常见的用途是修辞:"中本聪 2010 年回滚了比特币区块链,凭什么批评以太坊 2016 年为 DAO 被黑做同样的事?"表面听来似乎对称。2016 年,攻击者从一个众筹了全网约 14% 以太的智能合约基金 The DAO 里抽走了数百万枚 ETH,以太坊领导层选择硬分叉逆转盗窃——代价是分裂出以太经典(ETC)。但对称恰恰是这个比较最缺的东西:两件事在规模上、在逆转的对象上、在谁从中受益上,全都不一样。接下来三张图,逐一拆开看。

    手写质问:为什么批评者接受中本聪 2010 年的回滚,却指责以太坊 2016 年为 DAO 被黑改写链
    推销员永远只说一半的问题。Watch at 7:50
  2. 12

    154 万美元的网络 对 10 亿美元的网络

    先比规模。2010 年 8 月,比特币历史最高价约 0.40 美元,全网已挖出约 386 万枚,总市值不足约 154 万美元——一个零头的零头,身后只跟着一小撮密码朋克。而以太坊在 2016 年 7 月 20 日为 DAO 事件逆转链上历史时,已经在 Coinbase 活跃交易,市值约 10 亿美元——约是前者的 650 倍——而且其中相当一部分属于预挖受益人:他们的 ETH 正被困在 The DAO 里。逆转 2010,保护的是一个还没有主人的网络;逆转 2016,保护的是一批富裕持有人免于承担自己的投资决策。

    手写市值对比:2010 年比特币总市值不足 154 万美元(数字高亮),旁边是以太坊 2016 年回滚时约 10 亿美元的市值
    不足 154 万美元 对 约 10 亿美元。Watch at 9:02
  3. 13

    当场查证:40 美分就是天花板

    比较背后的数字,几秒钟就能查证——视频里就是当场查的。搜索"比特币 2010 年最高价",答案直接弹出:据历史行情数据,2010 年全年比特币都没突破 0.40 美元,要到 2011 年初才摸到这个水平。乘以 2010 年 8 月已流通的约 386 万枚,全网总估值不足约 154 万美元——买不上一套城郊的房子。那场 5 小时修复里真正押上的筹码,根本不是现代意义上的钱,而是"规则会被执行"这个理念——而且是在执行它几乎毫无代价的时刻。

    Google 搜索"比特币 2010 年最高价",答案显示当年价格从未突破 0.40 美元
    0.40 美元,就是历史最高价。Watch at 9:50
  4. 14

    以太坊的回滚,用数字说话

    一张市值曲线图,对比一目了然。以太坊 2015 年上线,到 2016 年 7 月 20 日 DAO 逆转分叉激活当天,市值已在约 10 亿美元量级,后面还跟着多年的增长。这就是那个单方面改写自己历史去逆转黑客攻击的实体——代价是分裂成 ETH 和 ETC。2010 年的比特币没有要保护的内部人、没有要守卫的国库、没有要兜售的代币;它有的只是一个漏洞、一个论坛和 5 小时补丁。同一个词"回滚",描述的是两件性质完全不同的事。

    以太坊 2015 年 8 月至 2022 年 11 月的市值曲线图,可见 2016 年 DAO 回滚时约 10 亿美元的规模
    2016 年,10 亿美元押在链上。Watch at 9:57

为什么这一切不会再重演

2010 年的修复依赖一种如今已不存在的信任——因为如今已不再需要它。

  1. 15

    2100 万的支柱与社会共识层

    2010 年最深的一课是:仅靠软件,守不住 2100 万的总量上限——守着它的是人。比特币账本完全公开透明,无数双眼睛盯着每个区块找异常(矿工拿多了、交易超过 2100 万枚),这就是通胀漏洞总能被迅速发现、迅速修复的原因。但最后的防线是社会共识层:全球数以百万计的持有人,会拒绝运行任何违反总量上限的链,无论代码怎么说。代码随时可以被社区改掉;"2100 万不可谈判"这条共同信念,却没法被分叉掉。"糟了,现在有 1844 亿枚比特币了"这个剧本从未成真——未来也不会。

    手写结论:2100 万枚 BTC 总量上限是比特币最重要的支柱,而守护它的是比特币的社会共识层
    总量上限,由人来执行。Watch at 10:40
  2. 16

    2018 年续集:反向证明系统有效

    比特币确实有过第二个通胀漏洞——2018 年 9 月披露的 CVE-2018-17144——而它的结局,恰恰是"2010 模式依然有效"最有力的证明。这个漏洞源于前一年的一处性能优化,理论上可让矿工把同一笔交易的输入花两次,从而膨胀供应量。报告它的是竞争对手比特币现金阵营的一位开发者;约一天之内,Bitcoin Core 0.16.3 完成修复;主网上无人利用过它。连比特币的对手都在替比特币审计比特币。这就是"多眼原则"的实战——也是对至今还拿 2010 漏洞贩卖恐慌的人的最好回击。

    Bitcoin Core 官网 CVE-2018-17144 完整披露页:2018 年的通胀漏洞在被利用之前就被报告并修复
    对手报告,一天修复。Watch at 12:59

常见问题

2010 年比特币值溢出事件是什么?

那是比特币规则第一次、也是唯一一次在主网上被打破。2010 年 8 月 15 日,区块 74638 中的一笔交易利用整数溢出(CVE-2010-5139)造出 184,467,440,737.09551616 枚 BTC——约 1844 亿枚假比特币,相当于 2100 万上限的近 8800 倍,分给三个地址。开发者 Jeff Garzik 在约一小时内于 Bitcointalk 论坛发现异常;中本聪约 5 小时内发布补丁;矿工抛弃坏链后,好链于 8 月 16 日在区块 74691 反超,经 53 个区块重组,假币彻底消失。无人蒙受损失,没有任何假币流通。

1844 亿枚比特币漏洞是怎么实现的?

这笔交易包含两笔各 92,233,720,368.54277039 枚 BTC 的输出。每笔输出单独看都通过了校验,但代码从未检查所有输出相加后会不会超出 64 位整数范围——两数之和回绕成一个极小的值,未修复的客户端便认定交易合法。攻击者还安排出块人多收 0.01 枚本不存在的 BTC——这是该漏洞唯一真正"铸"出来的钱。比特币的最小单位是一亿分之一枚,这正是溢出金额几乎恰好落在 2^64(无符号 64 位整数上限)的原因。

比特币真的回滚过区块链吗?

回滚过一次,就是这次。但 2010 年的"回滚"不是管理员修改历史——网络只是分叉成了带 1844 亿枚交易的坏链和拒绝它的好链,中本聪请矿工只在好链上出块。当好链长得更长,比特币的核心规则——累计工作量最多的链才是真链——就让坏链自动消失,连同那笔假交易一起。这和以太坊 2016 年的 DAO 分叉有本质区别:后者是在约 10 亿美元市值下逆转真实被盗资产;而 2010 年全网市值不足约 154 万美元,漏洞产出从未进入流通。

中本聪用了多久修复 2010 年的漏洞?

从发现到补丁发布约 5 小时。Jeff Garzik 于 2010 年 8 月 15 日下午 6:08 发帖;当晚中本聪和 Gavin Andresen 就在论坛帖子里贴出了各自的补丁;首个修复构建当晚进了 SVN,0.3.10 修复版的下载链接当天就发了出来,官方 0.3.10 正式版次日上线。修复版不只是堵住这一个洞——它新增了永久拒绝任何超过 2100 万枚输出的规则,让同类溢出永远无法再通过校验。

那些假比特币被花掉或被留下了吗?

没有。53 个区块重组剔除坏链后,两笔 922 亿枚的输出从账本上消失——1844 亿枚假币在比特币保留的链上从未存在过,自然也从没被充进任何交易所、转给任何用户。唯一的现实痕迹,是攻击者为构造漏洞交易而从早期水龙头花掉的那 0.5 枚 BTC:这些币是真的,至今原封未动地躺在目标地址里,成了比特币史上最大漏洞的一块链上化石。

2010 年之后比特币还出过通胀漏洞吗?

出过一次严重的:CVE-2018-17144,2018 年 9 月披露。Bitcoin Core 0.14 的一处性能优化漏掉了"同一交易不能重复花费同一输出"的检查,在某些版本里理论上可让矿工膨胀供应量。报告它的是竞争对手比特币现金社区的一位开发者;约一天内 Bitcoin Core 0.16.3 完成修复;主网上没有任何人尝试利用它的证据。这一幕通常被解读为 2010 年剧本的重演:开源代码、无数双眼睛——连敌对阵营的眼睛都算上——以及一次快速、公开的修复。

继续看这段历史

参考资料

延伸多媒体文献参考

本专题时序与历史图示交叉参考了 Bitcoin University 出品的文献视频 “184 Billion Bitcoin Bug”,谨向原研究记录者致谢。

免责声明与学术边界

本图解指南仅供区块链技术史学术研讨与公众科普使用,不构成任何财务、证券、投资或法律建议。文中所载历史价格、黑客事件与安全漏洞分析均属于公开历史记录。加密货币市场具有极高风险,请审慎研判。