天天看点

智能合约 | The DAO事件和以太坊硬分叉1 The DAO2 以太坊硬分叉3 The DAO项目相关地址

1 The DAO

DAO - Decentralized Autonomous Organization(去中心化自治组织)是以太坊创始人Vitalik Buterin(下称V神)提出的概念,简单来说,就是依靠智能合约在区块链上运行,没有法律实体,可以理解为“去中心化的公司”。

1.1 The DAO 项目

 1、众筹阶段

The DAO 是区块链公司 Slock.it 发起的一个众筹项目,在为期28天的众筹阶段期间,众筹们将以太币发送到一个指定的钱包地址,以 1 以太币 == 100 左右DAO Token 的比例换取该项目的代币DAO Token。

拥有DAO Token的人称为 DAO代币持有者(DAO Token Holders)或者 DAO投资者(DAO Investors)。

2、投票阶段

The DAO 完全由社区成员自治,通过部署在以太坊上的智能合约来进行,允许公司提出融资提案。

一旦一项提案被列入白名单,DAO代币持有者就需要对提案进行投票,决定是否为该提案提供项目资金(即决定项目资金的用途),如果项目盈利,则DAO代币持有者也相应地会得到回报。

如果提案获得20%法定人数的支持,则所需资金就会发放到该提案地址。

3、分离退出

当投资者认为被接受的提案具有破坏性或者质量较差时,投资者可以利用 the DAO 中提供的 “exit door”——"split 函数"离开组织。

split 函数允许投资者撤销并取回发送给The DAO的以太币,具体来说:

当有投资者决定从The DAO分离时,投资者通过调用 The DAO 智能合约中的 split 函数 创建出自己的 “Child DAO”,这是一个小型DAO 智能合约;在创建成功之后,该投资者在原来 The DAO 智能合约中的代币被销毁,以太币将被转移到这个新建的小型 DAO 智能合约中;28天后,批准将该小型 DAO 智能合约中的以太币发送到某个地址。

1.2 The DAO 事件

1、The DAO 中的漏洞

分离退出机制中存在 “递归调用漏洞”:

(之后详细分析代码)

2、事件时间表

  • 2016.04.30    The DAO上线,开启为期28天的全球众筹;
  • 2016.05.10    10天时间,众筹得到的以太币的价值已达到3400万美元;
  • 2016.05.15    众筹金额超过1亿美元;
  • 2016.05.28    众筹结束,得到超过1150万个以太币,相当于超过1.5亿美元价值,成为全球历史上最大金额的众筹项目;The DAO 开始在各大数字货币交易所进行开放交易;
  • 2016.06.09    以太坊开发人员 Peter Vessenes 指出 The DAO存在递归调用漏洞,;
  • 2016.06.12    创始人之一的 Stephan Tual 宣布,他们发现了 The DAO 中存在一个 “递归调用 splitDAO 函数” 的漏洞,正着手解决,不过 The DAO 中的资金不会有风险;
  • 2016.06.14    修复方案提交,等待 The DAO 成员审核;
  • 2016.06.15    The DAO 上的漏洞尚未修复完成,发起攻击的合约就被创立了;
  • 2016.06.16    递归调用问题再次被提及;
  • 2016.06.17    黑客发起针对 The DAO 智能合约中多个漏洞的攻击,其中也包含了递归调用漏洞,不断地从 The DAO 中分离资产,向一个匿名地址转移了360万个以太币,受制于 The DAO 的28天锁定期原则,黑客需要等到 7.14 才能对这部分资产进行转移;当天,以太坊停止了对所有交易的验证,此行为被社区诟病为“中心化干涉”,违背区块链本意;同时,以太币币价大跌,由¥145元/以太币降至¥68元/以太币;为了挽回这一局势,V神在以太坊官方博客发布公告《紧急状态更新:关于DAO的漏洞》,解释了 The DAO 被攻击的细节,并提供了一个关于分叉的解决方案:(1)首先进行软分叉,使得从区块高度1760000开始,所有关于 The DAO、ChildDAO 的交易都将无效,以此来阻止黑客将以太币提出;(2)再进行一次硬分叉将这些以太币找回;
  • 2016.06.18    开放交易验证后,社区号召大家发送大量垃圾交易以阻塞以太坊网络,从而可以减缓 The DAO 资产被转移的速度; 
  • 2016.06.19    黑客再次发起了攻击,不过这次只有少量的 The DAO 资产被分离;当天,Slock.it 的联合创始人兼首席技术官Christoph Jentzsch 发表博文,提出两条建议:(1)V神提出的软分叉,但是仅能冻结 The DAO 所有资产,黑客和其他投资者都不能提现;(2)硬分叉,可以将所有资金退回,投资者没有损失;
  • 2016.06.22    白帽黑客通过使用与黑客同样的方法将剩余2/3未被盗取的资产转移到了一个安全的 ChildDAO 中;
  • 2016.06.24    以太坊社区提交了软分叉提案;
  • 2016.06.25    Felix Lange 指出软分叉提案存在 DoS 攻击风险;
  • 2016.06.30    V神提出硬分叉设想;
  • 2016.07.15    具体硬分叉方案公布,建立“退币合约”,但在 7.21 之后,黑客将可以进一步通过分离创造 ChildDAO ,造成所盗资金不受退币合约的影响,因此 7月21日 是硬分叉的最终期限;
  • 2016.07.21    超过85%的算力支持硬分叉,以太坊硬分叉成功。

