The DAO 事件:把以太坊一分为二的盗案
2016 年 6 月,匿名攻击者利用重入漏洞从 The DAO 卷走约 360 万 ETH;以太坊选择改写历史追回资金,代价是催生出竞争对手链——以太经典(Ethereum Classic)。
9 分钟 • 16 个图解步骤 • 深度史料考证与链上技术复盘
编委会史料考证与链上复盘
本篇归档基于公开密码学文献、历史白皮书与链上交易数据进行独立交叉核实,遵循学术严谨性标准。
The DAO 事件是什么?
The DAO 是搭建在以太坊上的众筹型风险基金,共募集 1270 万 ETH(约 1.5 亿美元),是当时人类历史上规模最大的众筹项目。2016 年 6 月 17 日,攻击者利用 splitDAO 函数"先付款、后记账"的重入漏洞,以每小时约 800 万美元的速度反复提款,卷走约 360 万 ETH(约 5500 万美元)。白帽黑客用同样手段抢回 720 万枚 ETH 后,社区以 87% 的支持率在区块 1,920,000 执行硬分叉,把资金转入退款合约;而拒绝回滚的原链延续至今,就是以太经典(Ethereum Classic)。
核心要点
- The DAO 在 2016 年春天募集了 1270 万 ETH(约 1.5 亿美元),是当时史上最大的众筹项目:一个由代币投票治理、法定人数 20% 的"去中心化对冲基金"。
- 2016 年 6 月 13 日,一位康奈尔大学的计算机教授在代码第 666 行发现了重入漏洞;Slock.it 在 DAO 1.1 框架里调换了两行代码作为修复——但已部署的合约无法修改,线上的 The DAO 依然裸奔。
- 6 月 17 日(周五),攻击者递归调用 splitDAO,以每小时约 800 万美元的速度卷走约 5500 万美元,ETH 价格应声从 20 美元闪崩到 15 美元。
- 自称"罗宾汉"的白帽黑客用同样的漏洞抢先转走了 720 万枚 ETH(占 The DAO 的 55%),所有资金被时间锁锁住:27 天等待期加 14 天表决期,共 41 天。
- 社区以 1 ETH = 1 票的 Carbonvote 投出 87% 的支持率,在区块 1,920,000 执行硬分叉,把资金转入退款合约——而攻击者公开信上的签名后来被证实是无效的。
- 未经篡改的原链以"以太经典"(Ethereum Classic)之名存续至今;若分叉从未发生,攻击者手里的 360 万枚 ETH 如今价值超过 70 亿美元。
The DAO 是什么?
在被黑之前,The DAO 是以太坊上最耀眼的实验:一笔众筹、一家风投、一个民主政体,被压缩进同一个智能合约。
- 1
2016 年 6 月 13 日:第 666 行的漏洞
2016 年 6 月的一个周一,康奈尔大学的一位计算机科学教授正在逐行阅读 The DAO 的代码。几个月来他一直呼吁项目暂停上线;就在这一天,他发现了一个严重的漏洞——第 666 行上的那个 bug,它能让黑客像刷 ATM 一样无限次提款。四天后,这个警告被证明是灾难性的。

一切始于一位研究者、一段函数。 - 2
DAO,逐字母拆开看
DAO 是 Decentralized Autonomous Organization(去中心化自治组织)的缩写:组织的规则写在代码里,而不是经理的会议纪要里。The DAO 把众筹逻辑推到极致——不再是为不同项目设不同的基金,而是"一个基金统治一切",完全跑在以太坊上。

没有老板,没有办公室,只有代码。 - 3
每个投资人同时也是投票人
上线时,投资人每存入 1 ETH 就获得 100 枚 DAO 代币。代币既是份额也是治理权:持有人可以提交提案——比如"投 100 万美元换公司 XYZ 10% 的股份"——由全体投票表决。提案通过初审、并达到全体代币 20% 的法定人数后,The DAO 会自动把 ETH 打给提案合约,产生的利润再回流国库,抬升每一枚 DAO 代币的内在价值。本质上,它就是一只去中心化对冲基金。

代币不只是份额,更是选票。 - 4
史上最大的众筹
发售页上的实时计数器记录了这场疯狂:DAO 代币不断铸造,ETH 源源涌入,截止日定在 5 月 28 日。发售收官时,The DAO 共募集 1270 万 ETH——按当时价格约 1.5 亿美元,是人类历史上最大的众筹项目。合约于 4 月 30 日上线,经过以太坊开发者们一次又一次审计;而一旦部署,别说普通人,就连背后的公司 Slock.it 也改不了协议的一行代码。

