AAVE 核心协议 Overview
Overview
Aave 协议存储仓库:https://github.com/aave/protocol-v2/tree/ice/mainnet-deployment-03-12-2020
核心合约
LendingPoolAddressesProvider
和 LendingPoolAddressProviderRegistry
都控制协议的可升级性,包括资产列表和协议参数的更改。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 上找到。