以太坊 The DAO 事件

概述

由于智能合约代码存储在区块链上,所以一旦其有漏洞也极难修复。TheDAO 是运行在 ETH 区块链平台上的一个智能合约,但是其代码存在漏洞,于是黑客发起了 Re-entrancy Attack 盗走了大量的以太币,最终导致了以太坊分裂为 ETH(Ethereum) 和 ETC(Ethereum Classic)。


本系列的文章不会着重于细节讲解,对于本次攻击的详情可以参考这篇文章:Analysis of the DAO exploit

将介绍下列内容:

  • TheDAO
  • 补救措施
  • 以太坊的分裂

TheDAO

DAO 是 Decentralized Autonomous Organization(分布式自治组织)的简称,TheDAO 是一个基于 ETH 区块链平台的众筹项目。其目的是让持有 TheDAO 代币的参与者通过投票的方式共同决定被投资项目,整个社区完全自制,其功能通过智能合约实现。众筹完成时共募集 1150 万以太币,在当时的价值达到 1.49 亿美元。

Child DAO

允许 TheDAO 代币的持有者调用 TheDAO 合约中的 `split` 函数,创建一个子合约,持有者在原有 TheDAO 智能合约中的 TheDAO 代币被销毁,存储在原 TheDAO 智能合约中对应的以太币被转移到新的 TheDAO 智能合约中。
Child DAO 是为了保护处于弱势地位了 TheDAO 代币持有者,使他们也可以有一个可以投票和分红的 DAO。黑客发起攻击后 ETC 就锁定在了 Child DAO 内。

补救措施

Child DAO 创建后有 28 天的锁定期,这段时间无法将以太币转走,就是段时间给了以太坊社区补救的机会。

以太坊团队设计了两步走方案:

  1. 锁定黑客账户。
  2. 设法将盗取的以太币退还。

以太坊首先发布了一个软分叉方案,新的软件升级中加入了一条规则:凡是和 TheDAO 相关的账户一律不允许交易。升级发布后大多数矿工都升级的软件。但是新的软件有一个 bug。
当新的软件执行某个交易与 TheDAO 相关时,这个交易失败,但是没有收取汽油费。这就导致了整个系统中充斥着大量的与 TheDAO 相关的交易,消耗了大量的资源,因此大多数矿工又将软件版本退回了更新前。
软分叉的措施失败了,此时距离 28 天的锁定期结束已经很近了。于是以太坊团队发布了一个硬分叉方案,所有 TheDAO 账户中的以太币都被强制转到另一个账户,事后再想办法将其退还。
这次没有出现意外,最终被盗取的以太币都退还了

以太坊的分裂

在攻击发生后,以太坊社区有两个观点,双方进行了激烈讨论,最终没能达成一致,导致了分裂。

应该采取措施

这一派认为应该采取措施方式黑客将以太币盗走,原因是 TheDAO 是太大而不能倒的合约,TheDAO 筹集的以太币大概占有当时总流通量的 10% 左右。以太坊开发团队也持有这种观点。
但是不要认为合约出了问题以太坊团队就会介入,主要还是因为这个合约的影响太大了。

不应采取措施

这一派认为黑客的行为并没有违反任何规则,因为智能合约的代码就是规则,按照规则行事何谈违反?
更重要的观点是,如果出了问题就要回滚,那么还谈什么去中心化的不可篡改的账本?开发团队一句话就能强行更改账本,这和中心化有何区别?

分裂

两派的矿工都没能说服对方,最终导致以太坊分裂成了两条链,一条就是采取了措施的链,称为 ETH(Ethereum),另一条是没有采取任何补救措施的链,称为 ETC(Ethereum Classic)。直到现在这两条链依旧存在,只是 ETH 上的算力更强。
在 ETC 上挖矿人一部分是出于投机目的,因为这条链算力更少,更容易挖出区块。另一部分人是纯粹出于信仰,这些坚持十分纯正的去中心化理念,认为 ETC 才是正宗的以太坊,而 ETH 已经偏离的去中心化的初衷。

参考资料

本文作者:ADD-SP
本文链接https://www.addesp.com/archives/186
版权声明:本博客所有文章除特别声明外,均默认采用 CC-BY-NC-SA 4.0 许可协议。
暂无评论

发送评论 编辑评论


上一篇
下一篇