TradFi(传统金融)的利率主要由中央银行决定,并受市场因素影响。相比之下,DeFi 的利率是由贷款需求和出借人提供的资金供给通过算法决定的。
本文中的概念将以 Aave(Ethereum 上领先的 DeFi 借贷协议)为例进行解释。Compound V2 的利率模型与此相同,仅在实现上有微小差异。当您在比较其他借贷协议的实现时,可能会遇到一些不同之处。
借贷协议使用智能合约来汇集出借人的流动性,并允许借款人基于这些汇集后的流动性提取贷款。我们有时将这种流动性称为“资金”或“资本”。
出借人(即存款人或 Suppliers)将根据其提供的流动性赚取利息。借款人则有义务为其贷款支付利息。
借贷协议通常会设定一个“储备金率(reserve factor)”——即出借人提供的一定比例的资本,这部分资本不会产生归属于出借人的利息。相反,这部分资本产生的利息将归协议所有,有时也被称为“利差(spread)”。
借款程度会影响利率——我们称之为“借款需求(borrow demand)”。贷出的存款比例越大,利率上升得就越多。我们将借款量相对于可借资金供给量的程度称为“资金使用率(utilization)”。如果没有借款人,资金使用率为 0%;如果存款被全部贷出,资金使用率则为 100%。资金使用率的数值被用作决定利率的唯一驱动因素。
下图说明了这一点——我们将在本文中逐步解释每一个环节。

作者信息
本文由 Calnix 撰写,动画由 Aymeric Taylor 制作。
资金使用率公式
如前所述,资金使用率由借款需求决定。

资金使用率通常按如下方式计算:

请注意,借款需求是相对于总存款而言的。如果总存款增加而借款需求保持不变,资金使用率就会下降。
资金使用率如何驱动借款利率
资金使用率进而决定了借款利率。

在一个设计良好的协议中,资金使用率的变化会导致利率的上升/下降,具体解释如下。
当资金使用率上升时:(表明借款需求较高)
- 借款利率和存款利率均上升
- 激励存款,抑制借款
- 结果导致闲置流动性增加,借款需求下降,进而使资金使用率回落到较低水平。
当资金使用率下降时:(表明存在过剩的闲置流动性)
- 借款利率和存款利率均下降
- 激励借款,抑制存款
- 结果导致闲置流动性减少,借款需求上升,进而使资金使用率回升到较高水平。

将资金使用率水平转化为借款利率的函数由利率模型定义。其参数通常由协议治理设定。
计算借款利率与存款利率之间的关系
现在我们来看链条中的最后一个关系。

该关系按如下方式确定:

并非所有的借贷协议都使用此公式来设定存款利率。值得注意的是,Compound V3 直接将存款利率计算为资金使用率的函数,而没有将借款利率考虑在内。
示例: 假设一个借贷协议的借款利率为 10%,资金使用率为 50%。在这种情况下,存款人享有的利率将是:
- 存款利率 = 借款利率 × 资金使用率
- 存款利率 = 10% × 50% = 5%
存款人将从其存款中赚取 5% 的利率。
下图展示了存款利率作为借款利率函数的图表。当资金使用率为零时,出借人无法赚取任何利息。

将借款利率与资金使用率相乘的动机是什么?

如果 50% 的资金被借出,则出借人提供的资本中只有一半被贷出。如果借款人对可用资产的一半支付 10% 的利息,出借人就会获得其资本的 5%。如果我们向出借人的全部资本支付 10% 的利息,但只有一半被借出,那么协议将无法履行其支付义务。
假设向协议存入了 100 美元,其中 50 美元被借出。如果借款人支付 10% 的利息,他们将向协议支付 5 美元。但是,如果协议按照 100 美元向出借人支付 10% 的利息,它将欠他们 10 美元——而这笔钱它并没有从借款人那里赚到。
引入储备金率:计算利差
虽然前面的示例有助于我们理解,但它忽略了我们一开始提到的利差——即归属于协议的抽成,它可以反映费用、国库贡献等。

储备金率将一部分借款利息分配给协议,其余部分再分配给存款人。
具体计算示例: 假设一个借贷协议的借款利率为 10%,资金使用率为 50%,储备金率为 20%。在这种情况下,存款人享有的利率将是:
- 存款利率 = 借款利率 × 资金使用率 × (1 - 储备金率)
- 存款利率 = 10% × 50% × (1 - 20%) = 5% × (80%) = 4%
如您所见,五分之一的借款利息被抽走,存款人现在从其存款中赚取 4% 的利率。
真实的利率模型
DeFi 应用程序试图鼓励资金使用率保持在某个特定百分比附近,通常在 80-95% 之间,这被称为“最佳资金使用率(optimal utilization)”。
所有可用资金都被贷出(资金使用率为 100%)是不理想的。在这种情况下,出借人无法提取资金。因此,当所有资本被耗尽时,我们希望有强烈的激励机制促使出借人向协议提供更多资金——或者促使借款人归还借入的资产。因此,供给曲线通常是分段线性且“存在拐点(kinked)”的——它在达到最佳资金使用率点之前缓慢上升,然后上升速度加快。
分段线性拐点函数公式
任何利率模型都必须是资金使用率 𝑈 的函数,因为

Aave 的分段线性拐点利率模型如下。

为了直观理解该公式,我们可以将方程式重新整理为 y = mx + c 的形式

以下动画演示了公式各个部分的作用

请注意,𝑈 在这里是自变量,Rborrow 是它的函数,而其他参数由协议治理决定。
曲线的“拐点(kink)”区域是协议所认为的“最佳(optimal)”状态。如果资金使用率超过该水平,利率就会开始快速上升,以激励出借人提供更多资本或促使借款人偿还贷款。
DAI 示例
让我们来看看由 Ethereum 上的 DefaultReserveInterestRateStrategy 合约所定义的 Aave 的 DAI 利率模型。这四个基本参数(U_optimal、R_intercept、R_slope1、R_slope2)可以通过智能合约公开访问。
这是智能合约地址:https://etherscan.io/address/0x694d4cFdaeE639239df949b6E24Ff8576A00d1f2

从链上数值可以看出,利率模型中使用了以下参数:
- U_optimal ( 蓝色箭头 ) 的变量名为 OPTIMAL_USAGE_RATIO = 0.80
- R_intercept ( 红色箭头 ) 的公开函数名为 getBaseVariableBorrowRate = 0
- R_slope1 ( 绿色箭头 ) 的公开函数名为 getVariableRateSlope1 = 0.04
- R_slope2 ( 紫色箭头 ) 的公开函数名为 getVariableRateSlope2 = 0.75
这些数值以定点数 Ray(27 位小数,即 1 = 1e27)表示。
参数在撰写本文时是准确的。
结论
利率是协议中资产使用率的函数。该函数的确切形态由治理设定。由于利差和储备金率的存在,出借人赚取的利息少于借款人支付的利息。
通过 RareSkills 了解更多
在我们的区块链训练营中了解更多关于 DeFi 和 Web3 的技术主题。
最初发布于 2023 年 12 月 1 日