新生代 DeFi 基礎 (Hyperstructure) 典範:借貸協議 Morpho

Anton Cheng
分享
新生代 DeFi 基礎 (Hyperstructure) 典範:借貸協議 Morpho

(本文作者為 DeFi 開發者 Anton Cheng)

前言

過去這一年,個人覺得 DeFi 世界沒有太特別的創新,但相對的處於一個非常實際的重建期:許多高品質的團隊開始用新的工程方法,更安全、高效率的方式,重新撰寫、部署許多 DeFi 的基礎設施,也出現不少完全去中心化的公共財。

Morpho 是這之中最經典的一個案例。今天就介紹一下他們是如何把複雜的借貸協議,拆解成簡單的小模組,最大化安全性與可重複使用性。對 DeFi 或是 Solidity 不太熟的人,我也非常推薦用 Morpho 作為入門,學習如何用簡潔的方法實作出實用的合約。

廣告 - 內文未完請往下捲動

前情提要:借貸平台

借貸平台的核心可以很簡單的用兩群人來解釋:Supplier 想要把資產借出去賺取利息;Borrower 想要抵押資產 A 、借入資產 B,支付利息給 supplier 的同時, 換取彈性組合自己資產組合的機會。

比較老一派的借貸協議如 Aave 或是 Compound ,都是強調整個 protocol 就是一個很大的借貸市場:supplier 只需要選擇自己想要借出的資產,就可以很輕易的存款收利息。以 Aave 與 USDC 為例,用戶只要選擇借出 USDC,借出後會收到名為 aUSDC 的 interest bearing token,並不用去在意背後到底有什麼抵押品 (collateral),或是各個抵押品的清算參數等等,因為這些所謂的風險管理都被 DAO 解決了,這也是為什麼 Aave Governance 常常有在更改參數、增加或是移除抵押品的投票。

Morpho 的核心概念

Morpho 的根本邏輯上有很大的差異:它是一個真正去中心化的協議,任何人都可以來上面開創任意 toke pair 的借貸市場。

一般 supplier 會與 Morpho 互動的最小單位被稱為 “vault”。Morpho 團隊並沒有推出任何的官方 vault,而是盡量的找不同的人或單位來建立並管理不同的 vault,來滿足不同 supplier 的需求。也就是說:身為一個 supplier,並不是決定把錢丟到 Morpho 就好,你還必須從眾多的 vault 中選擇你最尬意的。這讓 Morpho 處於一個很有趣的位置,他們不是直接決定用戶需要什麼市場的人,而把這些事情交給其他人 (vault, curator)來決定。

左:一個協議 (protocol) 即為一個大市場,如 Compound 與 Aave。右:一個協議可以創建多個風險不相關的 Vault 與市場

上面提到的 vault,是面對一個一般 supplier 的單位。實際上一個 vault 又由多個 markets 來組成。下面我們將會從下而上介紹 market 與 vault 兩個重要元件,還有他們之間的關係。

Vault 由數個不同的 markets 組成

Morpho Market (MorphoBlue) / 市場

在 Morpho 協議的最底層,是一個個相互獨立、不可改動、也沒有任何所有權概念的 markets (合約上被稱為 MorphoBlue)。市場一旦被創建出來就無法更改,而且允許任何人使用任意一組 ERC20 的 token pair,以及使用任意的 oracle 來創建 markets。

創建 Market

MorphoBlue 是一個 singleton contract,所有個別的 market 並不是新建立的合約,而是全部存在同一個合約地址,因此創建一個市場非常便宜(目前的 gas 可能只要幾塊美金)、並且能夠內建 flashloan 的功能,讓人能在一筆交易內借走所有 supplier 存在 MorphoBlue 裡面的錢。

創建一個市場需要的參數如下:

  • collateral: 抵押品 ERC20
  • loan: 被借貸的 ERC20
  • oracle:預言機地址
  • lltv* (liquidation loan to value): 一個 borrower 借出總價值 / 抵押品總價高於這個比例時將被清算。
  • irmModel* (Interest Rate Model):決定利率變化邏輯的合約

上述的參數中,前三者如前面所說,並沒有任何限制;後面兩個參數則限制只能使用 governance 投票通過的 lltv 值以及 irm 合約。

當一個 market 被創建出來後,其實它就已經可以實現一個簡單借貸市場的功能了: 例如一個 USDC — ETH 的 market,supplier 可以直接存入 USDC 賺取利息、 borrower 則需存入超額 ETH 做抵押品,借款並支付利息。如果有任何 borrower 的倉位處於危險狀態,將會有 liquidator 來幫忙清算。

如果要使用不同的 lltv, collateral, 都需要創建不同的 market

Liquidation

Morpho 的清算機制相對單純,並沒有任何拍賣類型的設計,而是單純固定價格先搶先贏:在一個 borrower underwater 的時候,liquidator 可以幫忙償還部分 debt,獲得價值較高的抵押品。

其中每個 market 會有一個固定的 LIF (Liquidation Incentive Factor), 由 lltv 決定。Liquidator 能拿到的抵押品就是代償還 loan 價值 * LIF:

