從 MakerDAO 的合約代碼層面,分析 0 DAI 就能買到以太坊根本原因。

原文標題:《0 美元就能買到以太坊?分析 MakerDAO 的清算機制缺陷及改進思路》
撰文:原始大胖魚

2020 年 3 月 12 日,由於 COVID-2019 的全球爆發,引發了加密貨幣市場的一系列黑天鵝事件,整個市場全線崩潰。同時,以太坊 ETH 的價格暴跌,MakerDAO 的大量抵押債倉跌破清算門檻,引發了清算程序執行。

根據 MakerDAO 的系統設置,被清算的抵押物相比市場價存在折扣,因此能夠吸引清算人蔘與其中,參與拍賣的清算人持續叫價,起拍價爲 0 DAI,最終獲勝者至少可以獲得 3% 的折扣。而實際情況裏,往往抵押物的最終清算價差會大於 3%,清算人的獲益會更高。

也就是說,假設一共有市場價值 1500 DAI 的抵押物進行拍賣,對於清算人而言,最差情況下,參與者最高出價到 1455 DAI 就可以拍得這批抵押物(不計算其他費用)。而最好情況下,則有可能以 0 DAI 獲得拍賣的抵押物。

只存在於理論裏的 0 DAI 拍賣,在昨日實實在在的發生了。

根據媒體報道,由於以太坊網絡 gas 費用劇增,導致 MakerDAO 的清算過程完全缺乏競爭,原本應該參與到清算過程中的清算機器人(Keeperbot)因爲設置了較低的 gas 值,導致出價受阻,一位清算人(Keeper)在沒有競爭者的情況下,以 0 DAI 的出價贏得了拍賣。

筆者在此從 MakerDAO 的合約代碼層面,分析 0 DAI 事件的根本原因。

對於 MakerDAO 系統而言,當產生清算時,意味着系統會有潛在的債務損失,因此,爲了避免損失,MakerDAO 通過一種拍賣機制來對 CDP 持有者進行抵押物的清算。

在拍賣開始之前,首先要確定的,是被清算的抵押物數量以及相應的債務,這依賴於一個 MarkerDAO 系統中事先預設的分割值 lump。也就是說,待清算抵押債倉 CDP 內的抵押物數量會被分割成爲 m 批,

    m=⌊n/lump⌋+1

對於 ETH-A,在當前的 MakerDAO 合約部署配置文件裏,lump 被設置爲 50:

技術分析 MakerDAO 的 0 DAI 事件與清算機制缺陷

所以實際被清算的數量 lot (lot≤lump) 被計算爲

    MIN(用戶 CDP 抵押物總量 , 50)

在確定了被清算的抵押物數量之後 , 緊接着需要確定這筆抵押物所對應的的債務數量 art。

MakerDAO 的算法是根據 lot 在用戶 CDP 中抵押的 ETH-A 總量確定其佔比,然後該 CDP 內所有 ETH-A 所對應的總債務的同等佔比值即爲相應的債務值,在代碼裏表示爲

    mul(lot, art) / ink

但是 art 僅是單純的抵押物與債務的對應值 , 並沒有考慮利息,所以 , 如果這部分抵押物被清算,那同樣也要歸還相應的債務,因此實際這部分抵押物對應的債務爲 art * rate;

MakerDAO 的清算罰金機制裏,目前罰金的比例被配置爲 13%,所以實際要被拍賣的目標金額 tab 爲

    tab: rmul(mul(art, rate), ilks[ilk].chop)

綜上 , 發起一筆抵押物拍賣 (flip.kick) 時,抵押物的數量爲 lot, 預期拍賣的目標金額爲 tab。

MakerDAO 將抵押物拍賣設計爲二階段拍賣,其中第一階段是一個「試價」的過程,就是參與者正向加價,直到出價滿足 tab。基於此設計,MakerDAO 將拍賣起始價格設置爲 0。理想情況下,參與者會衡量清算物 lot 的市場價值,以一個較爲合理的價格進行叫價。

技術分析 MakerDAO 的 0 DAI 事件與清算機制缺陷

重點來了 , 起拍價爲 0 其實是做了一個假設:一定會有足夠數量的 Keeper 參與到拍賣中。

很遺憾的是,當以太坊網絡劇烈擁堵時,普通 Keeper 在面臨的高昂的 gas 費時很可能沒有動力參與到拍賣中去。另一方面,善良的 Keeper bot 也很可能因爲其在 gas 升高時沒有及時調整 gas 上限 , 競拍交易遲遲不被確認而無法維持拍賣系統的正常運作。

因此,惡意競拍者就可以出價 0 DAI 而獲勝。

讓我們跟蹤一下 0 DAI 是如何叫價成功的,下面是競拍流程的代碼:

技術分析 MakerDAO 的 0 DAI 事件與清算機制缺陷

前三個 require 是檢查時間和系統狀態的,這都是可以通過的;

第四個 require 檢測的是第一階段的出價必須固定要競拍的抵押物數量 , 也就是上面發起拍賣時計算的 lot;

第五個 require 檢測的是第一階段的出價最大隻能到 tab,相當於債務拍賣只賣出預期的債務數量;

第六個 require 檢測的是當前出價必須大於上一次出價;

重點是第七個 require,檢測的是當前出價必須大於一定的增價幅度 (beg,比如說 5%)。但是上面筆者提到過,發起拍賣時 bid 的值爲 0,

    bids[id].bid == 0

