## 0x00:简单介绍 Morpho是一个DeFi借贷协议,官方一开始推出Morpho Optimizer版本,用于在Aave和Compound现有的借贷池上建立一个点对点 (P2P) 层。由于Optimizer的功能受限于其他协议的设计,导致很难进行扩展。官方为了解决这个问题,同时使得协议不依靠更多的治理,变得更加的无需许可,推出了新的版本—— Morpho Blue。在后续,官方通过一系列举措,将用户过渡到Morpho Blue,而Optimizer版本则逐渐废弃。 本篇文章会先对借贷市场和用户操作进行介绍,然后介绍对于借贷协议来说,最关键的两个部分——**利率模型**与**清算机制**。 <br> ## 0x01:借贷市场 先来看看Morpho Blue中,一个借贷市场由哪些要素决定:  每个用户都可以创建借贷市场,在进行创建时,需要传入上面的参数,来定义该借贷市场。**irm**,即Interest Rate Models,可以用于获取当前的利率。**lltv**则用于指示可以进行清算的阈值。irm和lltv在下面会详细讲解。 (注意:虽然用户在创建市场时,可以自己指定irm和lltv,当这个irm和lltv需要经过官方审批同意) 除此之外,每个借贷市场会维护一些数据,用于描述当前市场的供应与借出情况:  <br> ## 0x02:用户操作 每个用户都维护着一个仓位信息:  Morpho Blue不像Aave,用户所供应的代币可以作为抵押物。在Morpho中,作为供应者的用户,供应的是“借出代币”(loanToken)。但借款者需要借款时,需存入抵押代币(collateralToken),而与借款者供应的代币无关。从代码上看,**供应loanToken**和**抵押collateralToken**是实现为不同的函数。 对于一个借贷市场,用户有6种常规操作:供应、提款、借款、还款、存入抵押品、取出抵押品。这些操作会改变**借贷市场数据 (Market结构体)** 和**自己的仓位 (Position结构体)**。  <br> ## 0x03:利率模型 虽然说用户可以自己提出并指定任意的利率模型 (IRM),但从官方文档中了解到目前就使用了一种,即**自适应曲线利率模型** (Adaptive Curve IRM)。Adaptive Curve IRM是在传统借贷池的曲线利率模型的基础上,添加了一个自适应机制,使之随着时间的推移适应市场条件,而不需要过多的人为治理。 <br> ### 传统的曲线利率模型: Aave、Compound协议采用的就是传统的曲线利率模型。协议会对一个借贷市场,设定一个最佳利用率(总借出与总供应的比值)。而利率模型所需要做的,就是调控利率,从而改变用户的供需,**使利用率往最佳的方向发展**。因此最佳利用率也称为——目标利用率。对于Morpho Blue官方的利率模型,目标利用率设为90%。 通常,曲线利率模型是一个折线曲线,在利用率低于目标时,曲线较缓,利率变化反应较慢,当高于目标时,曲线较陡,利率变化反应快。就像这样:  图中r~90%~为利用率等于90%时所对应的利率,也即处于目标利用率时的利率。除此之外,还需要设定利用率为0%和100%时的利率。当用户每次与市场交互时,总供应量或总借出量会改变,因此利用率会发生变化。相应的,利率也根据利率模型进行变化。 来看看曲线利率模型的公式描述:  $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 所对应的曲线为:  <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美元的抵押品,同时借款人的债务被偿还。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up