maxLIF = 1.15, cursor = 0.3 。LIF 必定 > 1

能做這樣的設計其實非常仰賴「一個 market 只由一個 loan asset 與 collateral asset 組成」這件事,正是因為 market 非常單純,這使得定價賣單一抵押品這件事情變得可行。如果一個 protocol 想要一次拍賣一卡車不同種類的抵押品,或是允許一個 borrower 一次有很多的 loan position,那實際上就很難直接透過這種直接靠 oracle 定價的方式來清算,所以大多會仰賴拍賣,那就會是更複雜的設計。

Gasless Authentication

這裡想要稍微提一個很有潛力的小設計:在 MorphoBlue 程式碼中有一個叫做 setAuthorizationWithSig 的函示,讓一個 EOA 可以透過一個簽名,來授權別的地址代為操作自己的倉位。這代表其實開發者可以去開發一些第三方合約,通過授權去做一些代管、代操作的服務。

小小結:Market 是最簡化的基本借貸單位

看到這裡,應該已經對於 market 有基本的認識,基本上就是一個非常小、功能有限的借貸市場。它的功能僅限於讓 supplier 借錢給單一抵押品市場、以及讓 borrower 放入一種資產並借出另一種資產。

這顯然是不夠的,因此就需要 vault 還有 allocator 來幫忙解決問題了。

P.S. MorphoBlue 合約只有約 500 行的程式碼,(一般人最聞之色變的清算機制也不過短短 50 行),寫得非常的簡潔,並且經過非常嚴密的審計以及 formal verification 驗證,我認為可以稱得上是目前主流 DeFi Infra 中最安全的一份程式碼,非常推薦給想學合約的大家學習。

Morpho Vaults (MetaMorpho)

前面介紹完了 market,其實對於頭腦最清楚,也想要花時間自己管理所有風險的使用者來說已經足夠了。但是大部分的 supplier 可能沒有這些能力,因此我們需要一些聚合工具、以及別的角色來幫助我們完成這個任務。

我們可以回顧一下,過去 DeFi 借貸情境中,有哪些「風險」是一個 DAO 會控制的?其實想來想去不外乎是選擇抵押品以及各種參數:

(1.) 抵押品:什麼樣的抵押品可以借走 supplier 的錢

(2.) 抵押品的 borrow cap:每個抵押品能借走的上限

(3.) 每個抵押品的清算線:不同的抵押品種類,價格相對穩定應該容許比較高的槓桿,例如存 $100 USDC 可以借走 $95 USDT,但存 $100 的 BTC 可能只能借 $80。

在 morpho 的定義裡,這些所謂的管理條件都會被視為不同的市場,所以每當要進行「風險管理時」,理論上在 morpho 的架構下,就需要換存到另外一個市場。例如清算線的改變:一個 USDC-DOGE-lltv-90% 的市場,代表存 DOGE 可以借走 90% 面值的 USDC,如果今天你覺得 DOGE 的風險提高了,你就需要改把自己的 USDC 提出來,轉存到一個新的 lltv-80% 的市場中。這顯然不是一般人會願意做的事情,因此就有了 vault 這個聚合器,再透過 curator 和 allocator 兩個風控小幫手,來幫存款者把倉位搬來搬去。這就是 Morpho Vault (合約上稱為 MetaMorpho)。

Vault (藍色)與 Market (橘色)的關係

Allocator

首先先來介紹兩個風控小幫手。一個 vault 可以有多個 allocator,這些 allocators 有權限把原本存在一個市場的資產轉移到另一個市場。除此之外他們還可以更新 deposit queue & withdraw queue:顧名思義就是「存錢會先存到哪個市場」、以及「領錢從哪個市場開始領」。

Risk Curator

Risk curator 則是一個 vault 的控制者, 除了能設定 allocator(也擁有他們的權力),並能設定每個 market 的 supply 上限。

透過這兩個角色,我們就可以達到上面所說的三大風控種類:透過改變 queue 以及把流動性搬來搬去,我們相當於可以決定 markets,也就可以決定要不要更改抵押品、或是更改每個抵押品的清算線;再加上設定每個市場存款上限的功能,我們能夠調整整個池子的曝險。

ERC4626

值得一提的時,每個 vault 都是專門對一種 loan asset 設計的,也就是只接受存入單一資產。MetaMorpho 支援 ERC4626 的介面,存入之後會給你一個包含的利率的 ERC20 代幣,可以再把這個代幣拿到別的衍伸性金融商品的協議中,賭一些利率什麼的。

Performance Fee

最後再提一下,這些風控小幫手不是做慈善的,因此大多會要求透過 vault 存款的用戶服取一定比例賺取的利息來作為他們的佣金。如果不想付錢的話… 可以往下滑到最後結尾、幫你想好怎麼避開這些 fee 了 😆。

挑戰

大概 Morpho 的核心這樣就介紹完了,接下來我來提幾個,這樣的設計常常被拿出來討論的點。

Liquidity Fragmentation (?)

看到這樣的架構,第一直覺便是流動性分割:本來存到一個 vault 的錢現在反而要再被分散到不同的 markets 中,是不是代表流動性被分散了?

