中文
铁叔

天地不仁 以万物为刍狗


  • 首页

  • 归档

  • 关于我

  • 公益404

  • 搜索

AAVE源代码分析 -- AAVE代码整体架构

时间: 2021-10-10   |   分类: Defi   AAVE   | 字数: 1318 字 | 阅读: 3分钟 | 阅读次数:

AAVE 整体架构

AAVE是一个借贷协议, 因此, 核心是围绕着存款,借款,还款,清算这四大环节展开的。我认为, AAVE 之所以看起来很复杂, 非常重要的一点是因为定息借款的存在, 极大的提高了利率模型的复杂度, 否则, AAVE 应该更加清晰。

AAVE 架构图如下:

目录结构及文件

合约主要在 contracts 目录下, contracts 目录结构如下:

├─adapters  // 外部合约适配层
│  └─interfaces
├─dependencies  // 一些基础库, 大部分基于 openzeppelin 修改
│  └─openzeppelin
│      ├─contracts
│      └─upgradeability
├─deployments // 部署相关
├─flashloan  // 闪电贷
│  ├─base
│  └─interfaces
├─interfaces  // 接口定义
├─misc
│  └─interfaces
├─mocks    // 测试相关
│  ├─attacks
│  ├─dependencies
│  │  └─weth
│  ├─flashloan
│  ├─oracle
│  │  └─CLAggregators
│  ├─swap
│  ├─tokens
│  └─upgradeability
└─protocol   // 核心实现, 核心代码全部在这个目录下
    ├─configuration
    ├─lendingpool
    ├─libraries
    │  ├─aave-upgradeability
    │  ├─configuration
    │  ├─helpers
    │  ├─logic
    │  ├─math
    │  └─types
    └─tokenization
        └─base

结合 AAVE 的部署代码, 算上Mock合约, AAVE 大概有 30 个合约:

  LendingPoolAddressesProvider = 'LendingPoolAddressesProvider',
  LendingPoolAddressesProviderRegistry = 'LendingPoolAddressesProviderRegistry',
  LendingPoolParametersProvider = 'LendingPoolParametersProvider',
  LendingPoolConfigurator = 'LendingPoolConfigurator',
  ValidationLogic = 'ValidationLogic',
  ReserveLogic = 'ReserveLogic',
  GenericLogic = 'GenericLogic',
  LendingPool = 'LendingPool',
  PriceOracle = 'PriceOracle',
  Proxy = 'Proxy',
  LendingRateOracle = 'LendingRateOracle',
  AaveOracle = 'AaveOracle',
  DefaultReserveInterestRateStrategy = 'DefaultReserveInterestRateStrategy',
  LendingPoolCollateralManager = 'LendingPoolCollateralManager',
  InitializableAdminUpgradeabilityProxy = 'InitializableAdminUpgradeabilityProxy',
  WalletBalanceProvider = 'WalletBalanceProvider',
  AToken = 'AToken',
  DelegationAwareAToken = 'DelegationAwareAToken',
  AaveProtocolDataProvider = 'AaveProtocolDataProvider',
  StableDebtToken = 'StableDebtToken',
  VariableDebtToken = 'VariableDebtToken',
  FeeProvider = 'FeeProvider',
  TokenDistributor = 'TokenDistributor',
  StableAndVariableTokensHelper = 'StableAndVariableTokensHelper',
  ATokensAndRatesHelper = 'ATokensAndRatesHelper',
  UiPoolDataProvider = 'UiPoolDataProvider',
  WETHGateway = 'WETHGateway',
  UniswapLiquiditySwapAdapter = 'UniswapLiquiditySwapAdapter',
  UniswapRepayAdapter = 'UniswapRepayAdapter',
  FlashLiquidationAdapter = 'FlashLiquidationAdapter',

  以下是 Mock 合约
  MockAToken = 'MockAToken',
  MockAggregator = 'MockAggregator',
  WETHMocked = 'WETHMocked',
  SelfdestructTransferMock = 'SelfdestructTransferMock',
  MockStableDebtToken = 'MockStableDebtToken',
  MockVariableDebtToken = 'MockVariableDebtToken',
  MockFlashLoanReceiver = 'MockFlashLoanReceiver',
  MockUniswapV2Router02 = 'MockUniswapV2Router02',
  MintableERC20 = 'MintableERC20',  // mock
  MintableDelegationERC20 = 'MintableDelegationERC20',  // mock

