---
# System prepended metadata

title: Morpho Blue协议分析
tags: [DeFi]

---

## 0x00：简单介绍

Morpho是一个DeFi借贷协议，官方一开始推出Morpho Optimizer版本，用于在Aave和Compound现有的借贷池上建立一个点对点 (P2P) 层。由于Optimizer的功能受限于其他协议的设计，导致很难进行扩展。官方为了解决这个问题，同时使得协议不依靠更多的治理，变得更加的无需许可，推出了新的版本—— Morpho Blue。在后续，官方通过一系列举措，将用户过渡到Morpho Blue，而Optimizer版本则逐渐废弃。

本篇文章会先对借贷市场和用户操作进行介绍，然后介绍对于借贷协议来说，最关键的两个部分——**利率模型**与**清算机制**。

<br>

## 0x01：借贷市场

先来看看Morpho Blue中，一个借贷市场由哪些要素决定：

![image-20250224193452938](https://hackmd.io/_uploads/Skr8txkhJl.png)


每个用户都可以创建借贷市场，在进行创建时，需要传入上面的参数，来定义该借贷市场。**irm**，即Interest Rate Models，可以用于获取当前的利率。**lltv**则用于指示可以进行清算的阈值。irm和lltv在下面会详细讲解。

（注意：虽然用户在创建市场时，可以自己指定irm和lltv，当这个irm和lltv需要经过官方审批同意）

除此之外，每个借贷市场会维护一些数据，用于描述当前市场的供应与借出情况：

![image-20250224194435266](https://hackmd.io/_uploads/H1RDFxkhyx.png)


<br>

## 0x02：用户操作

每个用户都维护着一个仓位信息：

![image-20250224203718239](https://hackmd.io/_uploads/SkMFYgy2kg.png)


Morpho Blue不像Aave，用户所供应的代币可以作为抵押物。在Morpho中，作为供应者的用户，供应的是“借出代币”(loanToken)。但借款者需要借款时，需存入抵押代币（collateralToken），而与借款者供应的代币无关。从代码上看，**供应loanToken**和**抵押collateralToken**是实现为不同的函数。

对于一个借贷市场，用户有6种常规操作：供应、提款、借款、还款、存入抵押品、取出抵押品。这些操作会改变**借贷市场数据 (Market结构体)** 和**自己的仓位 (Position结构体)**。

![image-20250303190134494](https://hackmd.io/_uploads/B1yqKxJ2ye.png)


<br>

## 0x03：利率模型

虽然说用户可以自己提出并指定任意的利率模型 (IRM)，但从官方文档中了解到目前就使用了一种，即**自适应曲线利率模型** （Adaptive Curve IRM）。Adaptive Curve IRM是在传统借贷池的曲线利率模型的基础上，添加了一个自适应机制，使之随着时间的推移适应市场条件，而不需要过多的人为治理。
<br> 
### 传统的曲线利率模型：

Aave、Compound协议采用的就是传统的曲线利率模型。协议会对一个借贷市场，设定一个最佳利用率（总借出与总供应的比值）。而利率模型所需要做的，就是调控利率，从而改变用户的供需，**使利用率往最佳的方向发展**。因此最佳利用率也称为——目标利用率。对于Morpho Blue官方的利率模型，目标利用率设为90%。

通常，曲线利率模型是一个折线曲线，在利用率低于目标时，曲线较缓，利率变化反应较慢，当高于目标时，曲线较陡，利率变化反应快。就像这样：

![curve-mechanism-01](https://hackmd.io/_uploads/Hyl6Flk3yl.png)




图中r~90%~为利用率等于90%时所对应的利率，也即处于目标利用率时的利率。除此之外，还需要设定利用率为0%和100%时的利率。当用户每次与市场交互时，总供应量或总借出量会改变，因此利用率会发生变化。相应的，利率也根据利率模型进行变化。

来看看曲线利率模型的公式描述：

![image-20250302191859721](https://hackmd.io/_uploads/BkIAFeJ31l.png)


$error(u)$：用于描述t时刻的**利用率 u(t)** 与 **目标利用率 uTarget** 的差距程度。
$$
e(u) = 
\left\{
\begin{array}{ll}
\frac{u(t)-uTarget}{uTarget} & \text{if } u(t) \leq uTarget \\
\frac{u(t)-uTarget}{1 - uTarget} & \text{if } u(t) > uTarget
\end{array}
\right.
$$
注意，差距程度进行了归一化。这是什么意思呢？以上图中的曲线为例，uTarget为90%，e(45%)和e(95%)是大小相同的，表明与目标的差距程度一样。但一个为正值，一个为负值，用于表明差距的方向。



$curve(u)$：曲线公式
$$
curve(u) = 
\left\{
\begin{array}{ll}
(1 - \frac{1}{k_d})\times e(u) + 1 & \text{if } u \leq uTarget \\
(k_d - 1)\times e(u) + 1 & \text{if } u > uTarget
\end{array}
\right.
$$

对于Morpho Blue，$k_d$为4。如果上面的公式看得比较懵，可以把$e(u)$代入进行整合，就会变得清晰了。

对于传统的利率模型，将目标利用率所对应的利率乘于curve(u)就得到利率的公式了。像这样：
$$
r(t) = r_{uTarget} \times curve(u(t))
$$

<br>

### 自适应机制：

（这部分内容没有全部掌握，就简单介绍介绍，希望能够抛砖引玉！更多内容可看[官方文档](https://docs.morpho.org/morpho/contracts/irm/adaptive-curve-irm)）

先下个定义：

1. **目标利率**：目标利用率所对应的利率，公式表示为$r_T$；
2. **$last(t)$**：上一次更新利率的时间；



对于传统的曲线利率模型，目标利率是固定的。而在叠加自适应机制后，目标利率会根据**当前利用率与目标利用率的差距**来进行调整。该调整的目的是使得利用率能够更快到达到目标点。

$speed(t)$：利率调整的速度   （$k_p$为每秒的调整速度，值为$50 / 356\space days$，即5000%每年）

$$
speed(t) = e^{k_p \times e(u(last(t)) \times (t - last(t))}
$$

在这个公式中，error(u)得到的**差距的方向**就体现出作用了。

- 如果$u(last(t))<Target$，则$e(u(last(t))$为负数，speed(t)小于1且变化比较小，对应的作用是将目标利率调低，且调整规模小；
- 反之在$u(last(t))>Target$时，将目标利率调高，且调整规模大；



目标利率的计算公式：用speed(t)对**上次的目标利率**进行调整，得到本次的。
$$
r_T(t) = r_T(last(t)) \times speed(t)
$$

最后，将目标利率乘于上文的曲线公司，得到最终的自适应曲线利率模型：
$$
r(t) = r_T(t) \times curve(u(t))
$$

<br>

## 0x04：清算机制

首先阐述两个概念：**LTV** 与 **LLTV**。

1. LTV，*Loan-To-Value*，即贷款价值比。计算公式为：$LTV = \frac{BorrowedValue}{CollateralValue}$。
2. 而LLTV，*Liquidation Loan-To-Value*，即达到清算条件的贷款价值比。当 LTV > LLTV时，账户仓位会处于不健康状态，随时会被清算。



当借款人的账户不健康被清算人清算时，借款人的债务会被偿还，而清算人会获得部分的抵押品。这部分抵押品的价值是会比债务的价值高的，也因此才能激励清算人。至于获取多少抵押品的价值，则是由**清算激励因子 (LIF)** 决定。
$$
LIF = min(M, \frac{1}{\beta \times LLTV + (1-\beta)}),  \\
\text{with }W=1.15 \text{ and } \beta=0.3
$$
LIF 所对应的曲线为：
![lif-lltv](https://hackmd.io/_uploads/SylZ5eknkg.png)

<br>

为了方便理解，看看官方给出了一个例子：

借款人在市场A中提供了价值100美元的抵押品，同时该市场的LLTV为80%。将LLTV带入上述公式，可得清算激励因子(LIF)约为1.06。

此时，如果借款人的债务高于80美元 (比如81美元)，则LTV会大于80%，该借款人的仓位可以被清算。

具体地，如果清算人帮借款人偿还全部债务，即81美元。同时，清算人会获取部分抵押品：
$$
SeizableAssets = debtAmount \times LIF = 81 \times 1.06 = 85.86
$$
至此，清算人获得价值85.86美元的抵押品，而借款人则只剩下14.14美元的抵押品，同时借款人的债务被偿还。











