MSTR Cat

区块链/等级 VI · 比特币之后/6.3 以太坊与智能合约/课程 3

The DAO黑客攻击与以太坊经典

导致链分裂、并定义了不可篡改性之争的重入漏洞

材料区块浏览器界面(例如 Etherscan)The DAO智能合约源代码(分叉前版本)用于记录状态变量变化的笔记本

好奇

  1. 为什么在状态更新之前执行的代码会让攻击者能够反复盗取资金?
  2. 当一个社群投票决定改写历史而非保留它时,会发生什么?
  3. 谁拥有最终决策权:是共识机制,还是维护它的开发者们?

探索

  1. The DAO于2016年4月作为一个自治型风险投资基金上线,从11,000多名投资者处筹集了约1270万ETH。这一数额约占当时流通中全部以太币的14%。该项目完全通过智能合约运作,代币持有者可以投票决定资助哪些项目,无需中心化管理或传统的公司治理结构。
  2. 2016年6月17日,攻击者利用了The DAO的split函数中的重入漏洞。该漏洞使合约在内部余额更新之前就能被再次调用。攻击者将约360万ETH转入一个“子DAO”,由于28天的锁定期,这些资金被冻结。这次攻击表明,图灵完备的机器会带来复杂的状态管理风险,而比特币这类较简单的系统则不存在此类风险。
  3. 以太坊社区面临着一个紧迫的困境:是维护账本的不可变性,还是保护投资者免受严重代码故障的影响。开发者们认为该漏洞属于实现错误,并非预期的行为;若让资金一直被锁定,将会损害人们对该平台功能的信任。而批评者则指出,修改链上的历史记录违背了去中心化共识的核心原则,将为未来的治理干预树立危险的先例。
  4. 2016年7月20日,以太坊在区块1,920,000处进行了硬分叉,以此逆转攻击行为,并将相关资金转移到退款合约中。DAO代币持有者便可以从该退款合约中取回自己的以太币。不过也有少数人反对这一举措,继续在未经修改的原始链上挖矿。这些人后来创建了以太坊经典(ETC),并严格遵循“代码即法律”的原则,认为任何实体都无权篡改历史记录。
  5. 这次分叉让同一个账本分化出两个平行现实。以太坊继续发展成为主要的智能合约平台,而以太坊经典始终是一个规模较小的网络,主要作为对去中心化理念的一种哲学宣示而存在。这一事件影响了此后各种加密货币的协议开发。
  6. 在以太坊浏览器和以太坊经典浏览器上分别查看第1,920,000号区块:两条链在第1,919,999号区块之前完全相同,从第1,920,000号区块开始出现分歧。这次分叉并不是通过交易转移The DAO的以太币;而是新的客户端软件在该区块执行了一次非常规的状态变更,因此这一逆转体现在代码中,而不出现在任何交易列表里。

关键事实

  • The DAO筹集了约1270万ETH,约占其上线时流通中全部以太币的14%。
  • 2016年6月17日,攻击者利用重入漏洞,将约360万ETH转入一个子DAO。
  • 2016年7月20日,以太坊在第1,920,000号区块进行硬分叉,以逆转攻击并返还资金。
  • 少数人以“代码即法律”为由,继续在原链上挖矿,这条链后来成为以太坊经典(ETC)。
  • 这次分叉使得持有者既拥有新链上的 ETH,也拥有旧链上的 ETC。
  • 这一事件引发了关于不可变性、开发者权限以及共识定义的持续讨论。

练习 九、六、三、一

9收集列出9例软件更新或协议变更导致现有用户数据或交易记录被修改的情况。注明是谁推动了这些变更以及其给出的理由是什么。
6归类将这9个变化按照其属于错误修复、功能添加、安全回退、共识升级、硬分叉还是软分叉来分为6类。
3提炼将这6类归纳为最终决定这些变更的3种权力来源。
1凝结用1句话说明“代码即法律”承诺了什么,以及当代码出错时它牺牲了什么。

事实核查

日期、数字及数据均依据下方列出的已发表资料进行核实。

在互动学院中打开 →

EN PT ES JA KO RU DE FR MS