刷新所有众筹纪录的计数器。
拆解重入漏洞
这个 bug 并不高深——它只是一次"先付款、后记账"的顺序错误,让提款可以在余额更新前无限重复。
- 5
逃生舱:splitDAO()
为了保护少数派不被多数派碾压,The DAO 内置了 split(分裂)函数:强烈反对多数意见的人可以调用 splitDAO,把自己的 ETH 移进一个自建的子 DAO。标准操作是一个人单独发起分裂、创建子 DAO、再提交一份把 ETH 打回自己钱包的提案——完全合规,无人起疑。就是这个不起眼的逃生舱,很快会成为攻击的隧道。

没人想过逃生舱还能当抽水泵。 - 6
留在 GitHub 上的两行修复
6 月 13 日漏洞披露后,Slock.it 承认漏洞存在,但宣称攻击"不可行",并把修复提交到了 GitHub:调换两行代码,先更新余额、再付款。致命之处在于——4 月 30 日部署的智能合约永远无法修改,这份修复只存在于尚不存在的 DAO 1.1 框架里。线上的 The DAO 继续先付钱、后记账。
![修复重入漏洞的两行 Solidity 代码:先更新 paidOut[_account] 的余额,再调用 rewardAccount.payOut 支付 修复重入漏洞的两行 Solidity 代码:先更新 paidOut[_account] 的余额,再调用 rewardAccount.payOut 支付](/imgs/guides/dao-hack/dao-hack-two-line-fix-github.webp)
两行代码,迟到了四天。 - 7
一台"先吐钱、后扣账"的 ATM
视频里的类比最直观:想象一台先递现金、后改余额的取款机。你取 10 美元——趁它还没记账,再取 10 美元,再取,直到机器搬空。这就是重入攻击:合约把 ETH 打给外部合约时,对方在收款中途再次发起调用,因为此时余额检查还没写回。一遍又一遍,直到金库见底。

趁余额没更新,再问一次——永远可以。 - 8
59 号提案与七天窗口
那个周五——漏洞披露四天后——陷阱已经就位。一份名为 "lonely, so lonely" 的分裂提案安静地躺在 59 号。分裂提案有标准的七天公示期,而没有任何人加入,因为单独发起分裂本就是常规操作。窗口一关,攻击者调用 splitDAO,抽水开始;盯着 Etherscan 的人看到的,是合约在数百次地递归调用自己。

一份例行提案,签发者无懈可击。 - 9
每小时 800 万美元,循环播放
ETH 以每小时约 800 万美元的速度,从主 DAO 流入攻击者的子 DAO——人称"黑暗 DAO"——每一笔提款都在上一笔记录前再次触发。持币人眼睁睁看着 Etherscan 上的递归记录刷屏。市场瞬间反应:ETH 从 20 美元闪崩到 15 美元。头六个小时内,约 30% 的 The DAO 资金被卷走,随后攻击却莫名其妙地失效了。

一个函数,被调用了几百次。
抢在黑客前面搬空 The DAO
大部分资金还在金库里,白帽黑客用同样的漏洞抢注它们——然后,倒计时开始了。
- 10
罗宾汉与白帽反击战
在里约热内卢,开发者 Alex van de Sande 被 Skype 消息吵醒——"还记得我说过那堆没人偷得走的钱吗?它被偷了。"他和一群自称"罗宾汉"的开发者决定把剩下的资金抽走并归还。第一次行动因巴西运营商断网错过窗口("我们是史上最惨的黑客");第二次,鲸鱼们捐出 600 万枚 DAO 代币,团队打入了 78 号分裂提案,与攻击者赛跑,抢下了 720 万枚 ETH——The DAO 的 55%。

好人只有 30 分钟,和一条断网的宽带。 - 11
距离套现还有 41 天
所有被抢回和被盗走的 ETH 现在都躺在子 DAO 里——白帽 DAO 与黑暗 DAO——并被多重时间锁锁住:27 天的等待期,加上转出资金所需的 14 天常规提案表决期。加起来,攻击者要等 41 天才能套现这笔相当于以太坊总供应量约 5% 的巨款。这 41 天的倒计时,通向的不是又一个漏洞利用,而是一场远为激进的操作。

