撰文:Azuma

9 月 30 日,頂級去中心化借貸協議 Compound 於官方推特表示,在今天通過並執行「治理提案 062」後,升級合約內發錯了一個 BUG,致使 COMP 代幣出現了異常分發情況。

具體來說,漏洞出現在升級後的「Compound : Comptroller」(0x3d9819210A31b4961b30EF54bE2aeD79B9c9Cd3B)合約內,原本應通過該合約緩慢分發給所有流動性提供者(借方、貸方)的 COMP 代幣被錯誤釋放,部分用戶收到了遠高於正常數量的 COMP。

如下圖所示,僅 0x2e4ae 開頭的地址一個地址就從「Compound : Comptroller」合約內領取到了近 30,000 枚 COMP 代幣,價值約 900 萬美元。

合约

漏洞影響評估

首先需要強調的是,從漏洞影響來看,本次 Compound 事件只會直接影響到所有流動性提供者的預期收益,用戶的存款、借款及倉位情況理論上不會受到任何干擾,所以不必太過恐慌。

此外,根據 Compound 創始人 Robert Leshner 的說法,「Compound : Comptroller」合約內的 COMP 總量有限,用於挖礦分發的更多 COMP 代幣其實是存在另一個合約「Compound: Reservoir」(0x2775b1c75658Be0F640272CCb8c72ac986009e38)內,該合約仍在以每個區塊 0.5 枚 COMP 的速度正常分發。

最極端的情況下,也就是「Compound : Comptroller」合約內的代幣被提空時,將有約 28 萬枚 COMP 受到影響,總價值約 8000 萬美元。

從鏈上狀況來看,當前「Compound : Comptroller」合約內已被提走了約 17 萬 COMP,還剩下約 11 萬 COMP,而「Compound: Reservoir」合約當前的運轉並未出現異常情況,與 Leshner 的說法相吻合。

合约

事件發生原因

本次漏洞的起因在於前文提到的「治理提案 062」,該提案目的旨在調節對不同流動性提供角色的 COMP 分配比例。

依照協議運轉規則,Compound 每天會向所有流動性提供者分發 2880 枚 COMP 代幣,這些代幣的一半將分配給借方,一半將分配給貸方。然而,在日常運行之中,Compound 發現這種「一半一半」的分配方式並未充分考慮到市場需求狀況,致使了市場出現了一些畸變(比如負利率)。所以在 9 月 22 日,社群成員 Tyler Loewen 於 Compound 治理模塊內提交了改進提案,擬將這種「一半一半」的分配方式更改為依照利率狀況動態調節。

這一提案的出發點顯然是正向的,社群對於提案的態度也是以支持為主,大概一周左右,也就是今天上午,該提案順利通過並得到了執行。

遺憾的是,代碼層面的 BUG 往往就是這麼難以預料。儘管社群內其他一些成員也審查過 Tyler Loewen 的升級代碼,且所有升級合約已在以太坊 Ropsten 測試網上順利運轉了一個月的時間,但 BUG 還是出現了。

解決措施及流程

關於補救工作,Leshner 本人在推特已表示:「沒有任何管理控件或社群工具來打斷 COMP 當前的異常分發,協議層面的任何更改都需要經過為期近一周的治理程序才可生效。Compound Labs 和社群成員當前正在評估修復發行版的可能方法。」

如其所說,Compound 有著一套既有的治理流程:

  • 任何地址都可以鎖定 100 枚 COMP 來發起自治提議,當提議積攢夠至少 65,000 枚 COMP 的委託後將升級為治理提案,繼而進入社群公投環節;
  • 社群公投為期 3 天,當提案獲得了至少 40 萬枚 COMP(即 ≥4% 的供應量)支持,且多數人投票贊成之時,即可通過公投環節;
  • 通過公投的提案將排隊進入時間鎖,並在 2 天的時間鎖後正式執行。

梳理治理的整個流程,可以看到,僅公投和時間鎖環節就要求了至少 5 天的時間,算上最初的提議以及流程過渡工作所需的時間,Leshner 所說的一周並不誇張。

關於「沒有任何管理控件來打斷 COMP 當前的異常分發」這一點,事實上,Compound 協議內存在一個用於處理極端情況的監護地址(Set Pause Guardian,0xbbf3f1421d886e9b2c5d716b5192ac998af2012c),該地址此前一直由 Compound Labs 持有,但在 8 月份的「治理提案 057」中已被轉變為多簽控制。不過,該監護地址的權限暫時僅規定了可在極端情況下暫停協議的存款、借款和清算,並未明確提及是否可用於當前發生的情況。

流程至此已釐清,但該採取什麼樣的補救措施,目前沒有人給出具體方案。社群成員已在 Compound 治理論壇中建立了一個 主題討論貼文,擬通過「治理提案 063」來執行修復。從已釋放出的訊息來看,大概會先行暫停 COMP 的分發(可能通過監護地址執行?),直到可以測試完整的修復補丁。

合约

經驗教訓總結

作為踐行去中心化理治模式的先驅之一,Compound 本次事件的起因及處理在一定程度暴露了 DAO 治理的另一面。

我們的慣性認知中,去中心化往往意味著用效率來換取公平。在 DeFi 領域,當一款協議實現了完全的去中心化治理,沒有任何單一主體能夠隨意對合約進行修改時,調動社群整體來共同參與治理決策往往極大的組織精力及時間成本,這也是為什麼 Compound 需要用七天的時間來修復一個明擺著會對協議造成極大負面影響的漏洞。實際上,在一眾頂級 DeFi 協議之中,Compound 七天左右的治理週期並不算慢了,Uniswap 走完全套治理流程(民意調查——共識檢查——治理投票——時間鎖)的時間週期至少需要半個月之久。

話說回來,既然明知事後的補救需要如此高的成本,那麼在事件發生之前,是否需要對重大合約升級採取更加嚴格的評估標準呢?這是在本次事件發生後,Compound 社群所作出第一個的經驗總結——社群成員 Phaze Jeff 於治理論壇內發起了一個討論貼文,主題為「對重大代碼更改執行更嚴格的審核」。

結合具體事件來看,在社群成員 Loewen 提交「治理提案 062」後,參與測試工作的社群成員數量過少(似乎是大部分 DeFi 協議的通病),最終導致 BUG 被遺漏和「放行」。因此,Jeff 認為在協議進行重大更新時進行更細緻的監測,並鼓勵更多的成員參與到主網部署前的工作去。此外,Jeff 還提到了需要進一步明確多簽監護地址的具體權限,以允許其在出現類似緊急情況時快速因應。


(以上內容獲合作夥伴 火星財經 授權節錄及轉載,原文鏈接  | 出處:Odaily 星球日報

聲明:文章僅代表作者個人觀點意見,不代表區塊客觀點和立場,所有內容及觀點僅供參考,不構成投資建議。投資者應自行決策與交易,對投資者交易形成的直接間接損失作者及區塊客將不承擔任何責任。


熱門市場動態與新聞傳送門:

區塊客致力於發掘和整理各種與區塊鏈技術有關的內容,只要與區塊鏈或區塊客網站有關的合作和/或建議,我們都非常歡迎。請您發電郵至 [email protected] 與我們聯繫。

Avatar

區塊客