BTC
ETH
HTX
SOL
BNB
查看行情
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt

一文讀懂ERC-4626:DeFi代幣化保險庫的新標準

深潮TechFlow
特邀专栏作者
2023-06-14 09:20
本文約2936字,閱讀全文需要約5分鐘
ERC-4626 是一種標準,它改進了收益型保險庫的技術參數,為代表單個底層ERC-20 代幣份額的收益保險庫提供標準API。
AI總結
展開
ERC-4626 是一種標準,它改進了收益型保險庫的技術參數,為代表單個底層ERC-20 代幣份額的收益保險庫提供標準API。

原文編譯:深潮TechFlow

原文編譯:深潮TechFlow

原文編譯:深潮TechFlow

在引入ERC-4626 之前,每個保險庫都有其各自的規範和實現細節。這使得集成變得困難、容易出錯且浪費資源。

一級標題

一級標題

一級標題

什麼是ERC-4626 ?

ERC-4626 是一種標準,它改進了收益型保險庫的技術參數。它為代表單個底層ERC-20 代幣份額的收益保險庫提供標準API。

然而,沒有適當的適應性或標準化的可組合性會帶來挑戰。它不僅使開發人員難以遵守ERC-20 等行業標準,而且還會使新開發人員感到困惑。如果沒有適當的適應性或標準化,就很難審查新的變化並驗證集成的實施細節。

一級標題

一級標題

二級標題

二級標題

Rari Capital 事件

二級標題

Rari Capital 事件

Rari Capital 被盜取了價值約1100 萬美元的代幣,這相當於Rari Capital Ethereum 池中所有用戶資金的60 %。

總的來說,Rari Capital 被黑客攻擊是由於不安全的跨協議實現。其Ethereum 池通過將ETH 存入Alpha Finance 的ibETH 代幣合約作為產出策略。這種特定策略通過某些合約及公式(具體如ibETH.totalETH / ibETH.totalSupply 函數)跟踪其ibETH/ETH 匯率的價值,在此攻擊場景中可能會有錯誤的輸出,例如在調用ibETH.work( )函數時,債務價值可能會被人為地膨脹。

攻擊者只需重複調用RariFundManager 合約中的deposit 和withdraw 函數,就可以耗盡Rari Fund Manager。 deposit 和withdraw 函數需要獲取池子的餘額以計算要發行給調用者的REPT 代幣數量,或要發放給調用者的ETH 金額,這個操作會分別調用Alpha 池的getBalance 函數,調用ibETH 合約及其totalETH 函數。 Rari 不知道操縱此函數的可能性。

二級標題

二級標題

Cream Finance 事件

二級標題

這裡的關鍵教訓是一個強大且無法操縱的價格預言機對於DeFi 協議的穩定性至關重要。按時間加權平均價格(TWAP)預言機可以幫助防止此類黑客攻擊,因為他們對突然的價格操縱更具有韌性。

一級標題

一級標題

一級標題

ERC-4626 中的潛在安全風險

使用新的協議總有一些取捨。對於代幣化的保險庫,將其集成到智能合約中可能存在潛在問題,需要特別注意。

管理feeOnTransfer 代幣

如果保險庫旨在支持feeOnTransfer 代幣,請在轉移資產時檢查保險庫中的金額和份額是否處於預期範圍內。

適當使用decimals 變量

儘管convertTo 函數應該無需使用EIP-4626 保管庫的decimals 變量,但仍強烈建議在可行的情況下鏡像底層Token 的decimals 。這種做法有助於消除潛在的混淆來源,並簡化各種前端和鏈下用戶的集成。

  • 四捨五入

  • 根據規範,保險庫實現者應意識到在不同的可變和視圖方法中需要特定且相反的捨入方向,因為在計算過程中更安全的做法是優先考慮保險庫本身而不是其用戶:

如果它正在計算要發行給用戶的股票數量,以獲得他們提供的某些基礎代幣的金額,或者它正在操作將特定份額的基礎代幣轉移給用戶,則應向下舍入。

如果它正在計算用戶必須提供多少份額才能獲得一定數量的基礎代幣,或者正在計算用戶必須提供多少基礎代幣才能獲得一定數量的份額,則應向上舍入。

其中首選舍入方向將是模棱兩可的是convertTo 函數。為確保在所有EIP-4626 保險庫實現中保持一致性,指定這些功能必須始終向下舍入。集成者可以自己模仿舍入方向向上的版本,例如通過添加一個Wei 到結果來實現。

一個用戶通過贖回他們在保險庫中的股份(previewRedeem)來獲得基礎資產的數量,可能會與發行相同數量的股份(previewMint)時需要付出的數量有很大差異。這些差異可能很小(例如由於舍入誤差),也可能很大(例如保險庫實現了提款或存款費用)。因此,集成者應該注意使用最適合他們用例的預覽函數,並且永遠不要假設它們是可互換的。

覆蓋核心功能

為了實現或擴展預期的功能,建議使用現有的掛鉤而不是更改核心功能。這種做法可確保更易於管理的跟踪,以進行有效的代碼測試和審核。

零份額

ERC-4626 的原始規範沒有概述如何處理保險庫中沒有份額的極端情況,以及保險庫是否應該像正常情況一樣工作或者回滾。這可能會成為混淆和錯誤的潛在來源。

保險庫作為價格預言機

關於預言機價格操縱攻擊的風險,這些preview 方法返回的值盡可能接近準確。因此,它們可以通過更改鏈上條件進行操作,並且不總是安全用作價格預言機。 ERC-4626 規範包括允許不精確的convert 方法和totalAssets 方法,因此可以實現為強大的價格預言機。例如,在資產和股份之間轉換時,使用時間加權平均價格來實現convert 方法是正確的。

具體實施問題

在進一步集成之前,集成者必須審查任何代幣化保險庫的實現,因為可能存在惡意實現,看起來符合接口規範,但其核心函數由完全不同的設計規範組成。

EOA 直接訪問

如果要直接訪問一個保險庫,則其實現需要具備可用於容納滑點損失或意外存款/提款限制的功能。與智能合約不同,EOA 沒有交易回滾的故障保護機制,如果在調用核心函數時沒有實現精確輸出,則無法回退。

擴展保險庫

隨著越來越多的參與者開始採用ERC-4626 標準,我們將看到為該標準實施的更多擴展。例如,Superform 開發了一個試驗性的Multi 保險庫擴展,支持在一個保險庫合約內使用不同的計算。自然而然,實現越偏離原始標準,引入新漏洞的可能性就越高。開發人員和審計人員可以根據用例找到自己的最佳選擇,以確定實際風險值。


DeFi
ETH
歡迎加入Odaily官方社群