Also available on Github.
// SPDX-License-Identifier: agpl-3.0pragma solidity 0.6.12;pragma experimental ABIEncoderV2;​import {ILendingPoolAddressesProvider} from './ILendingPoolAddressesProvider.sol';import {DataTypes} from './DataTypes.sol';​interface ILendingPool {/*** @dev Emitted on deposit()* @param reserve The address of the underlying asset of the reserve* @param user The address initiating the deposit* @param onBehalfOf The beneficiary of the deposit, receiving the aTokens* @param amount The amount deposited* @param referral The referral code used**/event Deposit(address indexed reserve,address user,address indexed onBehalfOf,uint256 amount,uint16 indexed referral);​/*** @dev Emitted on withdraw()* @param reserve The address of the underlyng asset being withdrawn* @param user The address initiating the withdrawal, owner of aTokens* @param to Address that will receive the underlying* @param amount The amount to be withdrawn**/event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);​/*** @dev Emitted on borrow() and flashLoan() when debt needs to be opened* @param reserve The address of the underlying asset being borrowed* @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just* initiator of the transaction on flashLoan()* @param onBehalfOf The address that will be getting the debt* @param amount The amount borrowed out* @param borrowRateMode The rate mode: 1 for Stable, 2 for Variable* @param borrowRate The numeric rate at which the user has borrowed* @param referral The referral code used**/event Borrow(address indexed reserve,address user,address indexed onBehalfOf,uint256 amount,uint256 borrowRateMode,uint256 borrowRate,uint16 indexed referral);​/*** @dev Emitted on repay()* @param reserve The address of the underlying asset of the reserve* @param user The beneficiary of the repayment, getting his debt reduced* @param repayer The address of the user initiating the repay(), providing the funds* @param amount The amount repaid**/event Repay(address indexed reserve,address indexed user,address indexed repayer,uint256 amount);​/*** @dev Emitted on swapBorrowRateMode()* @param reserve The address of the underlying asset of the reserve* @param user The address of the user swapping his rate mode* @param rateMode The rate mode that the user wants to swap to**/event Swap(address indexed reserve, address indexed user, uint256 rateMode);​/*** @dev Emitted on setUserUseReserveAsCollateral()* @param reserve The address of the underlying asset of the reserve* @param user The address of the user enabling the usage as collateral**/event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);​/*** @dev Emitted on setUserUseReserveAsCollateral()* @param reserve The address of the underlying asset of the reserve* @param user The address of the user enabling the usage as collateral**/event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);​/*** @dev Emitted on rebalanceStableBorrowRate()* @param reserve The address of the underlying asset of the reserve* @param user The address of the user for which the rebalance has been executed**/event RebalanceStableBorrowRate(address indexed reserve, address indexed user);​/*** @dev Emitted on flashLoan()* @param target The address of the flash loan receiver contract* @param initiator The address initiating the flash loan* @param asset The address of the asset being flash borrowed* @param amount The amount flash borrowed* @param premium The fee flash borrowed* @param referralCode The referral code used**/event FlashLoan(address indexed target,address indexed initiator,address indexed asset,uint256 amount,uint256 premium,uint16 referralCode);​/*** @dev Emitted when the pause is triggered.*/event Paused();​/*** @dev Emitted when the pause is lifted.*/event Unpaused();​/*** @dev Emitted when a borrower is liquidated. This event is emitted by the LendingPool via* LendingPoolCollateral manager using a DELEGATECALL* This allows to have the events in the generated ABI for LendingPool.* @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation* @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation* @param user The address of the borrower getting liquidated* @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover* @param liquidatedCollateralAmount The amount of collateral received by the liiquidator* @param liquidator The address of the liquidator* @param receiveAToken `true` if the liquidators wants to receive the collateral aTokens, `false` if he wants* to receive the underlying collateral asset directly**/event LiquidationCall(address indexed collateralAsset,address indexed debtAsset,address indexed user,uint256 debtToCover,uint256 liquidatedCollateralAmount,address liquidator,bool receiveAToken);​/*** @dev Emitted when the state of a reserve is updated. NOTE: This event is actually declared* in the ReserveLogic library and emitted in the updateInterestRates() function. Since the function is internal,* the event will actually be fired by the LendingPool contract. The event is therefore replicated here so it* gets added to the LendingPool ABI* @param reserve The address of the underlying asset of the reserve* @param liquidityRate The new liquidity rate* @param stableBorrowRate The new stable borrow rate* @param variableBorrowRate The new variable borrow rate* @param liquidityIndex The new liquidity index* @param variableBorrowIndex The new variable borrow index**/event ReserveDataUpdated(address indexed reserve,uint256 liquidityRate,uint256 stableBorrowRate,uint256 variableBorrowRate,uint256 liquidityIndex,uint256 variableBorrowIndex);​/*** @dev Deposits an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.* - E.g. User deposits 100 USDC and gets in return 100 aUSDC* @param asset The address of the underlying asset to deposit* @param amount The amount to be deposited* @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user* wants to receive them on his own wallet, or a different address if the beneficiary of aTokens* is a different wallet* @param referralCode Code used to register the integrator originating the operation, for potential rewards.* 0 if the action is executed directly by the user, without any middle-man**/function deposit(address asset,uint256 amount,address onBehalfOf,uint16 referralCode) external;​/*** @dev Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned* E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC* @param asset The address of the underlying asset to withdraw* @param amount The underlying amount to be withdrawn* - Send the value type(uint256).max in order to withdraw the whole aToken balance* @param to Address that will receive the underlying, same as msg.sender if the user* wants to receive it on his own wallet, or a different address if the beneficiary is a* different wallet* @return The final amount withdrawn**/function withdraw(address asset,uint256 amount,address to) external returns (uint256);​/*** @dev Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower* already deposited enough collateral, or he was given enough allowance by a credit delegator on the* corresponding debt token (StableDebtToken or VariableDebtToken)* - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet* and 100 stable/variable debt tokens, depending on the `interestRateMode`* @param asset The address of the underlying asset to borrow* @param amount The amount to be borrowed* @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable* @param referralCode Code used to register the integrator originating the operation, for potential rewards.* 0 if the action is executed directly by the user, without any middle-man* @param onBehalfOf Address of the user who will receive the debt. Should be the address of the borrower itself* calling the function if he wants to borrow against his own collateral, or the address of the credit delegator* if he has been given credit delegation allowance**/function borrow(address asset,uint256 amount,uint256 interestRateMode,uint16 referralCode,address onBehalfOf) external;​/*** @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned* - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address* @param asset The address of the borrowed underlying asset previously borrowed* @param amount The amount to repay* - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`* @param rateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable* @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the* user calling the function if he wants to reduce/remove his own debt, or the address of any other* other borrower whose debt should be removed* @return The final amount repaid**/function repay(address asset,uint256 amount,uint256 rateMode,address onBehalfOf) external returns (uint256);​/*** @dev Allows a borrower to swap his debt between stable and variable mode, or viceversa* @param asset The address of the underlying asset borrowed* @param rateMode The rate mode that the user wants to swap to**/function swapBorrowRateMode(address asset, uint256 rateMode) external;​/*** @dev Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.* - Users can be rebalanced if the following conditions are satisfied:* 1. Usage ratio is above 95%* 2. the current deposit APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too much has been* borrowed at a stable rate and depositors are not earning enough* @param asset The address of the underlying asset borrowed* @param user The address of the user to be rebalanced**/function rebalanceStableBorrowRate(address asset, address user) external;​/*** @dev Allows depositors to enable/disable a specific deposited asset as collateral* @param asset The address of the underlying asset deposited* @param useAsCollateral `true` if the user wants to use the deposit as collateral, `false` otherwise**/function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;​/*** @dev Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1* - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives* a proportionally amount of the `collateralAsset` plus a bonus to cover market risk* @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation* @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation* @param user The address of the borrower getting liquidated* @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover* @param receiveAToken `true` if the liquidators wants to receive the collateral aTokens, `false` if he wants* to receive the underlying collateral asset directly**/function liquidationCall(address collateralAsset,address debtAsset,address user,uint256 debtToCover,bool receiveAToken) external;​/*** @dev Allows smartcontracts to access the liquidity of the pool within one transaction,* as long as the amount taken plus a fee is returned.* IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept into consideration.* For further details please visit https://developers.aave.com* @param receiverAddress The address of the contract receiving the funds, implementing the IFlashLoanReceiver interface* @param assets The addresses of the assets being flash-borrowed* @param amounts The amounts amounts being flash-borrowed* @param modes Types of the debt to open if the flash loan is not returned:* 0 -> Don't open any debt, just revert if funds can't be transferred from the receiver* 1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address* 2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address* @param onBehalfOf The address that will receive the debt in the case of using on `modes` 1 or 2* @param params Variadic packed params to pass to the receiver as extra information* @param referralCode Code used to register the integrator originating the operation, for potential rewards.* 0 if the action is executed directly by the user, without any middle-man**/function flashLoan(address receiverAddress,address[] calldata assets,uint256[] calldata amounts,uint256[] calldata modes,address onBehalfOf,bytes calldata params,uint16 referralCode) external;​/*** @dev Returns the user account data across all the reserves* @param user The address of the user* @return totalCollateralETH the total collateral in ETH of the user* @return totalDebtETH the total debt in ETH of the user* @return availableBorrowsETH the borrowing power left of the user* @return currentLiquidationThreshold the liquidation threshold of the user* @return ltv the loan to value of the user* @return healthFactor the current health factor of the user**/function getUserAccountData(address user)externalviewreturns (uint256 totalCollateralETH,uint256 totalDebtETH,uint256 availableBorrowsETH,uint256 currentLiquidationThreshold,uint256 ltv,uint256 healthFactor);​function initReserve(address reserve,address aTokenAddress,address stableDebtAddress,address variableDebtAddress,address interestRateStrategyAddress) external;​function setReserveInterestRateStrategyAddress(address reserve, address rateStrategyAddress)external;​function setConfiguration(address reserve, uint256 configuration) external;​/*** @dev Returns the configuration of the reserve* @param asset The address of the underlying asset of the reserve* @return The configuration of the reserve**/function getConfiguration(address asset)externalviewreturns (DataTypes.ReserveConfigurationMap memory);​/*** @dev Returns the configuration of the user across all the reserves* @param user The user address* @return The configuration of the user**/function getUserConfiguration(address user)externalviewreturns (DataTypes.UserConfigurationMap memory);​/*** @dev Returns the normalized income normalized income of the reserve* @param asset The address of the underlying asset of the reserve* @return The reserve's normalized income*/function getReserveNormalizedIncome(address asset) external view returns (uint256);​/*** @dev Returns the normalized variable debt per unit of asset* @param asset The address of the underlying asset of the reserve* @return The reserve normalized variable debt*/function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);​/*** @dev Returns the state and configuration of the reserve* @param asset The address of the underlying asset of the reserve* @return The state of the reserve**/function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);​function finalizeTransfer(address asset,address from,address to,uint256 amount,uint256 balanceFromAfter,uint256 balanceToBefore) external;​function getReservesList() external view returns (address[] memory);​function getAddressesProvider() external view returns (ILendingPoolAddressesProvider);​function setPause(bool val) external;​function paused() external view returns (bool);}​​
// SPDX-License-Identifier: agpl-3.0pragma solidity 0.6.12;​library DataTypes {// refer to the whitepaper, section 1.1 basic concepts for a formal description of these properties.struct ReserveData {//stores the reserve configurationReserveConfigurationMap configuration;//the liquidity index. Expressed in rayuint128 liquidityIndex;//variable borrow index. Expressed in rayuint128 variableBorrowIndex;//the current supply rate. Expressed in rayuint128 currentLiquidityRate;//the current variable borrow rate. Expressed in rayuint128 currentVariableBorrowRate;//the current stable borrow rate. Expressed in rayuint128 currentStableBorrowRate;uint40 lastUpdateTimestamp;//tokens addressesaddress aTokenAddress;address stableDebtTokenAddress;address variableDebtTokenAddress;//address of the interest rate strategyaddress interestRateStrategyAddress;//the id of the reserve. Represents the position in the list of the active reservesuint8 id;}​struct ReserveConfigurationMap {//bit 0-15: LTV//bit 16-31: Liq. threshold//bit 32-47: Liq. bonus//bit 48-55: Decimals//bit 56: Reserve is active//bit 57: reserve is frozen//bit 58: borrowing is enabled//bit 59: stable rate borrowing enabled//bit 60-63: reserved//bit 64-79: reserve factoruint256 data;}​struct UserConfigurationMap {uint256 data;}​enum InterestRateMode {NONE, STABLE, VARIABLE}}​
​