深度解讀以太坊上借貸應用架構演變



比較MakerDAO、Yield、Aave、Compound 和Euler,全面概述以太坊上的關鍵抵押借款應用程式。

作者:@albertocuestacanada

翻譯:登鏈社區

深度解讀以太坊上借貸應用架構演變插图1借貸產品演變圖

借貸是基於以太坊的區塊鏈應用的基石。已經有數十億資產被借出[5],所以了解借貸的運作方式對於開發者、架構師或研究員來說至關重要。

就像程式設計範式的演進一樣,這些DeFi 應用程式具有不同的架構設計,反映了從安全性到效率極用戶體驗等不斷變化的優先順序。

本文著重於分析借貸應用程式的架構,例如MakerDAO、Compound、Aave、Euler 和Yield。我們將重點介紹關鍵的創新和設計模式,它們是未來借貸應用程式開發的重要經驗教訓。

如果你是開發者、架構師或安全研究員,那麼這篇文章適合你。最後,你將輕鬆了解以太坊上的新借貸應用程序,快速而全面地掌握其架構。深入了解這些DeFi 巨頭是如何從頭開始建立的。

DeFi 中的借貸

大多數DeFi 借貸是超額抵押[6]。如果使用者提供的抵押品價值高於借貸的價值,則使用者可以藉入特定資產。與傳統借貸不同,許多此類借貸沒有定期還款或固定還款日期。從本質上講,你可以藉,永遠不還。

然而,有一個問題就是:抵押品的價值必須永遠超過借貸價值預定的邊界。

如果抵押品價值低於此邊界,則貸款將會被清算[7]。在清算期間,其他人償還你的部分或全部貸款,並且他們會收到你的部分或全部抵押品作為回報。

遵循這種金融結構的所有借款申請都需要相同的構建,然後可以透過多種方式進行安排:

  • 儲存使用者抵押品和借入資產的金庫(treasury )
  • 追蹤每個用戶的抵押品和債務的帳單(Accounting)係統
  • 決定借款人利率的函數
  • 驗證借貸是否有足夠抵押的機製,通常涉及外部價格預言機
  • 抵押不足時藉貸的清算路徑
  • 記錄借貸總額和其他安全指標的風險管理係統,例如全局和每個用戶的借貸限額、最低抵押品和特定的超額抵押率
  • 供使用者新增和刪除抵押品、借貸和償還標的接口
深度解讀以太坊上借貸應用架構演變插图3 MakerDAO 中的借貸流程,所有應用資產使用相同的步驟和功能

借款和貸款可以被視為獨立的功能。在DeFi 中,我們在大多數借貸應用程式中都發現了這兩種功能,但它們並不總是能夠很好地整合。在Compound ,Aave和Euler ,借款人和貸款人的利率是內部相關的;事實上,這就是使這些應用程式以最少的乾預運作的原因。

另一方面,MakerDAO 和Yield 借給借款人的資產來自於自己(協議本身)。

他們不要求用戶提供資產以便其他用戶可以藉用。

本文將重點放在鏈上借款(borrowing),並在很大程度上忽略貸款(lending)。由於抵押要求,借款要複雜得多,並且了解借款模式通常可以更好地理解整個協議。

MakerDAO 的架構演變

深度解讀以太坊上借貸應用架構演變插图5

MakerDAO[8],於2019 年11 月推出[9],它持有$4.95B 抵押品。儘管其模組化架構具有針對每個功能的不同合約和獨特的術語,但它仍然易於理解和驗證。

MakerDAO 中的金庫(Treasury)功能由Join合約[10]管理。

每個被批準作為抵押資產的代幣都有一個單獨的合約[11]。

MakerDAO 不擁有任何借貸資產DAI。它隻是根據需要鑄造和銷毀[12] DAI。

帳單(Accounting) 在vat.sol 合約[13]內處理。當抵押品進入或退出係統時,Join 會更新此合約[14]。如果用戶借款,他們會直接與vat.sol 合約[15]進行互動。

此操作會更新使用者的債務餘額,並允許他們在DAI 中鑄造DAI。

為了償還,用戶在DAI Join 合約中燃燒DAI。然後,此過程會更新Vat,使用戶能夠結算借貸。