2 以太坊硬分叉

2.1 介绍

(待完善)

2.2 与 The DAO 相关的硬分叉

1、硬分叉

北京时间 2016年07月20日 晚9:30  左右,随着币网以太坊矿池挖出了第19200个区块,以太坊的硬分叉出现;随后,硬分叉后的第一个区块也在14秒后被币网挖出,标志着硬分叉的成功;

2、交易回滚

在第19200个区块进行硬分叉,回滚所有以太币,交易回滚后,此前的交易自动作废,交易被强制恢复到了原来的状态,由黑客转移的价值四千万美元的以太币被成功转移到了新地址,即:经过分叉回滚,黑客盗走的以太币被成功“召唤”回来;

3、部署新的退币合约

建立了“退币合约”,硬分叉之后的以太坊执行这个新的合约,以 100 DAO Token == 1 Ether 的兑换比例兑换回以太币,从而使得 The DAO 投资者可以从 The DAO 项目中取出资金;

The DAO 的原始监管人团队已经辞职,由新上任的团队对接下来 DAO Token 的提取和分发进行监管,并在分发完成后自动解散 The DAO 项目。

4、以太坊经典(Ethereum Classic, ETC) VS 以太坊(Ethereum, ETH)

然而,并不是所有人都支持这次硬分叉。

硬分叉之后形成了两条链:

1、原链——以太坊经典(Ethereum Classic, ETC),对这次回滚不承认的成员继续按照原始链走;

2、新的分叉链——以太坊(Ethereum, ETH),承认本次回滚的成员按照新的分叉链走。

3 The DAO项目相关地址

The DAO: 0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413

The DAO、its extraBalance(0x807640a13483f8ac783c557fcdf27be11ea4ac7a)、all children of the DAO creator(0x4a57450c7014e4ae985403536074abe582adfc8)和 the extrabalance of each child 都被编码在区块1880000的一个 List L 中,L的内容为:https://gist.github.com/gavofyork/af747a034fbee2920f862ed352d32347

从区块1920000开始,L中所有账户的以太币都将转移到合约账户C(0xBf4eD7b27F1d666546E30D74d50d173d20bca754)中,合约C就是硬分叉之后建立的“退币合约”,从这个合约中,DAO代币持有者可以以 1 ETH == 100 DAO Token 的比率提取以太币。

黑客的子合约 The DarkDAO 地址:0x304a554a310C7e546dfe434669C62820b7D83490

参考:

https://www.cryptocompare.com/coins/guides/the-dao-the-hack-the-soft-fork-and-the-hard-fork

https://blog.ethereum.org/2016/07/15/to-fork-or-not-to-fork/