新生代 DeFi 基础 (Hyperstructure) 典范:借贷协议 Morpho

avatar
鏈新聞
2 天前

(本文作者为 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!

相关赛道:
来源
免责声明:以上内容仅为作者观点,不代表Followin的任何立场,不构成与Followin相关的任何投资建议。
喜欢
收藏
评论