此外, vat.sol合約充當風險管理[16]引擎。它維持全部借貸限額,設定每個用戶的最低閾值,並監督抵押比率。當使用者的債務或抵押品餘額發生變化時,vat.sol 合約會評估利率和現貨(spot)。

這些是指基於所使用的抵押品和現行DAI 與抵押品價格比率的利率。有趣的是,這些值由其他MakerDAO 合約輸入到vat.sol 合約中,這種方法與大多數其他應用程式不同。

MakerDAO 在設計階段就將安全放在首位——當時gas成本等因素是次要的,使用者體驗是次要問題,競爭也可以忽略不計。

因此,它可能會顯得古怪、使用成本高且難以駕馭。

然而,其管理的龐大資產和沒有重大違規行為的營運記錄凸顯了其穩健的設計和執行。

MakerDAO 精彩片段:

每個資產都有自己合約。

帳單功能集中在單一合約中,該合約還記錄和執行風險參數,包括抵押檢查

與其他應用程式不同,預言機來更新合約,監督抵押

價格和利率預言機使用不同的接口

利率源自外部

要藉款,用戶必須與多個合約交互

Yield 協定的架構演變

深度解讀以太坊上借貸應用架構演變插图7

Yield v1[17] 作為使用YieldSpace[18] 的固定利率的概念證明。該版本在MakerDAO 之上建立了其抵押債務引擎。然而,Yield v1 使用起來既昂貴又難以透過新功能進行增強。

在認識到YieldSpace 的潛力後,我們迅速轉向開發Yield v2[19]。 Yield v2 仍從MakerDAO 中汲取靈感,但現已完全獨立,於2021 年10 月推出[20];Yield v2 優先考慮降低Gas 成本和增強用戶體驗。

深度解讀以太坊上借貸應用架構演變插图9 Yield v2 中的借貸流程深受MakerDAO 影響

所有帳單、風險管理和抵押檢查都合併到一個合約:Cauldron[21]。效法MakerDAO 的方法,將金庫功能分佈在Join 合約[22]中,每個合約專用於一項特定資產。

改進了預言機集成,將價格和利率預言機合併為一個通用介面[23]。我們反轉了MakerDAO 的預言機流程,以便Cauldron[24] 根據抵押檢查的需要查閱預言機。據我所知,這是MakerDAO 以外的所有其他應用的首選流程。

與MakerDAO 方法的另一個重大差異是引入了Ladle[25]。該合約充當用戶和Yield 之間的唯一中介。它對金庫和帳單擁有廣泛的控製權,以之相應的,它為功能開發提供了巨大的靈活性。

總而言之,Yield v2 中的借貸工作原理如下:

  • 每項資產都有自己專用的金庫合約。
  • 單一合約集中了帳單職能。該合約還監督風險管理措施並執行抵押檢查。
  • 抵押功能查閱預言機來決定價格和利率。
  • 價格和利率預言機共享統一的介面。
  • 利率是外部產生的。
  • 用戶可以透過向一個合約發出單一交易來借款。

Compound 的架構演變

深度解讀以太坊上借貸應用架構演變插图11

Compound 的第一個版本[26]是概念驗證[27],顯示可以在以太坊上建立貨幣市場。因此,其設計優先考慮簡單性。 MoneyMarket.sol[28]合約封裝了所有功能,包括借貸。

深度解讀以太坊上借貸應用架構演變插图13 Compound v1 中的借款過程,簡單有效

金庫、帳單和風險管理任務(例如抵押檢查)被合併到一份合約中。

合約從預言機檢索價格,但根據資產利用率決定利率。

用戶僅與該合約交互,儘管它必須單獨調用來提供抵押品和借入資產。

Compound v2

Compound v2[29] 於2019 年5 月推出,點燃了流動性挖礦時代,激發了無數分叉。它也起到貨幣市場的作用,允許用戶存款和借入資產。

基於其白皮書[30]和結構,很明顯,Compound v2 的主要目標是使用ERC20 標準來表示借貸部位。這確保了可組合性,允許用戶借給Compound,然後在其他區塊鏈應用程式中使用這些計息頭寸。

有趣的是,白皮書並沒有強調Compound v2 將獎勵[31]納入其智能合約中。由於這一遺漏,該功能的巨大影響可能無法預見。

