轉髮原文標題:全麵解析 ERC-4626 與 DeFi
ERC-4626 是一個使用單一基礎 ERC-20 的代幣化金庫。
Tokenized Vaults with a single underlying EIP-20 token.
首先,它是一個基於 ERC-20 的提案,併與之完全兼容。
其次,理解金庫(vault)的概念,它不是國庫(treasury)。現在市麵上的國庫基本上就是一個合約錢包,大多以 Gnosis Safe 爲主,主要提供安全的資金出入功能。但是對於一個組織來説,除了資金出入外,還可以讓資金流動産生收益。
該提案産生的動機:代幣化的金庫缺乏標準,導緻市場上的很多金庫實現細節不一樣,比如借貸市場、聚合器、生息代幣等。這使得在協議層麵的聚合器和插件集成工作變得睏難,容易出錯和浪費開髮資源。
該提案當前狀態:Final,意味著是相對比較穩定的標準了。
遵循 ERC-4626 的代幣必鬚完全實現 ERC-20,用來錶示份額(shares)。下麵是幾個簡單的概念。
滑點是指交易的預期價格與實際執行價格之間的差異。當下單交易與執行交易之間存在延遲,交易的資産價格髮生變化時,滑點就會出現。
例如,你在 AMM 池中髮現有 20 個 ETH 和 80 個 USDT,那麽你預期的 ETH 價格爲 4 USDT/ETH。然而,如果你計畫花費 20 個 USDT 在池子裡進行 swap,最終隻會得到 4 個 ETH,而不是預期的 5 個 ETH,這意味著你遭受了 1 USDT/ETH 的滑點損失。你的實際購買價格將是 5 USDT,而不是預期的 4 USDT。
滑點在快速變化的市場或高波動性資産以及流動性受限的長尾資産中尤其常見。無論如何,它對交易錶現有重大影響,在下單交易時考慮滑點非常重要。
合約代碼來自 OpenZeppelin 智能合約代碼庫:
ERC-4626 合約繼承自 ERC-20,這部分就不概述了,它本身也是一個抽象合約,該合約必鬚實現的接口如下:
接口還是挺豐富的,大多比較簡單,可以分爲 read 和 write 2 大類。
寫數據接口主要是 deposit、mint、withdraw、redeem。
實際上由於滑點的存在,使用 preview 方法查看預計的數字,可能是不準確的,也是業界常見問題,可能會産生一些安全問題,後麵會講到。
前麵講的幾個 preview 方法,和公開的 convertToShares,convertToAssets,實際上內部都是調用了 _convertToShares、_convertToAssets 方法。
這 2 個核心方法就是計算資産和份額的比例關繫的,這裡麵涉及到的變量有份額供應量、當前總資産、小數點位數、小數點取整方式。
以上是 ERC-4626 抽象合約的基本實現,實際的金庫合約要比它覆雜的多。
對於金庫合約,有 2 個比較重要的功能實現,一個是存取功能,assets 和 shares 的換算;另一個是穫得收益的方式。下麵我們會舉例講解。
類似其它一些熱門的 EIP,ERC-4626 也有一個專門人維護的聯盟生態(https://erc4626.info/),收集了目前市麵上已經兼容 ERC-4626 的一些借貸協議和應用,另外還有新聞、開源庫、安全等信息。如果你的金庫適配了 ERC-4626,也可以在上麵提交申請。
下麵我們分析一個應用例子,Aladdin DAO 的 AladdinCRVV2 金庫(https://concentrator.aladdin.club/vaults/)。Aladdin DAO 有很多個金庫合約,這隻是其中一個比較活躍的。
該金庫通過質押 cvxCRV 代幣,來穫得收益。
(https://etherscan.io/address/0x2b95A1Dcc3D405535f9ed33c219ab38E8d7e0884),通過github 代碼可以查到之前版本是不兼容 ERC-4626 的
(https://etherscan.io/address/0x62B9c7356A2Dc64a1969e19C23e4f579F9810Aa7)。cvxCRV 可以在 Curve 旗下的 Convex 上通過質押 CVX 穫得,也可以使用 CRV 轉換 cvxCRV(過程不可逆)
以上就是對該金庫合約的基本解析,功能還是比較豐富的,它的本質就是 assets 質押生息,爲什麽要這樣設計呢,主要還在在於 cvxCrvStaking 合約的設計,質押 cvxCRV 收益描述“By staking cvxCRV, you’re earning the usual rewards from veCRV (3crv governance fee distribution from Curve + any airdrop), plus a share of 10% of the Convex LPs’ boosted CRV earnings, and CVX tokens on top of that.”,而一起通過金庫質押的代幣數量越多時,穫得的收益也越大。
對於 ERC-4626 金庫來説,最主要的安全問題在於防通貨膨脹攻擊(Inflation attack)。
當用戶存入代幣時,根據份額計算公式(shares = assets * totalSupply / totalAssets),計算結果是有小數點的,一般是曏下取整。
通過下圖可以看到,在用戶存入 500 代幣的資産時,小數取整所損失的資産取決於彙率(每股和代幣資産對應關繫)。如果彙率是橙色曲線的彙率,我們得到的不到 1 股,損失了100%。但是,如果彙率是緑色曲線的彙率,得到 5000 股,四捨五入損失限製在最多 0.02%。
那如果我們專註於將損失限製在最大 0.5%,我們需要穫得至少 200 股。緑色彙率隻需要 20 個代幣,但橙色彙率需要 200000 個代幣。
通過幾上例子可以分析出,藍色和緑色曲線對比黃色和橙色曲線更安全,是設計更加安全的金庫。
所以通貨膨脹攻擊的主要方式就是,通過某些手段將利率曲線曏右移動,讓少量存款者損失份額,達到攻擊目的。
Inflation attack 主要是通過捐贈(donate)。
抵禦攻擊的措施有 3 種:
具體實現就是重寫由 OpenZeppelin 提供的標準庫代碼 _decimalsOffset() 方法,這種方式即不用設置滑點,也不用註入足夠初始資金,是非常好的抵禦通脹攻擊方式。
RC-4626 作爲一個比較基礎的金庫提案,不可能滿足所有需求,有一些提案也對止做出了擴展,比如 ERC-7535、EIP-7540。
前麵提到 ERC-4626 隻能使用 ERC-20 作爲基礎資産,這個提案主要是將原生資産(native asset)也可以作爲基礎資産(underlying asset),比如 ETH 在金庫中使用。
這個對 ERC-4626 的擴展引入了對異步存款和贖回過程(稱爲”請求”)的支持。它包括了用於啟動和檢查這些請求狀態的新方法。現有的從 ERC-4626 中使用的方法,如存款、鑄幣、提取和贖回,被用於執行可認領的請求。關於是否添加存款、贖回或兩者的異步流程,由實現者自行決定。
潛在用例:
以上,就是關於 ERC-4626 相關的全部解析。
因爲歷史原因,當前市麵上有很多金庫併不遵循 ERC-4626的,依然在運作,比如 dForce,但沒法應用更廣。也有一些金庫已經升級爲遵循 ERC-4626,比如 Aladdin DAO 的一些合約(https://github.com/AladdinDAO/deployments/blob/main/deployments.mainnet.md)。
金庫應用除了質押生息外,還可以將 shares 做爲抵押物借出或者再質押,從而産生收益。另外通過金庫來募資也是一個比較好的應用場景,它的一些基礎功能就可以提供很好的支持。
該提案的推出,本質是爲了提升金庫與 DeFi 生態集成效率,減少開髮成本。而金庫本身的作用,隨著 DeFi 市場的增長,還有更多挖掘的空間。
轉髮原文標題:全麵解析 ERC-4626 與 DeFi
ERC-4626 是一個使用單一基礎 ERC-20 的代幣化金庫。
Tokenized Vaults with a single underlying EIP-20 token.
首先,它是一個基於 ERC-20 的提案,併與之完全兼容。
其次,理解金庫(vault)的概念,它不是國庫(treasury)。現在市麵上的國庫基本上就是一個合約錢包,大多以 Gnosis Safe 爲主,主要提供安全的資金出入功能。但是對於一個組織來説,除了資金出入外,還可以讓資金流動産生收益。
該提案産生的動機:代幣化的金庫缺乏標準,導緻市場上的很多金庫實現細節不一樣,比如借貸市場、聚合器、生息代幣等。這使得在協議層麵的聚合器和插件集成工作變得睏難,容易出錯和浪費開髮資源。
該提案當前狀態:Final,意味著是相對比較穩定的標準了。
遵循 ERC-4626 的代幣必鬚完全實現 ERC-20,用來錶示份額(shares)。下麵是幾個簡單的概念。
滑點是指交易的預期價格與實際執行價格之間的差異。當下單交易與執行交易之間存在延遲,交易的資産價格髮生變化時,滑點就會出現。
例如,你在 AMM 池中髮現有 20 個 ETH 和 80 個 USDT,那麽你預期的 ETH 價格爲 4 USDT/ETH。然而,如果你計畫花費 20 個 USDT 在池子裡進行 swap,最終隻會得到 4 個 ETH,而不是預期的 5 個 ETH,這意味著你遭受了 1 USDT/ETH 的滑點損失。你的實際購買價格將是 5 USDT,而不是預期的 4 USDT。
滑點在快速變化的市場或高波動性資産以及流動性受限的長尾資産中尤其常見。無論如何,它對交易錶現有重大影響,在下單交易時考慮滑點非常重要。
合約代碼來自 OpenZeppelin 智能合約代碼庫:
ERC-4626 合約繼承自 ERC-20,這部分就不概述了,它本身也是一個抽象合約,該合約必鬚實現的接口如下:
接口還是挺豐富的,大多比較簡單,可以分爲 read 和 write 2 大類。
寫數據接口主要是 deposit、mint、withdraw、redeem。
實際上由於滑點的存在,使用 preview 方法查看預計的數字,可能是不準確的,也是業界常見問題,可能會産生一些安全問題,後麵會講到。
前麵講的幾個 preview 方法,和公開的 convertToShares,convertToAssets,實際上內部都是調用了 _convertToShares、_convertToAssets 方法。
這 2 個核心方法就是計算資産和份額的比例關繫的,這裡麵涉及到的變量有份額供應量、當前總資産、小數點位數、小數點取整方式。
以上是 ERC-4626 抽象合約的基本實現,實際的金庫合約要比它覆雜的多。
對於金庫合約,有 2 個比較重要的功能實現,一個是存取功能,assets 和 shares 的換算;另一個是穫得收益的方式。下麵我們會舉例講解。
類似其它一些熱門的 EIP,ERC-4626 也有一個專門人維護的聯盟生態(https://erc4626.info/),收集了目前市麵上已經兼容 ERC-4626 的一些借貸協議和應用,另外還有新聞、開源庫、安全等信息。如果你的金庫適配了 ERC-4626,也可以在上麵提交申請。
下麵我們分析一個應用例子,Aladdin DAO 的 AladdinCRVV2 金庫(https://concentrator.aladdin.club/vaults/)。Aladdin DAO 有很多個金庫合約,這隻是其中一個比較活躍的。
該金庫通過質押 cvxCRV 代幣,來穫得收益。
(https://etherscan.io/address/0x2b95A1Dcc3D405535f9ed33c219ab38E8d7e0884),通過github 代碼可以查到之前版本是不兼容 ERC-4626 的
(https://etherscan.io/address/0x62B9c7356A2Dc64a1969e19C23e4f579F9810Aa7)。cvxCRV 可以在 Curve 旗下的 Convex 上通過質押 CVX 穫得,也可以使用 CRV 轉換 cvxCRV(過程不可逆)
以上就是對該金庫合約的基本解析,功能還是比較豐富的,它的本質就是 assets 質押生息,爲什麽要這樣設計呢,主要還在在於 cvxCrvStaking 合約的設計,質押 cvxCRV 收益描述“By staking cvxCRV, you’re earning the usual rewards from veCRV (3crv governance fee distribution from Curve + any airdrop), plus a share of 10% of the Convex LPs’ boosted CRV earnings, and CVX tokens on top of that.”,而一起通過金庫質押的代幣數量越多時,穫得的收益也越大。
對於 ERC-4626 金庫來説,最主要的安全問題在於防通貨膨脹攻擊(Inflation attack)。
當用戶存入代幣時,根據份額計算公式(shares = assets * totalSupply / totalAssets),計算結果是有小數點的,一般是曏下取整。
通過下圖可以看到,在用戶存入 500 代幣的資産時,小數取整所損失的資産取決於彙率(每股和代幣資産對應關繫)。如果彙率是橙色曲線的彙率,我們得到的不到 1 股,損失了100%。但是,如果彙率是緑色曲線的彙率,得到 5000 股,四捨五入損失限製在最多 0.02%。
那如果我們專註於將損失限製在最大 0.5%,我們需要穫得至少 200 股。緑色彙率隻需要 20 個代幣,但橙色彙率需要 200000 個代幣。
通過幾上例子可以分析出,藍色和緑色曲線對比黃色和橙色曲線更安全,是設計更加安全的金庫。
所以通貨膨脹攻擊的主要方式就是,通過某些手段將利率曲線曏右移動,讓少量存款者損失份額,達到攻擊目的。
Inflation attack 主要是通過捐贈(donate)。
抵禦攻擊的措施有 3 種:
具體實現就是重寫由 OpenZeppelin 提供的標準庫代碼 _decimalsOffset() 方法,這種方式即不用設置滑點,也不用註入足夠初始資金,是非常好的抵禦通脹攻擊方式。
RC-4626 作爲一個比較基礎的金庫提案,不可能滿足所有需求,有一些提案也對止做出了擴展,比如 ERC-7535、EIP-7540。
前麵提到 ERC-4626 隻能使用 ERC-20 作爲基礎資産,這個提案主要是將原生資産(native asset)也可以作爲基礎資産(underlying asset),比如 ETH 在金庫中使用。
這個對 ERC-4626 的擴展引入了對異步存款和贖回過程(稱爲”請求”)的支持。它包括了用於啟動和檢查這些請求狀態的新方法。現有的從 ERC-4626 中使用的方法,如存款、鑄幣、提取和贖回,被用於執行可認領的請求。關於是否添加存款、贖回或兩者的異步流程,由實現者自行決定。
潛在用例:
以上,就是關於 ERC-4626 相關的全部解析。
因爲歷史原因,當前市麵上有很多金庫併不遵循 ERC-4626的,依然在運作,比如 dForce,但沒法應用更廣。也有一些金庫已經升級爲遵循 ERC-4626,比如 Aladdin DAO 的一些合約(https://github.com/AladdinDAO/deployments/blob/main/deployments.mainnet.md)。
金庫應用除了質押生息外,還可以將 shares 做爲抵押物借出或者再質押,從而産生收益。另外通過金庫來募資也是一個比較好的應用場景,它的一些基礎功能就可以提供很好的支持。
該提案的推出,本質是爲了提升金庫與 DeFi 生態集成效率,減少開髮成本。而金庫本身的作用,隨著 DeFi 市場的增長,還有更多挖掘的空間。