借贷核心

借贷核心包括:

  1. 利率的计算 AAVE 将利率的计算移到了三个library中,路径为 contracts\protocol\libraries\logic\, 主要是:
  • GenericLogic.sol 计算用户 account

  • ReserveLogic.sol 核心中的核心, 各种利率的计算

  • ValidationLogic.sol 这个库主要是各种安全校验, 存款校验, 借款校验, 还款校验, 清算校验, 转账校验, 活息定息转换校验等等

  1. LendPool LendPool 是借贷动作的入口, 包括存款,借款,还款,清算等动作。

  2. LendingPoolCollateralManager 主要负责完成清算

  3. DefaultReserveInterestRateStrategy 利率变化的策略:calculateInterestRates

tokenization

AAVE 中用户的存款,借款都是以 token 的方式记录。Compound 中,只有存款是以 token 的方式记录,借款并没有 tokenization. 其实, 我觉得借款并没有 tokenization 的必要。

  1. AToken 存款凭证,类似于 Compound 中的 cToken。当用户存入 token 时,AAVE 给用户 mint 对应的 aToken

  2. DelegationAwareAToken AToken 的代理

  3. StableDebtToken 定息借款 token, 用于记录用户的定息借款

  4. VariableDebtToken 活息借款 token, 用于记录用户的活息借款

市场及Provider、配置管理

  • LendingPoolAddressesProvider
  • LendingPoolAddressesProviderRegistry
  • LendingPoolParametersProvider
  • LendingPoolConfigurator

Oracle

辅助合约

  • AaveProtocolDataProvider 把一些整合并计算好, 方便前端调用

  • UiPoolDataProvider 把一些整合并计算好, 方便前端调用

  • StableAndVariableTokensHelper 辅助管理合约, 同时设置多个 asset 的 borrowRate

  • WalletBalanceProvider 查询 balance 信息, 并不是很必要, 实际上可以通过 multicall 来完成这样的功能。当然, 这样可以更有针对性的获取数据, 速度也更快

  • ATokensAndRatesHelper 辅助管理合约, 设置配置信息

adapter

主要是 uniswap adapter,包括以下几个合约:

  • UniswapLiquiditySwapAdapter
  • UniswapRepayAdapter
  • FlashLiquidationAdapter

Proxy

  • LendPool 的 proxy

这么多合约确实让人眼花缭乱,然而,我们可以先从核心开始分析,也就是利率模型和风险控制相关的合约,大约7-8个合约。

#AAVE# #Defi# #Solidity# #Dapp# #Lend protocol# #architecture#

声明:AAVE源代码分析 -- AAVE代码整体架构

链接:https://guotie.github.io/post/aave/how-aave-interest-update/

作者:铁叔

声明: 本博客文章除特别声明外,均采用 CC BY-NC-SA 3.0许可协议,转载请注明出处!

创作实属不易,如有帮助,那就打赏博主些许茶钱吧 ^_^
WeChat Pay

微信打赏

Alipay

支付宝打赏

AAVE源代码分析 -- AAVE 利率
solidity函数selector的计算
铁叔

铁叔

千里之行 始于足下

25 日志
14 分类
56 标签
GitHub twitter telegram email medium
标签云
  • Solidity
  • Defi
  • Aave
  • Compound
  • Abi
  • Dapp
  • Ethereum
  • Evm
  • Lend protocol
  • Lending
© 2010 - 2024 铁叔
Powered by - Hugo v0.119.0 / Theme by - NexT
/
0%