深度解讀以太坊上借貸應用架構演變插图15 Compound v2 中的借款過程,首次將借貸部位代幣化

每項資產都有自己的資金合約。

帳單功能也是分開的,每個cToken 都會記錄用戶的抵押品和債務。

單一合約(Comptroller)記錄並執行風險管理參數,包括抵押檢查。

Comptroller 負責抵押檢查的合約參考價格的預言機和cToken 的利率。

價格和利率預言機透過不同的介面運作。

利率源自資產內部利用率。

用戶必須與多個合約互動才能藉款。

Compound v3

Compound v3[32] 於2022 年發布[33],採用了更保守的風險管理策略,將流動性隔離到每個可藉資產的池[34]。該設計也表面其對用戶友好性和Gas成本的關注。

深度解讀以太坊上借貸應用架構演變插图17 Compound v3 (Comet) 中的借用過程。回到基礎,回到安全。不過,有了更好的使用者體驗。

由於所需呼叫次數的減少,該係統對於開發人員和使用者來說都更加直觀。此外,單一合約設計透過最大限度地減少合約之間的調用來降低Gas成本。隔離的貨幣市場是對基於預言機的攻擊的防禦,而這是當前一個主要的安全問題。

文中提到的其他相關功能包括(在發行說明中提到的):

徹底改造的風險管理和清算引擎。這種設計增強了資金安全性,同時對借款人更加友善。

在整個市場上對個人抵押資產設定限製以降低風險。

收入和借款的利率模型現在是分開的,治理對經濟政策有完全控製權。

有趣的是,Compound v3 鏡像了Compound v1 的架構,讓單一合約處理每個可藉由資產的所有功能。其他值得注意的功能包括:

隻有藉貸資產才能藉款,抵押資產不能藉款。

在Compound v3 中,抵押品不會產生回報。

禁止借用抵押品提高了抵押品存入者的安全性。這降低了治理錯誤或故意攻擊危及抵押品的可能性。

移除抵押品供給回報可能是由於Compound 設法在v2 中累積了大量流動性的結果。我的直覺是,在Compound v2 中,借貸限額要麼低於或不高於用戶貸給應用程式的資產。

假設他們將為v3 管理類似程度的流動性,禁止借出抵押品可以使應用程式安全,這是v3 的核心目標之一。

從架構的角度來看:

每個貨幣市場都是一個獨立合約包含金庫、帳單和風險管理

每個貨幣市場都保留可藉資產及其所有批準的抵押資產代幣,從而讓資產分佈在整個應用中

餵價是唯一的外部輸入;借貸利率由內部產生

供給(supply)/提取(withdraw)/借(borrow)/也(repay)等傳統功能已巧妙整合。現在,從貨幣市場提取(withdraw)可藉資產意味著借款,而供給(supply)可藉資產則意味著根據用戶的償還債務或貸款

整合了路由合約,允許在一次呼叫中執行多個操作

Aave 的架構演變

深度解讀以太坊上借貸應用架構演變插图19

Aave v1[35] 於2019 年10 月推出[36],接替ETHLend。 Aave v1 引入了共享流動性池,而不是ETHLend 的點對點方法。

深度解讀以太坊上借貸應用架構演變插图21 Aave v1 中的借款過程,匯集流動性提交計算效率

如同在Yield v2 中一樣, 路由合約[37]控製了業務邏輯。 LendingPoolCore[38] 實現了帳單、風險管理和金庫功能。將金庫集中在一個合約中是與Compound v2 的一個區別點。

將抵押檢查留在自己的合約[39]中,從路由器而不是會計合約中調用,這一決定看似薄弱,但由於Aave v2 版本在v1 版本發布兩年後才發布,因此很可能符合目的。

LendingPoolCore 合約處理金庫和帳單

LendingPoolDataProvider 管理抵押檢查並與預言機交互

LendingPool作為用戶入口並實現業務邏輯

借貸利率由內部決定,僅依賴價格回饋

Aave v2

Aave v2[40] 於2021 年12 月發表[41]。雖然它保留了與Aave v1 類似的功能,但與Aave v1 和Compound v2 相比,它引入了改進且更簡單的架構。在這個版本中,Aave 還引入了aToken[42](類似於Compound 的cToken)和vToken[43],它們代表代幣化債務。