以太坊历史上最漫长的 41 天。
把以太坊一分为二的分叉
改写历史追回赃款,还是让代码说了算?社区做出了选择——而一条对手链就此诞生。
- 12
"此致,攻击者"
攻击发生一天后,一封公开信出现在 The DAO 的 Slack 里,附有私钥签名。写信人声称自己是"依法"通过一个白纸黑字写进代码的功能赚取了约 360 万 ETH 的"奖励",并警告任何软分叉或硬分叉"都将永久且不可逆地摧毁"以太坊的全部信心。后来的检查发现,这封信的签名是无效的——真正的攻击者是谁,甚至写信人是不是攻击者,至今成谜。

攻击者声称这是奖励,不是盗窃。 - 13
87% 投票改写历史
争论分成两派。纯粹派主张代码即法律:攻击者更像一个认真读过合同条款的聪明律师,而且以太坊本身从未被黑——被利用的只是一份写得很烂的合约。另一方则反驳:The DAO 握有全部 ETH 的约 15%,大而不能倒,像极了 2008 年的救助。一场 1 ETH = 1 票的 Carbonvote 投出了 87% 的分叉支持率——尽管页面自己也承认,实际参与投票的供应量只是一小部分。

87% 赞成——来自一个很小的、有争议的投票群体。 - 14
区块 1,920,000:硬分叉落地
在区块 1,920,000,全世界的节点升级了软件,做了一件区块链本不该做的事:改写历史。与黑客攻击相关的每一笔交易被撤销,The DAO 及各子 DAO 的全部资金——包括罗宾汉抢回的那批——被转入一个退款合约,真正的投资人可以按 100 DAO = 1 ETH 取回。没有黑客强迫这次改写,是社区投票让它发生的。

两条链,同一段历史。 - 15
拒绝遗忘的那条链
但包含黑客交易的原链仍在继续生长。反对分叉的矿工持续挖矿、交易照常发生,第二天交易所 Poloniex 就把这条旧链的代币挂上了牌,价格约 2 美元。它后来被命名为以太经典(Ethereum Classic)——未经篡改的原始以太坊。分叉前持有 ETH 的人,如今同时拥有 ETH 和 ETC;那些坚信不可篡改就是不可篡改的理想主义者,终于有了一条和他们立场一致的链。

原来的链,有了新的名字。 - 16
攻击者的安慰奖
分叉成功了——黑客始终没能动用被盗的 ETH。但子 DAO 同时存在于两条链上,于是攻击者带走了约 360 万枚以太经典,在视频制作时价值约 1.5 亿美元。而假如分叉从未发生,这 360 万枚 ETH 到今天价值将超过 70 亿美元。以太坊带着教训继续前行:写智能合约就像造自动驾驶汽车;而自 The DAO 之后,行业再没有过第二次救助。

黑客最终还是拿到了钱——只是在另一条链上。
常见问题
The DAO 是什么?
The DAO 被盗了多少 ETH?
什么是重入攻击(reentrancy attack)?
以太坊为什么因 The DAO 事件硬分叉?
以太经典(Ethereum Classic)是什么?
The DAO 攻击违法吗?
继续这个故事
以太坊历史全览
把 The DAO 事件放回以太坊从白皮书到合并的完整弧线里理解。
智能合约简史
The DAO 押上一切的那门技术——从概念到"世界计算机"。
门头沟事件:Mt. Gox 崩盘完整时间线
加密史上另一场教科书式的失败:85 万枚 BTC 失踪与十年赔付。
区块链历史时间线
从创世区块到 The DAO 分叉,每个关键节点一次看全。
比特币白皮书逐节解读(图文)
一切"不可篡改"理想的起点——分叉之争检验的那份文件。
BitConnect 崩盘始末
代码击穿了 The DAO,贪婪击穿了 BitConnect——史上最大加密庞氏的 99% 崩盘。
以太坊合并:矿工退场,验证人接棒
被 The DAO 分叉撕裂的这条链,最终走向 PoS 的终点——2022 年 9 月 15 日验证人取代矿工的全过程。
参考资料
延伸多媒体文献参考
本专题时序与历史图示交叉参考了 Junion 出品的文献视频 “The DAO Hack: Story of Ethereum Classic”,谨向原研究记录者致谢。
本图解指南仅供区块链技术史学术研讨与公众科普使用,不构成任何财务、证券、投资或法律建议。文中所载历史价格、黑客事件与安全漏洞分析均属于公开历史记录。加密货币市场具有极高风险,请审慎研判。