Euler — 次世代的 DeFi 借貸協議
不管是 Compound 或是 Aave 這樣的初代借貸協議幾乎已經是 DeFi 世界的標準配備了,這些協議上面有著相對主流的代幣可以提供或是借出,如 ETH, USDC, MKR, BAT 等,讓借貸協議成為一個去中心化的服務。
但除了主流的代幣外,這些借貸平台並沒有相對非主流的代幣可供給或是借出,而在這些借貸協議中如果要上架一個新的代幣,則需要透過治理框架投票後才可以上架,並不是所有使用者都可以上架任何代幣,也就說不是無需許可 (Permissionless) 的上架模式。比如說我想要在 Compound 上架我自己鑄造的代幣 XYZ 會需要經過 COMP 持有者的投票才能上架。
但是這些小幣依然有借貸的需求:小幣的持有者在還沒有應用場景時可以把代幣放入借貸協議裡面生利息;想做空的人會想借出小幣來操作。而這些各式各樣的代幣所凝聚起來的也是個巨大的需求,在目前初代的借貸協議並沒有滿足這樣的需求。
Euler 是新一代的協議,為一個無需許可的 DeFi 借貸協議。任何使用者都可以上架幾乎任意代幣到 Euler 當中作為代幣的供給以及借出。舉例來說我自己發行的 XYZ 代幣只要有在 Uniswap v3 上面有跟 WETH 結成交易對,就可以上架到 Euler。
而可以上架任意代幣伴隨而來的是更高的風險,Euler 則提出了一系列的方式來管理風險,以下介紹 Euler 幾個特別的設計來達成無需許可的借貸協議。
資產分級
由於 Euler 接受任何只要有在 Uniswap v3 跟 WETH 結成交易對的代幣上架,這樣不經許可的特性也會讓每個代幣的借貸市場風險較高。如果代幣的價格波動太極端,而清算程序又無法充分償還債務人的負債,就可能會在不同資產池造成壞帳。
為了應付這樣的風險,Euler 將資產分成幾個不同的層級。
隔離級 (Isolation-tier)
資產可以用於提供 (lend) 與借出 (borrow),但是不能作為抵押品,同時這個資產只能單獨借出,不能與其他資產混合著一起被借出。
比如說一個使用者他用了 USDC 跟 DAI 作為抵押,然後他想借出一個目前為 隔離級的資產 ABC,此時他並不能再借出另外一個資產 XYZ,這個帳號就只能獨立借出 ABC。
隔離級的資產是沒有任何限制的,任何資產預設都是隔離級,這樣的好處是各種小幣只要在 Uniswap v3 上面有交易對都可以在 Euler 上面借貸,只是不能當作抵押品。而且如果這個資產出現了極度波動導致清算,因為他跟其他借出資產是隔離的,所以清算時就不會波及到其他的資產。
試想如果一個借出資產 XYZ 突然漲了 1000 倍,如果沒有隔離分級,跟他一起共用抵押品的資產 ABC 的抵押品就會被跟著清算。
跨越級 (Cross-tier)
資產可以用於提供 (lend) 與借出 (borrow),但是不能作為抵押品,但是可以跟其他資產一起被借出。在 Cross 分級的資產讓抵押品使用起來可以更加彈性,但由於清算時不同資產會互相影響,風險也比隔離級高。
抵押品級 (Collateral-tier)
資產可以用於提供 (lend) 與借出 (borrow),而且可以作為抵押品。比如說 USDC 跟 DAI 都是 Collateral-tier,代表他們可以作為抵押品借出其他資產,比如說借出 LINK 或是 UNI。
以上三個等級中,在沒有經過治理框架的投票時,所有資產都是隔離級。如果需要提升到不同等級來增加資金利用率,可以發起投票來變更,當然隨之而來的會提高系統的風險,而這樣的利益關係跟 EUL 持有者的利益關係一致。
調整過風險的借款能力
不管是什麼借貸協議都相同,協議都會要求使用者確保他自己提供的抵押品的價值要高於負債的價值,也就是超額抵押來增加系統的安全性。當抵押品的價值快要不足以支撐負債時,就會被標記成可以清算的狀態。
在 Compound 上面是透過抵押品係數 (Collateral factors) 來決定債務人可以借出多少價值的資產。比如說使用者在 1 ETH 為 $4000 時抵押了 1 ETH 作為抵押品,想要借出 UNI,當 ETH 的係數為 0.7 時,使用者可以借出價值等值於 2800 美金的 UNI。若抵押品價值下降到一個程度,或是借出資產(負債)的價值上升到一個程度,這兩種狀況都會讓抵押品無法支持負債的價值,此時就會被標記成可被清算,此時清算人就可以觸發清算程序。
但是這邊沒有針對每種不同的借出資產(負債)考慮不同的風險,僅有抵押品係數來考慮抵押品的風險。比如說一樣是 1 ETH 借出 UNI 的狀況,如果是借出一個我自己鑄造的代幣 XYZ,其風險會比借出 UNI 要大很多,但是只考慮抵押品係數時則無法針對每個資產設定不一樣的風險係數。
Compound 上面因為都是上架主流代幣,每個借出資產的風險可能都差不多,但是如果要可以上架任意代幣就會需要考慮借出資產風險。
相較於 Compound 僅考慮抵押品係數,Euler 除此之外還額外考慮了借出資產係數 (borrow factors),這樣除了用係數反應抵押品的波動風險外,還額外用了借出資產係數來反映負債品的波動風險。
舉例來說,一個使用者抵押了一千美金等值的 1000 USDC 並且想要借出 UNI。當 USDC 的抵押品係數為 0.9,而 UNI 的借出資產係數為 0.7,那麼這個使用者可以借到 $1000 _ 0.9 _ 0.7 = $630 等值的 UNI。
其中抵押品經過風險係數調整後的價值為 $1000 * 0.9 = $900。而借出資產經過風險係數調整後的價值為 $630 / 0.7 = $900。
這代表如果原本借出的 UNI 價值為 $630,當他的價值超過 $900 時,這筆資產會被標記為可清算。另外一邊雖然發生機率較小,但是如果 1000 USDC 的價值跌到低於 $900 時,也會被標記成可清算,如果用價格較為浮動的資產如 ETH 作為抵押品就會有這樣的情形發生。
相較於只考慮抵押品係數,額外考慮借出資產的風險係數可以有效地控制借出資產的風險。目前正在運作的 Euler 系統中,ETH 的借出資產係數是 0.91,1INCH 是 0.28,而 FLX (我不知道這是什麼) 則是 0.01。這些數字可以透過社群治理變更。
TWAP Oracle
為了計算出抵押品以及借出資產的價值是不是符合超額抵押,Euler 會需要監控使用者的資產價值。在 Compound, Maker 跟 Aave 上面通常是透過鏈下取得資產的價格資訊之後再透過預言機 (Oracle) 放到鏈上讓他們的合約可以取得價格資訊。
但在 Euler 要達成無需許可的機制,上述的方法會有需要手動介入的程序,無法直接在鏈上搜尋到價格資訊。所以 Euler 直接採用了 Uniswap v3 提供的時間加權平均價格 (TWAP) 的預言機來取得價格資訊,這樣一來只要該資產有在 Uniswap v3 提供流動性並且與 WETH 結成交易對就可以在 Euler 上架。
TWAP
TWAP 在 Uniswap 上面的計算是某種資產在指定的時間間隔下的時間加權平均價格。一般來說 TWAP 會更加的平滑,但是也會帶有部分延遲效果,如下圖的範例,TWAP 是平滑的曲線,而且會根據取樣的時間會有所延遲。
時間太短的 TWAP 比較不平滑但卻即時。長時間間隔會更平滑,但卻不能太即時的反應現況。TWAP 在 Euler 適用的原因有幾個:
- 對價格操縱有抵抗能力:像是閃電貸款套利在使用 TWAP 之後的影響會減少,平滑的價格變化曲線讓閃貸款無法利用瞬間的價格漲跌來達成目的。
- 避免不必要的清算:當突然有大單導致價格變化劇烈時,TWAP 不會馬上反應,而接下來套利機器人又會進來讓價格回歸正常,如此一來就可以避免價格震盪引起不必要的清算。
- 減少 MEV 攻擊:TWAP 的連續性正好可以拿來做清算時的荷蘭式拍賣,減少 MEV (Miner Extractable Value, 礦工可提取價值) 攻擊,這會在清算一節提到。
清算機制
當一個債務人經過風險調整後的負債價值超過他們風險調整後的抵押品價值時,就會被標記為可清算,此時清算人會介入,幫系統執行所需的清算並且領取清算的資產折扣獎勵。
剛開始發生這種狀況時,債務人還會有足夠的抵押品可以償還貸款,當然也有可能有拖欠貸款的風險,所以此時他們就會被清算來防止進一步壞帳的產生。
MEV 抵禦機制
在 Compound 跟 Aave 中,清算的激勵方式是將債務人的抵押品以固定的百分比折扣提供給清算人,通常是 5–10%。這樣做法的問題是清算人只能用最高的 gas 想辦法取得協助清算這筆債務的獲利,但是由於礦工可提取價值 (MEV) 的關係,經常可能會被提前執行 (front-running) 而交易失敗。另外的問題是固定的折扣對於大額資金的債務人來說是巨大的懲罰,所以這會讓債務人只會想要借用比較小筆的資金,但這又造成小筆的清算可能不足以支付清算人的成本。
為了解決這些問題,Euler 採用了不同的方法。Euler 不採用固定比例的折扣百分比,而是讓折扣隨著該倉位的價值下降而逐漸上升,也就是折扣隨著時間會愈來愈高,成為了一種荷蘭式拍賣。這樣的好處是潛在清算人都會需要自己決定是不是要以目前的折扣百分比來清算。每個清算人對於要獲利多少有不同的想法,所以會在不同的時機執行清算。而因為 Euler 採用了 TWAP 這種價格會平滑的上升或下降的特性,讓倉位的價值會平滑的下降,讓清算折扣也變成一個平滑漸進的折扣,可部分抑制 MEV 的發生。
如上圖所示,在一般的清算方式中,當價格突破清算價格的那一刻(紅點處),所有的清算人都會希望在此進行清算以獲得 5–10% 的固定折扣而無可避免地要用最高的 gas 想辦法搶到;而 Euler 透過 TWAP 平滑連續的價格變化曲線給定不同的折扣,清算人需要考慮自己想要的利潤跟成本,決定要在哪個折扣點入場,這樣分散的入場時機可以減緩 MEV 的影響。
但就算如此其實還是無法完全防止 MEV,因為礦工或是其他搶先交易者仍然可以直接竊取清算人的交易來執行。為了限制這樣的行為,在 Euler 上面的流動性提供者如果也執行清算,可以有資格獲得「折扣助推器 (discount booster)」,讓流動性提供者在跟礦工競爭時可以在荷蘭式拍賣中獲得更多利益,導致搶先交易者可能會因此而放棄搶先交易。
利率
Compound 與 Aave 採用了靜態線性(或是分段線性)來決定協議的借貸成本。廣義上來說,當從資金池流動性提供減少,或是借出資產的需求增加時,利率就會上升,反之亦然。
靜態模型如果定出適當的參數效果會很好,如果定下不好的參數時就會出現問題。例如斜率太淺會導致借出資產的成本太低,資金池過度被使用導致債權人無法撤會他們的資金。而如果斜率太陡會導致借貸成本太高,沒有人願意借出資產導致資本效率低落。
響應式利率 (Reactive Interest Rates)
為了避免每個借貸市場都需要決定以及調整最適合參數的問題,Euler 使用控制理論來協助調整借貸利率。具體來說 Euler 使用了一個 PID 控制器來達成:
- 當資產利用率高於目標水平時,放大借款利率變化率
- 當資產利用率小於目標水平時,抑制借款利率變化率
這樣就產生了響應式利率,利率會隨著標的資產的市場條件調整,而不需要持續的透過治理改變參數。
子帳號
資產的分層有助於隔離 Euler 上的風險,但是卻開啟了一個新的使用者體驗的問題。具體來說如果借出一筆在隔離層的資產時,這個帳號就會被鎖定住而不能再借用其他的資產了。
因此 Euler 針對每一個 Ethereum 的帳號都能夠創建 256 個子帳號,這樣就可以在同一個 Ethereum address 中管理不同的資產,代幣也只有批准一次後,就可以轉入各個子帳號,而代幣也可以自由地在不同子帳號之間轉移。這讓使用者根據他們的需求來隔離他們的債務變得更容易。
結論
Euler 為了達成不經許可就可以自由的開啟借貸市場,從許多不同的設計方式下手來達到這個目的:
- 隔離:透過資產分級隔離風險
- 風險係數:同時針對抵押品以及借出資產設定風險係數,讓不同風險的資產有不一樣的係數
- 荷蘭式拍賣清算:透過 TWAP 平滑的價格變化來進行清算折扣拍賣
- 響應式利率:透過市場的回饋來調整利率
這些改善的方法都讓 Euler 成為了一個更為先進的借貸協議,不需許可的特性也更符合去中心化的目的。然後 Euler 才剛上 Ethereum mainnet,目前採取的措施是否可以有效的管理風險,還需要時間進一步的驗證以及團隊逐步的改善才能下定論。
比如說在討論區詢問 borrow factor 的問題時提到了 FLX 為 0.01 的事情,開發人員是說因為 FLX 放在 Uniswap 流動性比放在 Euler 的還要少,這導致了預言機可能會不準的問題,所以才手動把 FLX 的係數調到 0.01 來降低他們的風險。而預設的係數是 0.23,但是還會密切觀察這個預設數字要怎麼訂定才好。
由此可見確實還需要讓子彈飛一會,來看看這樣的設計是否可以滿足不需許可的借貸協議這個目標。