AAVE V1 白皮书阅读

1 Introduction

Aave Protocol V1 标志着从去中心化 P2P 借贷策略(lender 与 borrower 之间形成直接贷款关系,如早期 ETHLend)向 pool-based(资金池) 模式的转变:

  • 出借人(Lenders)通过向池合约存入加密货币提供流动性;
  • 借款人(Borrowers)通过抵押资产从同一合约中借出资金;
  • 借贷无需逐笔撮合,而是依赖池中资金总量、已借出规模及其抵押状态,从而实现基于池状态的即时借贷。

利率由算法决定,同时作用于借款端和出借端:

  • 对借款人:利率取决于资金成本(cost of money),即池中特定时刻可用资金量。随着资金被借出,可用资金减少,利率上升。
  • 对出借人:该利率对应收益利率(earn rate),算法同时保障流动性储备,确保随时可提取资金。

图1:Aave协议

【图 1:Aave 协议】
该图展示了协议基本架构:出借人将资产存入池中提供流动性,借款人通过抵押资产借出资金,利率由池子状态(如可用流动性比例)算法决定。


1.1 Basic Concepts

图2:借贷池基础

【图 2:借贷池基础(Lending Pool Basics)】
该图说明借贷池核心概念:池持有多种货币储备,总流动性以ETH计价;储备接受出借人存款,用户可通过锁定价值更高的抵押品借出这些资金。

借贷池的核心概念是 Reserve(储备/资产池):每个池持有多种货币的储备,以ETH计价的总和定义为Total Liquidity(总流动性)。Reserve接受出借人存款,用户可通过锁定更高价值的抵押品(Collateral)来借出这些资金。

并非所有储备货币都可配置为抵押品,仅应考虑低风险代币。用户可借款额度取决于储备中可用资金量。每个Reserve对应一个事先设定的Loan-To-Value(LTV,贷款价值比),反映该资产可被借出的安全上限。当用户抵押多种资产时,系统会按各资产在 ETH 计价下的比例,对这些 LTV 做加权平均,得到用户组合的有效 LTV。

每笔借款仓位可选择Stable Borrow Rate(稳定借款利率)Variable Borrow Rate(浮动借款利率)。借款为无限期(infinite duration),无还款计划:可随时进行部分或全额还款。

图3:贷款池参数

【图 3:借贷池参数(Lending Pool Parameters)】
该图展示了不同资产的LTV、清算阈值等参数示例。

当价格波动时,借款仓位可能面临清算。清算事件在抵押品价格下跌至Liquidation Threshold(清算阈值) LQL_Q 以下时触发。达到此比率将激活Liquidation Bonus(清算奖励),激励清算人以折扣价购买抵押品。每个Reserve有特定的清算阈值,计算方式与LTV相同。平均清算阈值 LQaL_Q^a 通过抵押品底层资产清算阈值的加权平均动态计算。

任何时刻,借款仓位由其Health Factor(健康因子) HfH_f 表征,此函数基于总抵押品和总借款额,用于判定贷款是否抵押不足:

Hf=TotalCollateralETH×LQaTotalBorrowsETH+TotalFeesETH H_f = \frac{TotalCollateralETH \times L_Q^a}{TotalBorrowsETH + TotalFeesETH}

Hf<1H_f<1 时,贷款被视为抵押不足,可被清算。


1.2 Formal Definitions

本节介绍白皮书中定义的符号系统,为理解协议机制提供数学基础。以下按功能性分组说明(非原文结构),所有定义与公式均严格遵循白皮书。

1.2.1 时间相关变量:惰性计息(lazy accrual)的基石

  • TT:当前时间戳,等于block.timestamp
  • TlT_l:Reserve数据最后更新时间戳;每次发生borrow/deposit/redeem/repay/swap/liquidation事件时更新。
  • ΔT=TTl\Delta T = T - T_l:距上次更新的秒数。
  • Tyear=31536000T_{year}=31536000:一年的秒数。
  • ΔTyear=ΔTTyear\Delta T_{year}=\frac{\Delta T}{T_{year}}:将"秒"归一化为"年"的比例,用于将年化利率换算到任意时间间隔。

此设计实现惰性计息机制:协议无需每秒更新利息,只需记录"上次更新时刻",在下一次交互时用ΔT\Delta T计算期间利息,从而节省链上状态更新的gas成本。

1.2.2 Reserve规模变量:流动性与借款拆分

每个 Reserve 都会维护自己的一套LtL_tBsB_sBvB_vBtB_t,因为不同资产的流动性、借款需求、利率曲线都不一样。

  • LtL_t:Total Liquidity(总流动性/可用流动性总额),包括:还没被借走的存款 + 借款人刚还回来的资金。它代表“水池里一共还有多少水”。
  • BsB_s:Total Stable Borrows(稳定借款总量),稳定利率类似固定息,借款人选择它就把这部分资金“锁”在一个相对平稳的利率。
  • BvB_v:Total Variable Borrows(浮动借款总量),所有以“浮动利率”借出的头寸总和。浮动利率会随利用率等模型参数变动,借款成本更灵活。
  • Bt=Bs+BvB_t = B_s + B_v:Total Borrows(总借款量),稳定借款和浮动借款的合计,就是整个平台当前被借出去的资金量。

1.2.3 利用率(Utilization Rate)UU:利率模型的自变量

利用率UU定义为"借出资金占比":