因此,如果惡意 Keeper 出價爲 0,即 bid == 0,require 表達式會變成

    require(0 * ONE >= beg * 0)

攻擊者因此毫無阻礙的以 0 DAI 叫價成功。

等到競拍週期結束以後,如果沒有其他人跟惡意 Keeper 競價,惡意 Keeper 就可以 0 DAI 成交。

到此爲止,問題產生的核心就從代碼層面分析完了,MakerDAO 系統拍賣機制的其他細節可以 參考這裏

MakerDAO 的清算拍賣設計的目的,是儘可能的以最少的抵押物回收最大的 DAI,這一機制在正常情況下是可以成功運作的。但是當以太坊系統極其擁堵的時候,或者更極端一點來說,只要競拍的參與度不足,就很容易被惡意 Keeper 通過極低報價獲得拍賣物。

技術分析 MakerDAO 的 0 DAI 事件與清算機制缺陷

MakerDAO 作爲如今 DeFi 生態的核心項目之一,在極端的市場行情下出了這起嚴重事故,造成了 400 萬美元的系統債務,在不得已的情況下,系統啓動了債務拍賣,將釋放 MKR 代幣進行拍賣,以彌補整個系統的債務損失,而這些損失,需要全體 MKR 的持幣者承擔。

根據墨菲定律,當一個災難具備理論上發生的可能性時,無論其概率有多小,最終都是有可能發生的,MakerDAO 在清算機制上的設計過於簡單,過於依賴鏈上操作,最終造成了這次的債務危機。

可惜了一直相信 MakerDAO,相信 DeFi 的核心用戶。DeFi 的高速發展過程中留下了諸多隱患,從 bZx 閃電貸事件,到 Curve 合約攻擊事件,再到 MakerDAO 的 0 DAI 清算危機,大家用自己的真金白銀,爲有漏洞的產品設計買了單,DeFi 在其尚且年幼的階段,就承載了過多的價值和風險,不禁令人爲之惋惜和捏一把汗。

下一個爆雷的 DeFi 應用,會是哪一個?受到的損失,又會有多少?

MakerDAO 社區目前已經緊急討論了針對清算機制的改進措施,目前,社區提出了一個可能的改進方案——MakerDAO Keeper Pool,其要點主要有:

  1. 啓動基於 Web 的 Keeper,讓用戶能夠通過瀏覽器的界面操作 Keeper 參與清算,降低清算的參與難度;
  2. 將 Keeper 的代碼和模板開源,並且降低部署難度;
  3. Non-custodial MakerDAO Keeper Pool,建立類似於第三方 Keeper 流動性池的設施,通過 Keeper 的收益分配,吸引外部資金注入。

筆者在此無意評價該方案的優劣,只是,由某種理念或優勢成長起來的事物,最終往往被其理念 / 優勢所困而無法獲得持續性的發展,這種現象在自然界的發展過程中已經被無數次的證明。歷史上,武裝到牙齒的恐龍,曾經在地球盛極一時,可最終卻因爲身體過度特化,不適應環境的劇變而滅絕。

DeFi,受益於去中心化這一理念,諸多項目獲得了資金和市場的廣泛支持,最近一段時期,獲得百萬美元甚至千萬美元級別融資的 DeFi 項目比比皆是。

然而,福兮禍之所伏,過於強調去中心化,恰好成爲了 MakerDAO 清算危機的潛在原因。

我們不妨用另一種視角看待清算拍賣這一環節。

下圖是淘寶法拍的界面,可以看到,在中心化的服務領域,拍賣系統已經發展得足夠的完善。集中化的報價和處理系統,既能避免鏈上擁堵造成的毀滅性後果,又能夠促進更多的用戶參與到拍賣的過程中來,表面上中心化的淘寶拍賣,參與的人數和地域卻是足夠分佈式。

技術分析 MakerDAO 的 0 DAI 事件與清算機制缺陷

如果一個清算拍賣系統,把報價這一環節放到鏈外,公開透明的集中處理,而只將最終的結果提交到鏈上進行執行,就能夠徹底的避免 MakerDAO 類似的事件再次發生。

爲了能夠更加有效的開展服務,筆者認爲,要不要在中心化和去中心化之中進行適當的 trade-off,這是值得 DeFi 的從業人員進行仔細的思考和權衡的重大問題。

筆者所在的 The Force Protocol 項目,開發了去中心化穩定幣 QIAN,就針對 MakerDAO 設計當中諸多的不足之處進行了改進。

例如,在清算拍賣環節,QIAN 系統就採用了上述的集中報價機制,測試環境下能夠極大的提高清算流程的效率,近期 QIAN 穩定幣的清算拍賣系統就將與用戶見面。

此外,QIAN 還有多個獨有的技術特點與產品設計,歡迎感興趣的朋友訪問 QIAN 的 Github 代碼庫進行研究,以及到 QIAN 的官網試用產品:

QIAN 代碼庫

QIAN 官網

技術和產品的進步永不停歇,DeFi 近期經歷的各種打擊,正是整個生態走向成熟過程當中的歷練。行業經過自我反思和糾錯以後,DeFi 會發展得更好。筆者相信 DeFi 光明的未來,並與團隊爲之而不懈努力。

來源鏈接:mp.weixin.qq.com