天天看點

智能合約 | 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/

繼續閱讀