JavaScript 不可用。

我们检测到浏览器禁用了 JavaScript。请启用 JavaScript 或改用支持的浏览器来继续访问

AAVE V3 智能合约源码解读,aave-v3-core 部分

作者:Anban Chu

发表日期:2023年11月25日

所属目录:合约分析

前置介绍

AAVE 由下面的仓库组成。

本文解读 core 部分的逻辑。

合约结构

合约下面按照来逐个分析

  1. interfaces 接口
    1. IPool.sol
    2. xxx.sol
  2. xxx.sol

IPool.sol

# mint 指定金额的aToken给某地址
function mintUnbacked (address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;
function backUnbacked (address asset, uint256 amount, uint256 fee) external returns (uint256);

# 存: 用户提供 100 USDC 并获得 100 aUSDC 回报
function supply (address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;
function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;
# 取: 用户有100 aUSDC,调用withdraw()并收到100 USDC,燃烧这100 aUSDC
function withdraw (address asset, uint256 amount, address to) external returns (uint256);
# 借: 拥有抵押品,成为借款人,借入金额(interestRateMode)
function borrow(address asset, uint256 amount, uint256 interestRateMode, uint16 referralCode, address onBehalfOf) external;
# 还: 偿还借入的“金额”,销毁所拥有的等值债务代币
function repay(address asset, uint256 amount, uint256 interestRateMode, address onBehalfOf) external returns (uint256);
# 还: 通过AToken
function repayWithATokens(address asset, uint256 amount, uint256 interestRateMode) external returns (uint256);

# 授权存
function supplyWithPermit(address asset,uint256 amount,address onBehalfOf,uint16 referralCode,
                          uint256 deadline,uint8 permitV,bytes32 permitR,bytes32 permitS) external;
# 授权还
function repayWithPermit(address asset, uint256 amount, uint256 interestRateMode, address onBehalfOf,
          uint256 deadline, uint8 permitV, bytes32 permitR, bytes32 permitS) external returns (uint256);

function flashLoan(address receiverAddress, address[] calldata assets, uint256[] calldata amounts,
          uint256[] calldata interestRateModes, address onBehalfOf, bytes calldata params,
          uint16 referralCode) external;
function flashLoanSimple(address receiverAddress, address asset, uint256 amount, bytes calldata params,
            uint16 referralCode) external;


function swapBorrowRateMode(address asset, uint256 interestRateMode) external;
function rebalanceStableBorrowRate(address asset, address user) external;
function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;
function liquidationCall(address collateralAsset, address debtAsset, address user, uint256 debtToCover, bool receiveAToken) external;
function getUserAccountData(address user) external view returns (uint256 totalCollateralBase, uint256 totalDebtBase, uint256 availableBorrowsBase, uint256 currentLiquidationThreshold, uint256 ltv, uint256 healthFactor );
function initReserve(address asset, address aTokenAddress, address stableDebtAddress, address variableDebtAddress, address interestRateStrategyAddress) external;
function dropReserve(address asset) external;
function setReserveInterestRateStrategyAddress(address asset, address rateStrategyAddress) external;
function setConfiguration(address asset, DataTypes.ReserveConfigurationMap calldata configuration) external;
function getConfiguration(address asset) external view returns (DataTypes.ReserveConfigurationMap memory);
function getUserConfiguration(address user) external view returns (DataTypes.UserConfigurationMap memory);
function getReserveNormalizedIncome(address asset) external view returns (uint256);
function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);
function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);
function finalizeTransfer(address asset, address from, address to, uint256 amount, uint256 balanceFromBefore,uint256 balanceToBefore) external;
function getReservesList() external view returns (address[] memory);
function getReserveAddressById(uint16 id) external view returns (address);
function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);
function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;
function updateFlashloanPremiums(uint128 flashLoanPremiumTotal, uint128 flashLoanPremiumToProtocol) external;
function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;
function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);
function setUserEMode(uint8 categoryId) external;
function getUserEMode(address user) external view returns (uint256);
function resetIsolationModeTotalDebt(address asset) external;
function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);
function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);
function BRIDGE_PROTOCOL_FEE() external view returns (uint256);
function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);
function MAX_NUMBER_RESERVES() external view returns (uint16);
function mintToTreasury(address[] calldata assets) external;
function rescueTokens(address token, address to, uint256 amount) external;

1)核心方法

4)辅助方法

5)管理方法

6)合约事件

XXX.sol

1)只读方法

2)构造函数 (部署时候需要的配置)

3)核心方法

4)辅助方法

5)管理方法

6)合约事件

参考





以上就是本篇文章的全部内容了,希望对你有帮助。

>> 本站不提供评论服务,技术交流请在 Twitter 上找我 @anbang_account