我認為「是也不是」:「是」是因為如果這個世界只有一個 vault,那確實流動性被分散到不同的 market 中,會造成 borrower 很多困擾。

但其實多個不同的 vaults 可以同時 supply 給同一個 market。如果有一個 market 非常的穩定,越來越多的 vault 可能會想存錢到這個 vault 裡,賺取比較穩定的利率。這樣反而讓 borrower 可以在同一個 market 就能借到來自不同 vault 用戶的流動性。

如果我們不只考慮 vaults,那這個優勢可能進一步的擴展:例如有其他智能合約或是 treasury 想要做一個簡單的生利息功能,它可能不想透過 vault,而直接把 USDC 存到一個 market 中去生利息,market 簡潔的設計讓更多協議可能願意做這件事,帶入更大量的流動性。

Multi-Collateral Borrowing

我認為在 morpho 中,borrower 的 UX 會變得比較複雜,但究竟是好是壞可以用不同面向解釋:

以前所有的借貸協議、都有權力去改變 borrower 被清算的條件,部分原因是因為他們允許 borrower 一次放入很多抵押品、用一個 health score 來評量你的總倉位能借出多少錢。為了確保協議安全、在抵押品風險改變時,他們便可以透過改變一些參數、使得 borrower 變得可以被清算。儘管會有額外機制保護、但這終究是一個困難的考量點。

在 Morpho 中,borrower 的動作對象變為永久不可變動的 markets,這意味著你不用擔心任何人能夠改變你的借貸、清算條件。代價是,如果你打算抵押多種抵押品借出資產,你需要自己把不同的抵押品存入不同的 markets,同時自己維繫多個倉位、 rebalance,從這個角度來看便會十分不方便。

Rehypothecation

Morpho 最大的一個問題是最底層的抵押品資產利用率。其他很多借貸協議都允許你存入的抵押品同時被別人借走、讓你多收一點利息。但是 morpho 最底層的邏輯上就不允許 collateral 被借出,所以一定會有一些資產是「閒置」在合約中的。

關於這件事情究竟是不是真的重要,可能可以在我們之後介紹 Euler V2 的時候再來詳細展開。

結語: Building Hyperstructures

我記得第一次看到 Morpho 的合約應該就是去年的這個時候,就覺得這就是我一直期待可以看到有人實作的 lending infra。

除了合約乾淨、簡潔這些實作上的細節外,我十分喜歡這種不嘗試做所有事情、但把每個實用的單位拆分乾淨、以最小化為原則開發合約的精神。我認為這是開發合約最好的精神、因為越複雜的東西越容易有安全問題,也越不容易被別人重複利用。

除此之外, Morpho 這個完全去中心化、immtuable、而且最小化 governance 的設計,也完全符合了 Hyperstructure 的精神。

何謂 Hyperstructures?

如果沒有聽過 hyperstructure 這個詞,非常推薦去看 Jacob 大大的原文。我在這裡幫忙把定義抄過來。

Hyperstructures: Crypto protocols that can run for free and forever, without maintenance, interruption or intermediaries.

Jacob 在文章中進一步定義的幾大特性:

  • Unstoppable: the protocol cannot be stopped by anyone. It runs for as long as the underlying blockchain exists.
  • Free: there is a 0% protocol wide fee and runs exactly at gas cost.
  • Valuable: accrues value which is accessible and exitable by the owners.
  • Expansive: there are built-in incentives for participants in the protocol.
  • Permissionless: universally accessible and censorship resistant. Builders and users cannot be deplatformed.
  • Positive sum: it creates a win-win environment for participants to utilize the same infrastrastructure.
  • Credibly neutral: the protocol is user-agnostic.

P.S. 原文的另一亮點是 “Valuable” 問題的延伸:這些合約可以擁有 ownership,也可以讓 ownership 有價值、但必須建立在完全不違反去中心化基礎上。一個好的例子就是 fee switch:一個控制開啟 fee switch 的 ownership 是有價值的、但 owner 永遠沒有長期動機開啟 fee switch。

我認為在現在的 DeFi 中,這樣的協議非常稀缺。除了 Uniswap 之外,幾乎沒有看過其他 protocol 符合這樣的條件。在 Morpho 的設計中,可以看出他們不只確保去中心化、也非常有意的在往 minimized governance 的方向靠攏,確保就算哪天就算 owner 變壞人了,這個合約也可以完全以 credibly neutral, 並不斷支援新的 market 的方式運作下去。

Morpho is a primitive, a public good, or a Hyperstructure.

也正因如此,我非常的喜歡 Morpho(尤其是 MorphoBlue),所以前陣子花時間做了一個讓所有人可以直接 supply 到個別市場的工具: MonarchLend.xyz。如果是對於自己管理倉位很有信心的的人,我推薦直接使用這樣的方式 supply to markets,才不會被 vault 抽中間的手續費。

歡迎試玩:https://www.monarchlend.xyz/

簡單漂亮的 Morpho 介紹完了,希望之後可以再介紹複雜大概 100 倍,但是一樣非常去中心化的 Euler V2!