深度解讀以太坊上借貸應用架構演變插图23 Aave v2 有非常乾淨的架構,完全代幣化

為了簡單起見,省略了Aave v1 中有限使用的某些功能。 Aave v1 中的問題(例如應計利息的複雜表示)已在Aave v2 中解決。

LendingPool 合約整合了全域帳單和風險管理功能,例如抵押檢查。它作為用戶的主要訪問點

aToken 表示抵押品,類似於借貸部位。使用者的抵押品透過其持有的aToken 體現,金庫功能分佈在所有aToken 上

vToken 用來表示債務部位。用戶的債務由他們持有的vToken 表示

Aave v3

Aave v3[44] 於2023 年1 月發布[45],具有多鏈支援和其他功能。添加這些不會改變核心架構。此次更新也改善了風險管理和Gas效率。

儘管有許多進步,但就本研究而言,Aave v3 與Aave v2 並沒有本質上的差異。事實上,這可能表明Aave v2 的架構在2023 年仍然保持穩健。

Euler 的架構演變深度解讀以太坊上借貸應用架構演變插图25

Euler[46] 於2022 年12 月推出[47],旨在為貨幣市場提供無需許可的功能和最少的治理。

其設計的一個標誌是鑽石[48]般的模式。單一合約擁有應用程式的所有儲存空間[49]。該儲存可以透過不同的代理[50]進行訪問,每個代理管理係統的不同概念元素。

深度解讀以太坊上借貸應用架構演變插图27 Euler

儘管一份合約儲存了所有資產、帳單和風險管理數據,但仍有用於抵押品和借貸的eToken,以及用於債務的dToken,類似於Aave v2。然而,這些代幣合約隻是中央儲存合約的視圖。

Storage合約[51]管理帳單變數。

BaseLogic 合約[52]充當金庫。

RiskManager 合約[53]監督風險管理變數和功能,包括抵押檢查。

對程式碼的分析表明,最小的Gas成本是首要任務,從而導致整體設計消除了合約間調用的需要。透過嚴格的測試和審核確保了安全性。隻有邏輯分佈在各個模組中,作為儲存合約的實現,儲存合約主要充當代理合約。

這種統一的設計也支援輕鬆升級。如果不需要更改存儲,則可以快速更換模組以修改或引入功能。

Euler 在發布15 個月後被駭客攻擊,在升級引入被利用的漏洞6 個月後被駭客攻擊。

我不認為是由於其整體架構導致資產流失;相反,是對程式碼更新的監督不夠。

結論

MakerDAO、Compound 和Aave 等早期以太坊應用程式展示了以太坊超額抵押借貸的潛力。一旦這些概念驗證被證明是成功的,重點就轉移到引入一係列新功能以佔領市場份額。 Compound 和Aave 的後續版本引入了流動性挖礦、可組合性和集合流動性,這些技術在牛市條件下尤其蓬勃發展。

一個重大發展是Compound v2引入了代幣化借貸頭寸,這使得這些頭寸能夠被其他應用程式識別為標準資產。 Aave v2 和Euler 透過實施代幣化債務部位更進一步,其更廣泛的效用仍然是一個爭論的議題。

高Gas 成本成為多頭市場期間的主要問題,促使用戶體驗發生變化,如Yield v2、Aave v2 和Euler 所追求的。路由器合約和整體實現有助於降低用戶的交易成本。然而,這是以更複雜、因此風險更大的程式碼為代價的。

Compound v3 似乎開創了先例,將安全性置於金融效率之上。它背離了傳統的流動性池模型,以更好地防範潛在的駭客攻擊。 L2 網路的興起(其中Gas 成本變得越來越可以忽略不計)可能會影響未來抵押借款應用的設計。

在本文中,我全面概述了以太坊上的關鍵抵押借款應用程式。我用來分析每個應用的方法也可以用來快速掌握其他抵押借款應用的複雜性。

在開發區塊鏈借貸應用時,請始終考慮資產的儲存、帳單記錄的放置以及風險和抵押品評估方法。當你考慮這些注意事項時,請利用先前應用的歷史變更及本概述中的見解來為你的決策提供資訊。

原文鏈接

聯系郵箱:0xniumao@gmail.com