学习视频来源:https://www.bilibili.com/video/BV1Vt411X7JF/?p=23
本博客除了包含自己的在学习过程中记录的笔记外,还包含少部分自己扩展的内容,如有错误,敬请指正。
文章目录
- [1. DAO](#1. DAO)
-
- [1.1 为什么不去中心化一切?](#1.1 为什么不去中心化一切?)
- [1.2 THE DAO:一次伟大的尝试](#1.2 THE DAO:一次伟大的尝试)
- [1.3 工作原理](#1.3 工作原理)
- [1.4 惊人成功](#1.4 惊人成功)
- [2. 如何取回投资?------拆分机制(Split DAO)](#2. 如何取回投资?——拆分机制(Split DAO))
- [3. 致命漏洞:重入攻击(Reentrancy Attack)](#3. 致命漏洞:重入攻击(Reentrancy Attack))
- [4. 社区分裂:回滚 vs 坚守原则](#4. 社区分裂:回滚 vs 坚守原则)
-
- [4.1 支持回滚派](#4.1 支持回滚派)
- [4.2 反对回滚派](#4.2 反对回滚派)
- [5. 补救尝试:软分叉失败](#5. 补救尝试:软分叉失败)
- [6. 最终方案:硬分叉(Hard Fork)](#6. 最终方案:硬分叉(Hard Fork))
-
- [6.1 社区投票与执行](#6.1 社区投票与执行)
- [7. 以太坊分裂:ETH 与 ETC 诞生](#7. 以太坊分裂:ETH 与 ETC 诞生)
-
- [7.1 ETC](#7.1 ETC)
- [7.2 重放攻击](#7.2 重放攻击)
- [7.3 解决方案:引入 ChainID](#7.3 解决方案:引入 ChainID)
- [8. 为什么不能只冻结黑客账户?](#8. 为什么不能只冻结黑客账户?)
- [9 思考](#9 思考)
1. DAO
1.1 为什么不去中心化一切?
比特币实现了去中心化货币 ,以太坊则进一步实现了去中心化合约。既然"去中心化"如此理想------无需信任中介、规则透明、不可篡改------那么,为什么不把所有东西都去中心化呢?
正是在这种思潮下,DAO(Decentralized Autonomous Organization,去中心化自治组织) 的概念应运而生。
DAO 是一种由代码规则驱动、通过区块链共识协议维护并自动执行的组织形式。它的章程、投票机制、资金分配等全部写在智能合约中,无需传统公司管理层或法律实体介入。
- 组织规则公开透明;
- 决策由代币持有者按权重投票决定;
- 执行完全自动化,依赖区块链保障不可篡改。
DAO 不一定以盈利为目的(区别于传统的 DAC, Decentralized Autonomous Corporation),它可以是社区治理、公共基金、开源协作等多种形态。
1.2 THE DAO:一次伟大的尝试
2016 年 5 月,一个名为 THE DAO 的项目上线,成为历史上首个大规模实践 DAO 理念的尝试。
1.3 工作原理
- 类似于一个去中心化的众筹投资基金;
- 任何人可向 THE DAO 投入以太币(ETH),获得对应数量的 DAO 代币;
- 持有代币即拥有投票权,代币越多,权重越大;
- 社区共同投票决定投资哪些项目;
- 项目产生收益后,按智能合约自动分配给代币持有者。
这种模式前所未有地实现了民主化、透明化的风险投资,被许多人誉为"未来组织的雏形"。
1.4 惊人成功
- 上线仅 1 个月 ,就筹集了 价值约 1.5 亿美元的以太币(当时约合 1270 万 ETH);
- 占当时以太坊总流通量的 14% 以上;
- 有人甚至预言:"3--5 年内,THE DAO 的影响力将超过以太坊本身。"
然而,这场实验在短短几个月后就凉了。
2. 如何取回投资?------拆分机制(Split DAO)
THE DAO 没有提供直接的 withdraw 函数 。用户若想退出,唯一方式是通过 "拆分"(Split DAO):
- 用户发起拆分请求;
- 进入 7 天讨论期;
- 拆分成功后,创建一个 子 DAO(Child DAO),将该用户的资金和代币转入其中;
- 子 DAO 资金 锁定 28 天,之后方可自由使用。
这一设计本意是保护多数人利益,同时允许少数派"和平分裂"。理念本身并无问题,很民主。
3. 致命漏洞:重入攻击(Reentrancy Attack)
问题出在 Split DAO 合约的实现上。
黑客发现了一个重入漏洞 :在资金转账过程中,合约先发送 ETH,再更新余额。攻击者可构造恶意合约,在收到 ETH 的回调函数中再次调用取款函数,在余额未更新前反复提取资金。
利用此漏洞,黑客在短时间内转走了约 360 万 ETH(当时价值约 5000 万美元) ,占 THE DAO 总资产的 1/3。
市场陷入恐慌,ETH 价格暴跌。人们开始质疑:号称"不可篡改、绝对安全"的区块链,为何在现实面前如此脆弱?
4. 社区分裂:回滚 vs 坚守原则
事件引发以太坊社区激烈争论,形成两大阵营:
4.1 支持回滚派
- 认为黑客行为虽未违反代码,但违背社区共识;
- 若放任不管,将摧毁用户对以太坊的信任;
- 不能让投资者血本无归。
4.2 反对回滚派
- 强调 "Code is Law"(代码即法律);
- 如果因为损失大就回滚交易,区块链的不可篡改性将名存实亡;
- 未来每个智能合约出问题都要回滚?系统将彻底混乱。
5. 补救尝试:软分叉失败
以太坊核心开发团队首先尝试 软分叉(Soft Fork):
- 在区块验证规则中加入一条:任何与 THE DAO 相关的交易均视为无效;
- 新节点拒绝包含此类交易的区块,旧节点仍可接受------属于向后兼容,所以属于软分叉。
但该方案存在严重缺陷:
- 软分叉规则不收取 Gas 费来处理 DAO 相关交易;
- 攻击者可发送大量无效交易,触发 DoS(拒绝服务)攻击;
- 矿工节点因性能问题纷纷回退到旧版本,软分叉宣告失败。
此时,距离黑客资金解锁(28 天锁定期)已所剩无几,形势危急。
6. 最终方案:硬分叉(Hard Fork)
软分叉不行,团队提出更激进的方案------硬分叉:
- 在 第 1,920,000 个区块 处,强制将 THE DAO 及其子 DAO 中的所有资金转移到一个新合约;
- 该新合约只有一个功能:允许原投资者按比例提现;
- 此操作绕过签名验证,直接在协议层写死转账逻辑。
这是一次对历史交易的直接干预,本质上违背了"不可篡改"原则。
6.1 社区投票与执行
- 虽然参与投票的人数有限,但大多数矿工和交易所支持硬分叉;
- 2016 年 7 月 20 日,硬分叉在预定区块高度成功激活;
- 原投资者陆续取回资金。
7. 以太坊分裂:ETH 与 ETC 诞生
7.1 ETC
并非所有人都接受硬分叉。
一部分坚持"代码即法律"的开发者和矿工拒绝升级 ,继续在原链上挖矿。这条链后来被称为 Ethereum Classic(ETC,以太经典)。
- ETH(以太坊):硬分叉后的新链,回滚了 THE DAO 攻击;
- ETC(以太经典):原始链,保留所有交易,包括黑客转账。
7.2 重放攻击
由于两条链使用相同的账户体系和私钥 ,出现了严重的 重放攻击(Replay Attack) 问题:
- 在 ETH 链上发起一笔交易,可在 ETC 链上被重复执行,反之亦然;
- 用户可能在不知情下同时转出 ETH 和 ETC。
7.3 解决方案:引入 ChainID
后来,两条链分别引入 chainId 参数,在交易签名中加入链标识,这样同一个账户同一笔交易得出的签名就不一样了,从而有效防止跨链重放 。
至此,问题得到彻底解决。
8. 为什么不能只冻结黑客账户?
有人质疑:为何不只针对黑客地址冻结,而非要回滚整个 THE DAO?
答案在于智能合约的本质:
- THE DAO 合约本身存在结构性漏洞;
- 黑客利用的是合约逻辑,而非外部攻击;
- 只要合约还在运行,任何人都可复现攻击;
- 因此,整个合约已不可信,必须整体废弃。
这也揭示了一个残酷现实:一旦智能合约出现致命 Bug,几乎无法修复,只能"作废"。
最终,THE DAO 彻底解体。
9 思考
其实以太坊采取的硬分叉方案,并不是说完全是中心化。是否执行硬分叉分案,决定权不在以太坊团队手中,而是在矿工手中。硬分叉分案之所以能成功,是因为它得到了大部分矿工的支持,同意升级节点,这也包含了一定程度的去中心化和共识。