在DeFi 應用程序Fei Protocol 的聯合創始人Joey Santoro 的領導下,最近提出了一個EIP,用於為代幣化保險庫創建新的代幣標準。它是EIP-4626[1]。
儘管它剛剛在2021 年12 月提出,但很快就獲得了以太坊社區的極大關注和大力支持,並據報導已被包括Tribe DAO [3] 和Rari Capital DAO [4] 在內的一些DAO [2] 採用。
該EIP 旨在解決代幣化保險庫現有實現中的一個痛點,即“代幣化保險庫缺乏標準化,導致實現細節多樣化”[1]。這個痛點使得標記化保險庫的集成“在聚合器或插件層對於需要符合許多標準的協議很困難,並迫使每個協議實現自己的適配器,這些適配器容易出錯並浪費開發資源”[1]。
該EIP 基於ERC-20[5],這是以太坊DeFi 應用程序中廣泛採用的標準,存在相當大的安全問題或風險,需要智能合約開發人員了解。
作為一家區塊鏈安全公司,Fairyproof 的研究團隊對ERC-20 實施的問題或風險是否也可能引入ERC-4626 非常感興趣。我們研究了這個EIP,探索了可能的安全檢查點,並想分享一些關於這些檢查點的想法。
此EIP 要求代幣化保險庫必須實現ERC-20 來表示股份,並添加新接口以將股份轉換為代幣或將代幣轉換為可查看函數和傳輸函數中的股份。而這些新增的功能引入了需要我們注意的安全注意事項。
以下是基於此EIP 實施標記化保管庫時的安全注意事項列表:
-
惡意功能的實施
考慮一個符合此EIP 定義的接口但不符合規範的保險庫實現。這種情況經常發生在使用代理機制的rug-pulls 中,並且代理接口似乎符合令牌標準,但實際上,真正的實現是惡意合約。
因此,審計人員或用戶需要在採取進一步行動之前仔細檢查其實際實施情況。
-
支持EOA 賬戶
EIP 指出“如果實施者打算直接支持EOA 賬戶訪問,他們應該考慮添加額外的存款/鑄幣/提款/贖回函數調用,以適應滑點損失或意外的存款/提款限制”[1]。
除了滑點損失和意外的存款/取款限制外,還有另一種常見的情況:代幣在轉賬時被燒毀。一些DeFi 應用程序使用這種機制來減少其代幣的流通供應量並抬高代幣的價格。
我們建議ERC-4626 保險庫不允許將此類代幣存入保險庫。
-
使用接口作為預言機
EIP 聲明“預覽方法返回的值盡可能接近精確。出於這個原因,它們可以通過改變鏈上條件來操縱,並且並不總是可以安全地用作價格預言機。” [1],並且“將轉換方法實施為使用時間加權平均價格在資產和股票之間轉換是正確的。” [1]
加密空間中預言機最流行的用例是使用它們來獲取代幣的價格,但智能合約需要的任何信息都可能依賴於預言機。因此,返回信息的預覽方法也可以用作預言機。儘管這似乎沒有重要的用例,但就目前而言,這個列出的潛在問題需要我們注意。減輕鏈上信息被操縱風險的一種流行方法是使用Uniswap [6] 引入的時間加權平均算法。
-
舍入問題
Vault 實施者需要仔細處理計算Vault 份額或代幣數量以及將份額轉換為資產或將資產轉換為份額的接口的捨入方向。
規范建議,在計算向用戶發行的股份的標的代幣數量時,他/她為他/她返回的一定數量的股份提供或發送給他/她的標的代幣的數量,它應該向下舍入。
在計算用戶必須提供以接收特定數量的基礎代幣的數量或用戶必須提供以接收特定數量的股份的基礎代幣數量時,它應該四捨五入。
在計算converTo 函數中的股份數量或基礎令牌時,規範要求保險庫實施者向下舍入以確保所有ERC-4626 保險庫實施的一致性。
這些建議和要求確保始終有足夠數量的底層代幣用於轉移。這是審計人員在審計基於此EIP 的保險庫實施時需要注意的事項。
– 代幣兼容性問題
該EIP 特別提到了ERC-20 代幣標準。它是實現可替代代幣的最廣泛採用的代幣標準。然而,在我們過去的審計經驗中,我們也審計了一些基於替代以太坊代幣標準(如EIP-777[7])實施的可替代代幣。
這些替代代幣標準與ERC-20 代幣兼容,但存在一些差異。
讓我們以EIP-777 令牌標準為例。令牌標准允許實現者使用註冊表來查找接口。如果註冊表有錯誤,任何依賴它的東西都會產生不利影響。此功能引入的一個常見問題是重入風險 [8]。
因此,可能存在兩種我們需要注意的場景。
第一種情況是基於ERC-20 兼容但替代標準實施的保險庫。第二個是ERC-4626 值,它與與ERC-20 兼容但基於替代令牌標準實施的令牌交互。
在這兩種情況下,替代代幣標準都可能帶來問題或風險。並且應仔細審查和審核基於替代標準的實施。
結束語:
在本文中,我們列出了在審核基於ERC-4626 的保險庫時的一些可能的安全注意事項。其中一些考慮因素已在EIP 中提及,其他考慮因素是根據我們的審計經驗列出的。
我們希望我們的初步建議能給實施者、用戶和審計員一些關於如何安全和安全地處理ERC-4626 保險庫的粗略想法。
參考:
[1] EIP-4626:代幣化保險庫標準,https ://eips.ethereum.org/EIPS/eip-4626 2021 年12 月22 日
[2] 去中心化自治組織,https://ethereum.org/en/dao/
[3] 部落,https://docs.fei.money/governance/tribe
[4] 瑞瑞資本,http: //rari.capital/
[5] ERC-20 代幣標準,https://ethereum.org/en/developers/docs/standards/tokens/erc-20/
[6] Uniswap,https: //uniswap.org/
[7] EIP-777:代幣標準,https ://eips.ethereum.org/EIPS/eip-777
[8] Samreen NF, Alalfi M H. 以太坊智能合約中的重入漏洞識別[C]//2020 IEEE 面向區塊鏈的軟件工程國際研討會(IWBOSE)。 IEEE,2020:22-29。