U={0,Lt=0BtLt,Lt>0 U = \begin{cases} 0, & L_t=0\\ \frac{B_t}{L_t}, & L_t>0 \end{cases}
  • 当池子无流动性(Lt=0L_t=0)时,利用率设为0。
  • 当池子有流动性时,借出越多(BtB_t\uparrow)或总流动性越少(LtL_t\downarrow),利用率越高。

这正是"资金成本"在数学上的表达:UU越高,池子越接近被借空,借款利率应越高,以抑制借款需求并吸引新流动性。

1.2.4 浮动借款利率(Variable Borrow Rate)RvR_v:带拐点的分段线性模型

浮动借款利率(Variable Borrow Rate)是Aave协议中一种会根据市场供需自动调整的借款利率机制。它的核心设计目标是:当资金充裕时保持低利率,当资金紧张时提高利率以平衡供需。

模型参数:

  • UoptimalU_{optimal}:Target Utilization Rate(目标利用率,拐点);超过此值后利率陡升。
  • Rv0R_{v0}:Base Variable Borrow Rate(基础浮动借款利率),Bt=0B_t=0时的常量;单位为ray。
  • Rslope1R_{slope1}U<UoptimalU<U_{optimal}时利率随利用率上升的斜率;单位为ray。
  • Rslope2R_{slope2}UUoptimalU\geq U_{optimal}时的更大斜率;单位为ray。

浮动借款利率定义为:

Rv={Rv0+UUoptimalRslope1,UUoptimalRv0+Rslope1+UUoptimal1UoptimalRslope2,U>Uoptimal R_v = \begin{cases} R_{v0} + \frac{U}{U_{optimal}} R_{slope1}, & U \leq U_{optimal} \\[6pt] R_{v0} + R_{slope1} + \frac{U - U_{optimal}}{1 - U_{optimal}} R_{slope2}, & U > U_{optimal} \end{cases}

此公式确立三个校准点:

  • U=0Rv=Rv0U=0 \Rightarrow R_v=R_{v0}:当U=0U=0(无人借款)时:Rv=Rv0R_v = R_{v0},即基础利率
  • U=UoptimalRv=Rv0+Rslope1U=U_{optimal} \Rightarrow R_v=R_{v0}+R_{slope1}:当U=UoptimalU=U_{optimal}(最优利用率)时:Rv=Rv0+Rslope1R_v = R_{v0} + R_{slope1}
  • U>UoptimalU>U_{optimal}后按Rslope2R_{slope2}快速上升,反映"资本成本上升/流动性紧张"时的惩罚性定价。(当U>UoptimalU>U_{optimal}(资金紧张)时:利率急剧上升,反映资金稀缺性)

举例: 为便于理解,以下例子使用简化百分比表示,实际协议中利率以ray单位(102710^{27})精确计算。" 假设某DAI资金池参数:

  • 基础利率Rv0R_{v0} = 2%
  • 最优利用率UoptimalU_{optimal} = 80%
  • 第一斜率Rslope1R_{slope1} = 10%
  • 第二斜率Rslope2R_{slope2} = 60%

使用场景演变:

  1. 资金充裕时:当仅40%的DAI被借出(U=40%),利率为:2%+40%80%×10%=7%2\% + \frac{40\%}{80\%} \times 10\% = 7\%
  2. 达到最优状态:当80%的DAI被借出(U=U_{optimal}),利率为:2%+10%=12%2\% + 10\% = 12\%
  3. 资金紧张时:当90%的DAI被借出(U>U_{optimal}),利率急剧上升:2%+10%+90%80%180%×60%=42%2\% + 10\% + \frac{90\%-80\%}{1-80\%} \times 60\% = 42\%

这种设计在资金紧张时通过陡升的利率,既保护了存款人的资金安全,也确保了池子始终有足够流动性供提取。

1.2.5 稳定借款利率(Stable Borrow Rate)RsR_s:锚定市场成本的“低频调节器”

与1.2.4中随利用率实时响应的浮动借款利率RvR_v不同,稳定借款利率RsR_s要提供一条围绕外部资金成本缓慢迁移的曲线,让借款人能够在较长周期内锁定资金价格。因此,它更关注“市场平均价格”而非“池内瞬时紧张程度”。

模型组成

  • RsR_s:Stable Borrow Rate(稳定借款利率),按Reserve维度计算,具体实现细节见4.2节;单位为ray。
  • MrM_r:Average Market Lending Rate(市场平均出借利率),是RsR_s的基准项,从多家外部借贷平台采样并用其借款量加权: Mr=i=1nPriPvii=1nPvi M_r = \frac{\sum_{i=1}^{n} P_r^i P_v^i}{\sum_{i=1}^{n} P_v^i} 其中PriP_r^i为第ii个平台的借款利率,PviP_v^i为该平台该资产的借款量。借款量越大,代表性越强,因而权重越高。

运行逻辑

  1. 周期性获取外部平台利率与借款量,计算MrM_r,得到“市场平均资金成本”。
  2. 协议在4.2节定义的spread/风险溢价基础上,将MrM_r调整为最终RsR_s,以补偿稳定池的期限/流动性风险。
  3. 若外部市场资金价格缓慢漂移,MrM_r推动RsR_s随之移动;若短期内仅池内利用率波动,则交由RvR_v快速调节。

数值示例 假设监测三家平台,其借款利率/借款量分别为(6%,20M)(6\%,20\text{M})(8%,50M)(8\%,50\text{M})(10%,30M)(10\%,30\text{M}),则:

Mr=6%×20+8%×50+10%×3020+50+30=8.4%M_r = \frac{6\%\times20 + 8\%\times50 + 10\%\times30}{20+50+30} = 8.4\%

再叠加4.2节给定的稳定利率spread(例如+1%),即可得到该Reserve当期的Rs=9.4%R_s=9.4\%,供选择“稳定利率”模式的借款人使用。

1.2.6 系统级平均稳定借款利率 RsaR^{sa}:维护全池稳定成本

RtsaR_t^{sa}(Average Stable Rate Borrow Rate)用于在Reserve维度维护稳定借款的平均利率。

  • 新增稳定借款BnewB_{new}(利率RsR_s)时:

    Rtsa=BsRt1sa+BnewRsBs+Bnew R_t^{sa} = \frac{B_s R_{t-1}^{sa} + B_{new} R_s}{B_s + B_{new}}
  • 偿还稳定借款BxB_x(该笔利率RsxR_{sx})时:

    Rtsa={0,BsBx=0BsRt1saBxRsxBsBx,BsBx>0 R_t^{sa} = \begin{cases} 0, & B_s - B_x = 0 \\ \frac{B_s R_{t-1}^{sa} - B_x R_{sx}}{B_s - B_x}, & B_s - B_x > 0 \end{cases}

此机制实质是"带删减的加权平均",使系统能用单一标量刻画稳定借款池的平均资金成本。

1.2.7 从借款利率到出借利率:ROR_ORlR_l

  • ROR_O:Overall Borrow Rate(整体借款利率),按浮动与稳定借款规模加权:

    RO={0,Bt=0BvRv+BsRsaBt,Bt>0 R_O = \begin{cases} 0, & B_t = 0 \\ \frac{B_v R_v + B_s R_{sa}}{B_t}, & B_t > 0 \end{cases}
  • RlR_l:Current Liquidity Rate(当前流动性利率/出借利率),定义为:

    Rl=ROU R_l = R_O \, \cdot \, U

Rl=ROUR_l = R_O \cdot U表示:出借人获得的年化利率 = 借款人支付的平均年化利率 × 借出比例。当利用率低(大量资金闲置)时,即使借款利率不低,整体付息规模也会被UU缩小,出借收益自然更低。

1.2.8 指数(Index)体系:高精度累计因子表达利息增长

协议使用ray作为高精度定点数单位(1 ray=10271 \text{ ray} = 10^{27}),用于精确表示链上计算中的利率与指数。初始指数均设为1×10271 \times 10^{27}

  1. Cumulated Liquidity Index CtiC_t^i:Reserve在ΔT\Delta T区间内累计给存款人的利息因子。每次发生borrow/deposit/repay/redeem/swap/liquidation事件时更新。

    Cti=(RlΔTyear+1)Ct1i,C0i=1×1027 C_t^i = (R_l \, \Delta T_{year} + 1) C_{t-1}^i, \quad C_0^i = 1 \, \times \, 10^{27}
  2. Reserve Normalized Income ItnI_t^n:储备金持续累积的利息,定义为:

    Itn=(RlΔTyear+1)Ct1i I_t^n = (R_l \, \Delta T_{year} + 1) C_{t-1}^i

    此值实质是"在不改写状态的情况下,将Ct1iC_{t-1}^i推进到当前时刻"的结果,常用于查询或利息映射。

  3. Cumulated Variable Borrow Index BtvcB_t^{vc}:浮动借款在利率RvR_v下的累计利息因子,同样在上述事件触发时更新。

    Btvc=(1+RvTyear)ΔTBt1vc,B0vc=1×1027 B_t^{vc} = \left(1 + \frac{R_v}{T_{year}}\right)^{\Delta T} \cdot B_{t-1}^{vc}, \quad B_0^{vc} = 1 \, \times \, 10^{27}
  4. User Cumulated Variable Borrow Index BtvcxB_t^{vcx}:用户开启浮动借款仓位时保存的指数快照,用于之后计算该用户债务增长。

1.2.9 用户债务:本金 BxB_x 与复利后余额 BxcB_{xc}

  • BxB_x:User Principal Borrow Balance(用户本金/记账余额)。当用户多次借款时,系统会将已累积利息先"资本化"(成为新本金),再叠加新增借款。
  • BxcB_{xc}:User Compounded Borrow Balance(用户复利后债务余额)。

白皮书分别给出两类仓位的债务计算:

  • 浮动仓位

    Bxc=BvcBvcx(1+RvTyear)ΔTxBx B_{xc} = \frac{B_{vc}}{B_{vcx}} \left(1 + \frac{R_v}{T_{year}}\right)^{\Delta T_x} \, \cdot \, B_x
  • 稳定仓位

    Bxc=(1+RsTyear)ΔTBx B_{xc} = \left(1 + \frac{R_s}{T_{year}}\right)^{\Delta T} \, \cdot \, B_x

此结构体现两点实现要义:

  1. 浮动借款需用"全局指数/用户快照指数"比例缩放本金
  2. 稳定借款直接按用户锁定的RsR_s进行时间复利(RsR_s确定与调整细节见第4章)

1.2.10 Health Factor HfH_f 与可清算条件

健康因子公式与1.1.5节相同:

Hf=TotalCollateralETH×LaQTotalBorrowsETH+TotalFeesETH H_f=\frac{TotalCollateralETH \times L_a^Q}{TotalBorrowsETH + TotalFeesETH}

Hf<1H_f<1时,贷款被视为抵押不足,可被清算。TotalFeesETH包含原始费用(origination fee)和累计利息。此定义将"抵押风险参数(LaQL_a^Q)"、“债务规模"与"费用"统一进一个阈值判断,为后续清算流程提供可编程判据。

2 Protocol Architecture

Aave协议采用模块化分层架构设计,将核心功能拆分为职责明确的组件,实现高内聚低耦合的系统结构。这种设计不仅提高了代码的可维护性和安全性,还为协议升级和功能扩展提供了灵活基础。图4展示了协议的整体架构,以下将详细解析各组件的功能、交互关系及设计动机。

图4:协议架构

【图 4:协议架构】 该图展示了Aave协议的主要合约组件及其相互关系,清晰呈现了用户通过LendingPool作为统一入口与系统交互,后端依赖LendingPoolCore维护状态,DataProvider提供数据聚合,而InterestRateStrategy独立处理利率逻辑的层次结构。

2.1 Lending Pool Core

LendingPoolCore合约是协议的核心中枢,承担着最基础且关键的职责:

  • 资产托管:直接持有所有储备金(reserves)和用户存入的资产,作为资金的最终保管方。
  • 状态维护:存储并管理每个储备金的关键状态变量,包括流动性总量、借款总量、利率指数等。
  • 基础计算:执行利息累积(index accrual)、利率更新等核心数学运算。

该合约采用最小化设计原则,仅包含必要的状态变量和基础功能,不直接处理复杂的业务逻辑或用户交互。这种设计确保了核心资产的安全性,同时将业务逻辑抽象到更高层的合约中,符合安全关键系统的设计范式——将资金保管与业务逻辑分离。即使上层逻辑合约需要升级,底层的资产存储也可以保持稳定,极大降低了升级风险。

2.2 Lending Pool Data Provider

LendingPoolDataProvider合约在LendingPoolCore之上构建了一个数据抽象层,主要提供只读计算服务:

  • 价值标准化:将用户的各种资产余额(借款余额、抵押品余额、流动性余额)统一转换为ETH等价值,这是风险评估的基础。
  • 数据聚合:从LendingPoolCore收集原始数据,生成高层次的汇总信息供LendingPool使用。
  • 风险参数计算:动态计算平均贷款价值比(Average LTV)和平均清算比率(Average Liquidation Ratio)等关键风控指标。

该组件本质上是一个"只读"的数据服务层,不修改任何状态,仅提供计算和转换功能。这种设计使协议能够将复杂的计算逻辑与状态变更解耦,提高了系统的可测试性和可维护性。通过将ETH作为价值计算的基准货币,协议能够统一处理多种异构资产的风险评估问题,解决了多资产环境下的估值标准化挑战。

2.3 Lending Pool

LendingPool合约是用户与协议交互的主要入口,它协调LendingPoolCoreLendingPoolDataProvider完成各类操作:

  • 基础操作:处理存款(deposit)、赎回(redeem)、借款(borrow)、还款(repay)等核心功能。
  • 高级功能:支持利率交换(rate swap)、清算(liquidation)和闪电贷(flash loans)等复杂操作。
  • 代币化机制:实现aTokens的铸造和销毁,将用户的存款头寸代币化,使利息累积过程透明可见。

aTokens是协议的关键创新:用户存入资产时获得1:1映射的aTokens,这些代币价值随时间增长反映累积利息。当用户赎回或被清算时,aTokens被销毁。此外,当用户开启借款头寸时,用作抵押的资产会被锁定,无法转移,确保了抵押品的安全性。3.8节将详细讨论代币化机制的技术细节与设计权衡。

作为门面模式(Facade Pattern) 的实现,LendingPool封装了底层复杂性,为用户提供了统一简洁的交互接口,同时内部协调多个组件完成操作,体现了良好的软件工程设计原则。

2.4 Lending Pool Configurator

LendingPoolConfigurator合约提供协议的核心配置功能,控制着池的行为参数和权限设置:

  • 储备金初始化:设置新储备金的初始参数和状态。
  • 储备金配置:调整现有储备金的参数,如利率模型、LTV比率、清算阈值等。
  • 功能开关:启用或禁用特定储备金的借款功能或抵押功能。

白皮书明确指出:协议自发布之初即由基于DAOStack框架的链上治理控制,随后会逐步演进为完全自治的治理系统。LendingPoolConfigurator因此被设计为受去中心化治理控制、可升级的配置模块,允许治理在不触碰核心资产托管层的情况下调整参数,兼顾安全性与灵活性。

2.5 Interest Rate Strategy

InterestRateStrategy合约封装了利率计算模型,为每个储备金提供独立的利率策略,这是协议适应多资产环境的关键设计:

  • 参数定义:每个策略合约定义了基础浮动借款利率Rv0R_{v0}、低于最优利用率的斜率Rslope1R_{slope1}、高于最优利用率的斜率Rslope2R_{slope2}等关键参数。
  • 利率更新:根据当前利用率UU动态计算浮动借款利率RvR_vRv={Rv0+UUoptimalRslope1,if UUoptimalRv0+Rslope1+UUoptimal1UoptimalRslope2,if U>Uoptimal R_v = \begin{cases} R_{v0} + \frac{U}{U_{optimal}}R_{slope1}, & \text{if } U \leq U_{optimal} \\ R_{v0} + R_{slope1} + \frac{U-U_{optimal}}{1-U_{optimal}}R_{slope2}, & \text{if } U > U_{optimal} \end{cases}
  • 校准点控制:该模型在三个关键点进行校准:
    1. U=0U=0时,Rv=Rv0R_v=R_{v0}
    2. U=UoptimalU=U_{optimal}时,Rv=Rv0+Rslope1R_v=R_{v0}+R_{slope1}
    3. U>UoptimalU>U_{optimal},利率急剧上升反映资金成本增加

稳定借款利率遵循4.2节描述的类似模型,但引入了市场基准利率MrM_r作为基础。每个储备金拥有专属的InterestRateStrategy合约,使不同资产能够根据其市场特性采用差异化的利率策略。这种"拐点曲线(Kinked Curve)“设计在资金充足时保持低利率以促进借贷,在资金紧张时通过陡峭的斜率迅速提高利率,形成市场自我调节机制,防止流动性枯竭。

2.6 Governance

协议治理采用双层结构,由LEND代币和aTokens共同驱动,确保协议在保持去中心化的同时兼顾效率与灵活性:

协议层治理(Protocol’s Governance):

  • LEND代币持有量加权投票
  • 负责协议参数调整和智能合约升级
  • 基于DAOStack框架的链上治理一开始即随协议上线部署,并将逐步演进为完全自治的治理系统

池层治理(Pool’s Governance):

  • 以用户在池中的流动性份额(aTokens余额)加权投票
  • 覆盖特定池的参数,如哪些资产可用作抵押或借款
  • 每个池拥有独立的治理机制,但受协议层治理的总体框架约束

需要明确区分两个概念:

  • Aave协议(Aave Protocol):将演进为支持多个独立流动性池的框架
  • Aave借贷池(Aave Lending Pool):协议初始阶段的首个池,直到Pool Factory升级发布

这种双层治理架构平衡了全局协调与局部自治的需求,为多池共存的未来架构奠定了基础。链上治理具有强制执行力(binding),所有投票结果直接转化为协议行动,无需中心化干预。治理细节将在后续的社区提案中详细公布。

协议架构的设计体现了DeFi协议演进的核心思想:通过模块化分解复杂系统,将资产保管、业务逻辑、数据计算和治理决策分离到不同组件中,同时保持组件间清晰的接口定义。这种架构不仅提高了安全性,也为协议的持续演进和生态扩展提供了坚实基础,支持从单一借贷池向多池共存生态的平滑过渡。

3 The LendingPool Contract

LendingPool合约是Aave协议的业务逻辑控制器,作为用户与协议交互的唯一窗口,协调所有借贷操作。所有功能严格遵循"验证-更新-执行"的三阶段执行序列(图5),确保状态一致性和操作原子性,避免中间状态被恶意利用。 图5:借贷池合约

【图 5:LendingPool 合约架构】 该图展示了协议的原子化执行框架:所有操作先验证状态合法性,再更新内部变量,最后执行资产转移,确保每一步成功后才进行下一步。

3.1 Deposit

存款是协议流动性的源头,其执行流程如图6所示:

  1. 资产转移:用户将底层资产转移至LendingPoolCore合约
  2. aToken铸造:按1:1比例铸造aTokens分配给用户
  3. 状态更新:更新总流动性LtL_t和累积流动性指数CtiC_t^i

存款无需复杂前置条件验证,因增加流动性总是有益于系统。aTokens与底层资产恒定1:1映射,用户获得的代币数量等于存入资产数量:

aTokensamount=assetsamountaTokens_{amount} = assets_{amount}

aToken余额会随着CtiC_t^i增长而自动累积利息,因此无需在铸造阶段对汇率做额外调整,所有存款人共享同一指数带来的复利收益。 图6:存入资金

【图 6:存款流程】 该图展示了从资产转移、aToken铸造到状态更新的完整执行序列,凸显了协议将无形的存款权益即时转化为可编程代币的能力。

3.2 Redeem

赎回是存款的逆向过程,如图7所示,执行四个关键步骤:

  1. 额度计算:确认请求赎回的aToken数量 aToken余额本身已包含利息,因此赎回资金等于销毁的aToken数量。为了防止借款人撤走抵押导致风险露出,执行以下额外步骤:
  2. 健康因子验证:确保赎回后Hf>1H_f > 1,防止用户通过赎回导致抵押不足
  3. aToken销毁:销毁用户持有的aTokens
  4. 资产转移:将等量底层资产转移给用户

实际获得的资产金额为:

assetsamount=aTokensredeemedassets_{amount} = aTokens_{redeemed}

赎回操作特别设置了流动性检查,确保保留足够储备应对后续请求,避免传统金融中的"挤兑"风险。同时,健康因子检查构成防止系统坏账的第一道防线。 图7:赎回资金

【图 7:赎回流程】 该图突出展示"健康因子是否大于1"的关键验证点,强调协议在用户自由操作与系统安全之间的精妙平衡。

3.3 Borrow

借款是协议的核心功能,允许用户通过抵押获取资金。执行流程如图8所示:

  1. 抵押验证:计算健康因子Hf=TotalCollateralETH×LQaTotalBorrowsETH+TotalFeesETHH_f = \frac{TotalCollateral_{ETH} \times L_Q^a}{TotalBorrows_{ETH} + TotalFees_{ETH}}
  2. 额度检查:验证Borrowmax=TotalCollateralETH×LTVBorrow_{max} = TotalCollateral_{ETH} \times LTV
  3. 状态更新:更新BtB_tUU和利率参数
  4. 资产转移:将借款资产转移给用户

Aave采用隐式锁定机制:用户用作抵押的底层资产(可能是存入后获得的aTokens,也可能是其他支持抵押的资产)在借款时被协议锁定,直到债务偿清才能转移。这种设计简化了用户体验,同时确保抵押品安全。借款功能释放了加密资产的流动性价值,使用户无需出售资产即可获取资金。 图8:借入资金

【图 8:借款流程】 该图详细展示从健康因子计算、额度验证到资产转移的全流程,强调抵押品自动锁定机制对资本效率的提升。

3.4 Repay

还款操作灵活支持部分或全额偿还,包括本金、原始费用和累积利息:

  1. 金额计算:确定总还款额
  2. 资产转移:用户将资产转移至协议
  3. 债务更新:更新用户债务余额
  4. 抵押品释放:按比例解锁抵押品

浮动利率还款计算:

Repayamount=Bx×BvcBvcxRepay_{amount} = B_x \times \frac{B_{vc}}{B_{vcx}}

稳定利率还款计算:

Repayamount=Bx×(1+RsTyear)ΔTxRepay_{amount} = B_x \times \left(1 + \frac{R_s}{T_{year}}\right)^{\Delta T_x}

无固定还款期限的设计体现了DeFi对传统金融的突破,用户可随时还款降低资金成本,全额还款后抵押品完全解锁,极大提高了资本效率。 图9:偿还贷款

【图 9:还款流程】 该图展示了还款金额计算、资产转移和抵押品释放的联动机制,突出实时利息计算和按比例释放抵押品的设计精妙性。

3.5 Swap Rate

利率交换功能允许用户在借款期间切换利率类型:

  1. 资格验证:检查有效借款头寸
  2. 新利率计算:基于当前市场条件
  3. 债务转换:调整债务余额计算方式
  4. 状态更新:更新储备金的稳定/浮动借款比例

转换规则:

  • 浮动→稳定:使用当前RsR_s作为新利率
  • 稳定→浮动:使用当前RvR_v作为新利率
  • 未偿还债务作为新头寸本金

该功能为用户提供利率风险管理工具,但协议设置了防滥用机制:频繁切换可能触发稳定利率重平衡(4.4节),防止套利损害系统稳定性。 图10:转换利率

【图 10:利率交换流程】 该图展示了利率类型转换的完整验证-计算-更新流程,体现协议在提供灵活性与维护系统稳定之间的平衡设计。

3.6 Liquidation Call

清算机制是协议风险管理的核心:

  1. 状态验证:确认Hf<1H_f < 1
  2. 清算额度:计算min(0.5×TotalDebt,Amount needed to restore Hf>1)\min(0.5 \times TotalDebt, Amount\ needed\ to\ restore\ H_f > 1)
  3. 折扣计算:应用清算奖金确定折扣价格
  4. 资产交换:清算人支付债务,获取折扣抵押品

获得的抵押品计算:

Collateralreceived=Liquidationamount×(1+bonus)CollateralpriceCollateral_{received} = \frac{Liquidation_{amount} \times (1 + bonus)}{Collateral_{price}}

50%清算上限设计是关键保护机制:既能使HfH_f恢复到安全水平,又避免过度惩罚借款人。通过经济激励(折扣购买),协议实现无需中心化干预的自我修复,这是DeFi协议韧性的核心体现。 图11:清算

【图 11:清算流程】 该图明确展示50%清算上限的设计意义,平衡借款人保护与系统安全,避免一次性强平导致用户完全失去仓位。

3.7 Flash Loans

闪电贷是DeFi领域的革命性创新,实现无抵押借贷:

  1. 临时转移:资金转移至实现IFlashLoanEnabledContract接口的合约
  2. 执行操作:调用executeOperation()方法执行自定义逻辑
  3. 归还验证:检查ReturnedamountBorrowedamount×(1+feepercentage)Returned_{amount} \geq Borrowed_{amount} \times (1 + fee_{percentage})
  4. 状态更新:将手续费累积到储备金,并更新对应的流动性指数

若未满足归还条件,整个交易自动回滚,确保协议零风险。闪电贷利用区块链事务的原子性,解锁套利、抵押品置换、债务重组等高级用例,成为DeFi生态的基础金融原语。手续费“accrue to the reserve”意味着它会通过提升Liquidity Index的方式平均分配给该储备的所有存款人,而非直接增加可用流动性余额。 图12:闪电贷

【图 12:闪电贷流程】 该图凸显"检查资金是否归还"的关键判定点,展示原子性设计如何在无信任环境中保证系统安全。

3.8 Tokenization

aTokens是协议的核心创新,实现存款权益的代币化:

  • 自动生息aToken余额随时间自动增长
  • 利息重定向:可将累积利息定向至另一地址
  • 可组合性aTokens可作为其他DeFi协议的抵押品

aToken合约引入关键概念:

  • 用户x余额指数 ItxI_t^x:用户上次操作时的储备金标准化收入快照
  • 本金余额 BpB_p:存储在balances映射中的基础余额
  • 重定向地址 ArA_r:接收重定向利息的地址
  • 当前余额 BcxB_c^x:即aToken合约balanceOf()返回的余额,计算公式为: Bcx={0,if Bpx=0 and Brx=0Bpx+Brx(InIx1),if Ar0BpxInIx+Brx(InIx1),if Ar=0 B_c^x = \begin{cases} 0, & \text{if } B_p^x = 0 \text{ and } B_r^x = 0 \\ B_p^x + B_r^x(\frac{I^n}{I^x} - 1), & \text{if } A_r \neq 0 \\ B_p^x\frac{I^n}{I^x} + B_r^x(\frac{I^n}{I^x} - 1), & \text{if } A_r = 0 \end{cases}

3.8.1 Limitations of the tokenization model

aToken模型虽优于传统汇率模型,但存在两个关键限制:

  1. 无法一次性转移全部余额:因利息持续累积,转账后总会留下微量"粉尘余额”。协议选择遵守ERC20标准而非添加非标准逻辑,体现对互操作性的重视。可通过二次转账或赎回底层资产完全清除。

  2. 利息流重定向依赖本金余额:只有拥有非零BpB_p的账户才能重定向利息流。若用户赎回或转移全部aTokens,重定向设置将重置,且仅由重定向余额BrB_r产生的利息无法再次重定向。

这些限制反映了DeFi协议在创新与标准化之间的权衡。aToken模型优先保证安全性、可预测性和标准兼容性,而非追求理论上完美的功能集。这些权衡为后续协议迭代提供了明确的改进方向。

LendingPool合约通过这八大核心功能,构建了完整的去中心化借贷生态系统。每个功能都经过精心设计,在用户体验、系统安全和资本效率之间取得平衡,共同支撑Aave作为领先DeFi协议的技术基础。下一章将深入探讨稳定利率机制的理论基础与实现细节。

4 Stable Rate Theory

稳定利率是Aave协议的核心创新之一,旨在为借款人提供可预测的融资成本。然而,在池化借贷模型中实现真正固定的利率极具挑战性,因为资金成本随市场条件动态变化。本章探讨Aave如何在保持系统稳定性的同时,为用户提供近似固定利率的借贷体验。

4.1 Lending Rate Oracle

稳定利率机制的基础是Lending Rate Oracle(借贷利率预言机),如图13所示,该组件提供外部市场的实时利率数据:

图13:贷款利率预言机

【图 13:借贷利率预言机架构】 该图展示了预言机如何从多个中心化和去中心化平台收集利率数据,计算加权平均值,为协议提供市场基准。

市场平均借贷利率MrM_r定义为:

Mr=i=1nPriPvii=1nPviM_r = \frac{\sum_{i=1}^{n} P_r^i P_v^i}{\sum_{i=1}^{n} P_v^i}

其中PriP_r^i是平台ii的借贷利率,PviP_v^i是其借贷量。加权设计确保交易量更大的平台对基准利率有更大影响,反映真实市场供需。初始阶段,Aave团队每日更新此数据,未来将通过去中心化预言机网络实现完全自动化。预言机机制解决了链上协议无法直接获取高质量市场数据的难题,为稳定利率提供了锚定点。

4.2 Current Stable Borrow Rate RsR_s

当前稳定借款利率RsR_s基于市场基准和池内利用率动态计算:

Rs={Mr+UUoptimalRslope1,if UUoptimalMr+Rslope1+UUoptimal1UoptimalRslope2,if U>UoptimalR_s = \begin{cases} M_r + \frac{U}{U_{optimal}} R_{slope1}, & \text{if } U \leq U_{optimal} \\ M_r + R_{slope1} + \frac{U-U_{optimal}}{1-U_{optimal}} R_{slope2}, & \text{if } U > U_{optimal} \end{cases}

关键特性RsR_s仅影响新开的稳定利率头寸,不影响已有借款。这种设计避免了对现有用户造成突然冲击,同时允许系统适应市场变化。当池内资金利用率上升,RsR_s随之增加,反映资金稀缺性;当利用率下降,RsR_s降低,促进借贷活动。通过将市场基准MrM_r与内部利用率UU结合,协议在提供稳定利率的同时保持了对市场条件的敏感性。

4.3 Limitations on Stable Rate Positions

为防止稳定利率机制被滥用,协议实施了严格限制:

  1. 抵押比例限制(同一资产):用户无法存入超过借款金额的同种资产作为抵押。例如,不能存入1000万DAI作为抵押,然后借入100万DAI。这一规则防范了"利用率操纵攻击”:

    • 攻击者在同一储备中作为大额存款人,注入巨量可用流动性AtA_t,使利用率U=BtAt+BtU = \frac{B_t}{A_t+B_t}骤降,进而压低新稳定利率RsR_s
    • 在利率低点迅速借入资金,锁定低成本
    • 撤回存款(使AtA_t骤减)导致UURsR_sRlR_l暴涨
    • 将借入资金重新存入,赚取高收益

    虽然多账户攻击仍可能发生,但此限制迫使攻击者跨资产或跨账户操作,大幅提高了攻击成本和复杂性。

  2. 单用户借款上限:单一用户只能借取特定稳定利率下总流动性的TrT_r比例。这防止了单一大户垄断低价资金,确保流动性公平分配。TrT_r参数由治理设定,通常在5%-20%之间,具体取决于资产风险等级。

这些限制体现了DeFi协议的核心权衡:在提供用户体验的同时保护系统安全。看似严格的规则实际上构建了可持续的市场环境,防止少数参与者通过套利损害多数人利益。

4.4 Stable Rate Rebalancing

稳定利率重平衡机制是协议应对市场变化的关键防御:

上重平衡(Rebalancing Up):当用户x的稳定利率BsxB_s^x低于当前流动性利率RlR_l时:

Bsx<RlB_s^x < R_l

该用户的利率被重置为当前储备金的稳定借款利率BsB_s(白皮书原文称“the most recent value of BsB_s”),确保借款人不会长期占用远低于市场价格的资金,保护存款人收益。

下重平衡(Rebalancing Down):当用户x的稳定利率BsxB_s^x远高于当前稳定借款利率BsB_s时:

Bsx>Bs(1+ΔBs)B_s^x > B_s(1 + \Delta B_s)

其中ΔBs\Delta B_s是治理设定的阈值(例如20%),定义了重平衡窗口。当市场利率整体下降时,借款人可以被动获得更低利率,确保协议保持竞争力。

重平衡机制本质上是一种"软固定"利率模型:在市场稳定期间,用户享受相对固定的利率;在市场剧烈波动时,系统保护整体稳定性。这种设计在用户体验和系统健康之间找到平衡点,避免了传统"硬固定"利率在极端市场条件下的崩溃风险。

4.5 The Rebalancing Process

再平衡流程由公开函数rebalanceStableBorrowRate(address reserve, address user)实现,任何人均可调用,如图14所示:

图14:再平衡

【图 14:再平衡流程】 该图展示了重平衡触发条件、执行步骤和状态更新过程,强调已累积利息在重平衡后不受影响的设计细节。

执行流程

  1. 验证用户是否满足重平衡条件
  2. 计算新的稳定利率RsnewR_s^{new}(对应当前市场/策略输出)
  3. 保留已累积债务余额不变(白皮书特别强调:重平衡瞬间之前的复利余额不会被追溯修改,以保护借款人和存款人的既得权益)
  4. 将新利率应用于未来利息计算
  5. 更新储备金的平均稳定利率RsaR_{sa}

去中心化激励机制

  • 上重平衡:存款人有间接动机触发重平衡,因为提高借款利率会增加他们的收益
  • 下重平衡:借款人有直接动机为自己触发重平衡,降低融资成本

Aave提供监控代理自动执行重平衡,但即使代理停止工作,系统仍可依靠社区维护。这种设计体现了"有辅助的去中心化"理念:协议提供便利工具,但不依赖单一实体维持运行。重平衡过程中,已累积的债务余额不受影响,确保用户不会因利率调整而遭受意外损失,保障了协议的公平性和可预测性。

稳定利率理论代表了DeFi协议在金融工程上的重要突破:通过精心设计的算法和市场机制,在无需中心化干预的情况下,实现了传统金融中需要复杂衍生品才能达成的风险管理效果。下一章将总结Aave协议的核心创新及其对去中心化金融生态的影响。

5 Conclusion

Aave协议通过池化借贷模型重新定义了去中心化金融的流动性提供方式。与传统P2P匹配模式相比,池化设计实现了即时借贷、动态利率调整和更高的资本效率。所有贷款由超额抵押保障,风险通过健康因子HfH_f实时监控,确保系统在无需信任的环境中安全运行。

协议的两个关键创新重塑了DeFi借贷格局:

5.1 Stable Rates:可预测性的突破

稳定利率解决了加密资产借贷市场的核心痛点:利率波动性。通过结合外部市场数据、利用率曲线和重平衡机制,Aave为用户提供了在合理时间窗口内可预测的融资成本。这种设计不是理想化的"完全固定"利率,而是考虑了市场现实的"实用型稳定"方案。对于需要长期财务规划的用户(如对冲基金进行套利策略或企业进行运营资金管理),这一功能极大降低了风险管理复杂性,使DeFi从投机工具转变为实用金融基础设施。

5.2 Flash Loans:无信任原子性的革命

闪电贷利用区块链事务原子性,实现了完全无抵押借贷。这一创新解锁了多种高级金融用例:

  • 套利:跨平台价格差异捕获
  • 抵押品置换:无需先还款即可更换抵押资产
  • 债务重组:优化多头寸利率结构
  • 清算优化:自动化清算流程提高效率

闪电贷不依赖信用评估或担保,仅依靠"要么全部成功,要么全部失败"的原子性保证协议安全。这种机制代表了DeFi原生创新的典范:利用区块链独特属性,创造出传统金融无法实现的金融工具。

5.3 去中心化演进路线

Aave协议遵循渐进式去中心化策略:

  1. Pool Factory:未来版本将允许任何人基于Aave智能合约创建独立借贷池。每个池可定制:

    • 支持的资产类型
    • 风险参数(LTV、清算阈值)
    • 利率模型
    • 治理规则

    这一功能将协议从单一池扩展为多池生态系统,支持专业领域(如NFT抵押、机构级合规池)的定制需求。

  2. 双层治理架构

    • 协议层:由LEND代币持有者控制,决定核心协议升级和参数
    • 池层:由aTokens持有者控制,管理特定池的配置和资产列表

    治理权完全链上执行,所有投票结果自动转化为协议行动,无需中心化干预。这种结构平衡了全局协调性与局部自治性,为协议长期可持续发展奠定基础。

Aave协议代表了DeFi从简单借贷向复杂金融基础设施演进的关键一步。通过技术创新与经济机制设计的结合,协议在保持去中心化本质的同时,提供了接近传统金融的用户体验和可靠性。随着Pool Factory和完全去中心化治理的实现,Aave将从单一产品发展为支持多样化金融应用的协议层基础设施,推动整个DeFi生态向更高效、更包容的方向发展。