Overview

Aave 协议存储仓库:https://github.com/aave/protocol-v2/tree/ice/mainnet-deployment-03-12-2020

img

核心合约

LendingPoolAddressesProviderLendingPoolAddressProviderRegistry都控制协议的可升级性,包括资产列表和协议参数的更改。AAVE 持有者将通过 Aave 协议治理控制二者。

Aave v2 中的主要合约及其用途:

LendingPool

Aave 协议的主要入口点。与 Aave 的大多数交互将通过 LendingPool 进行,包括:

  • deposit()
  • borrow()
  • repay()
  • swapBorrowRateMode()
  • swapUserUseReserveAsCollateral()
  • withdraw()
  • flashloan()
  • liquidationCall()

LendingPoolAddressesProvider

包含不同市场的活跃LendingPoolAddressesProvider地址列表

aTokens

在整个 Aave 协议中使用的生产收益的代币化存款。他们实现了大多数标准的 EIP-20/ERC20 token 方法,只需稍作修改,以及 Aave 特定的方法,包括:

  • scaledBalanceOf() scaled - 缩放
  • getScaledBalanceAndSupply()
  • scaledTotalSupply()

所有 aToken 还实施了 EIP-2612,通过 permit()函数实现无 gas 转账和单笔交易 approve + 操作。

Stable and Variable Debt Tokens 稳定利率和浮动利率债务代币

整个 Aave 协议中使用的代币化借款头寸大多数标准的 EIP-20/ERC20 方法都被禁用,因为债务 token 是不可转让的。

更多信息,参阅 Debt Tokens 部分。

Supporting contracts

以下合约通常不应直接交互,而是通过合约调用在整个 Aave 协议中使用。

LendingPoolCollateralManager

通过 LendingPool合约使用 delegatecall,LendingPoolCollateralManager 实现了设计协议中抵押品管理的操作,包括:

  • liquidationCall()

上述函数只能通过主 LendingPool合约调用。

Lending Pool Configurator

提供 LendingPool 合约的配置功能。它还具有许多重要功能:

  • 激活/停用储备金 (reserves)
  • 启用/禁用储备金借款
  • 启用/禁用使用储备金作为抵押品
  • 启用/禁用储备金的稳定利率借款
  • 冻结/解冻储备金
  • 更新储备金的 Loan to Value
  • 更新储备金的清算阈值
  • 更新储备金的 decimals
  • 更新储备的利率策略地址(interest rate strategy address)
  • 在紧急情况下激活/停用 LendingPool 的所有功能

对于上述所有函数,相关事件(event)都会在链上触发。任何人都可以监控这些更改,以了解何时修改或添加或删除值。

Interest Rate Strategy(利率策略)

保存计算和更新特定储备金的利率所需的信息。

每个合约都使用每种货币的相关参数存储优化的基础曲线。这意味着有一个数学函数来确定每个资产池(asset pool)的利率。利率根据接入资金的数量和资产池的总流动性(即利用率 utilisation)而变化。

优化的基础曲线参数为:

  • baseVariableBorrowRate(基础变量借款率)
  • variableRateSlope1(Slope 斜率)
  • variableRateSlope2
  • stableRateSlope1
  • stableRateSlope2

利率是根据可用流动性和总借款金额计算的。

Price Oracle Provider

提供整个 Aave 协议所需的资产价格数据,必要时使用 Chainlink 和 fallback。详情参阅 Price Oracle 页面

Library contracts

整个 Aave 协议还使用了各种库,可以在 Github 上找到。