在講THE DAO之前要先提到ICO(Initial Coin Offering),概念可以大致對照股票的IPO(Initial Public Offerings)一樣也是向大眾公開募資,有個團隊製作了一種加密貨幣(當然也有可能像是lottery token這樣基於Ethereum的代幣),然後公眾可以將其他的幣(可能是法幣、乙太幣、比特幣之類的)換成該幣。
以The DAO來說,幣的功能在其中更類似股份的性質,以持有的幣多寡來決定The DAO中的決策和進行分紅等。
The DAO是目前世界眾籌金額第一的項目(雖然隨著在day8提到的出包事件這個項目早就死了),它的目的就是打算在Ethereum上打造一個沒有員工的基金公司。
這是什麼意思呢?隨著前幾天介紹Ethereum的脈絡其實很好理解:
Ethereum上可以打造智能合約,合約可以做很多事(既然是圖靈完備,理論上就是能做任何可計算的事情),像是發行自己的代幣等等,甚至以此為基礎在上面發展業務等等。
智能合約的執行需要消耗乙太幣。
於是The DAO就是提供乙太幣給那些需要資助的項目,就像我們在昨天看到的Congress的例子,自然也可以寫出嚴謹的資金運作流程程式來執行這種投資。
這樣看來有著世界第一眾籌項目的前景,The DAO這個乙太幣基金本該隨著Ethereum的發展成為其上眾項目的項目、眾代幣的代幣,前途無可限量,究竟是怎樣的攻擊事件毀了它呢?
這裡的介紹主要參考該文和其引用的兩片文章,來介紹THE DAO智能合約中的漏洞。
childDAO:是為了讓THE DAO中的持幣較少者(類似小股東),因為弱勢而權益受損時可以分離出來。
splitDAO:創建childDAO的函式,其中往下call會call到paidOut函式。
paidOut:這個函式會轉帳乙太幣到指定的地址,此時原本的DAO token還沒有被回收。
重點在於paidOut如果把乙太幣轉給一個智能合約,該合約在收到時能執行一個fallback函式,這個fallback函式再去呼叫splitDAO,而原本的DAO token回收是在paidOut之後,所以攻擊者能利用漏洞一直從The DAO中拿出乙太幣,不用付出原本的DAO token做交換。
ICO
https://en.wikipedia.org/wiki/Initial_coin_offering
The DAO
https://en.wikipedia.org/wiki/The_DAO_(organization)
从技术角度剖析针对THE DAO的攻击手法
http://ethfans.org/posts/114