2020-11-26 09:21:18 +00:00
|
|
|
// SPDX-License-Identifier: agpl-3.0
|
|
|
|
pragma solidity 0.6.12;
|
|
|
|
|
|
|
|
import {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';
|
|
|
|
import {IScaledBalanceToken} from './IScaledBalanceToken.sol';
|
2021-01-28 10:05:19 +00:00
|
|
|
import {IInitializableAToken} from './IInitializableAToken.sol';
|
|
|
|
import {IAaveIncentivesController} from './IAaveIncentivesController.sol';
|
2020-11-26 09:21:18 +00:00
|
|
|
|
2021-01-28 10:05:19 +00:00
|
|
|
interface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {
|
2020-11-26 09:21:18 +00:00
|
|
|
/**
|
|
|
|
* @dev Emitted after the mint action
|
|
|
|
* @param from The address performing the mint
|
|
|
|
* @param value The amount being
|
|
|
|
* @param index The new liquidity index of the reserve
|
|
|
|
**/
|
|
|
|
event Mint(address indexed from, uint256 value, uint256 index);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @dev Mints `amount` aTokens to `user`
|
|
|
|
* @param user The address receiving the minted tokens
|
|
|
|
* @param amount The amount of tokens getting minted
|
|
|
|
* @param index The new liquidity index of the reserve
|
|
|
|
* @return `true` if the the previous balance of the user was 0
|
|
|
|
*/
|
|
|
|
function mint(
|
|
|
|
address user,
|
|
|
|
uint256 amount,
|
|
|
|
uint256 index
|
|
|
|
) external returns (bool);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @dev Emitted after aTokens are burned
|
|
|
|
* @param from The owner of the aTokens, getting them burned
|
|
|
|
* @param target The address that will receive the underlying
|
|
|
|
* @param value The amount being burned
|
|
|
|
* @param index The new liquidity index of the reserve
|
|
|
|
**/
|
|
|
|
event Burn(address indexed from, address indexed target, uint256 value, uint256 index);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @dev Emitted during the transfer action
|
|
|
|
* @param from The user whose tokens are being transferred
|
|
|
|
* @param to The recipient
|
|
|
|
* @param value The amount being transferred
|
|
|
|
* @param index The new liquidity index of the reserve
|
|
|
|
**/
|
|
|
|
event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @dev Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`
|
|
|
|
* @param user The owner of the aTokens, getting them burned
|
|
|
|
* @param receiverOfUnderlying The address that will receive the underlying
|
|
|
|
* @param amount The amount being burned
|
|
|
|
* @param index The new liquidity index of the reserve
|
|
|
|
**/
|
|
|
|
function burn(
|
|
|
|
address user,
|
|
|
|
address receiverOfUnderlying,
|
|
|
|
uint256 amount,
|
|
|
|
uint256 index
|
|
|
|
) external;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @dev Mints aTokens to the reserve treasury
|
|
|
|
* @param amount The amount of tokens getting minted
|
|
|
|
* @param index The new liquidity index of the reserve
|
|
|
|
*/
|
|
|
|
function mintToTreasury(uint256 amount, uint256 index) external;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @dev Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken
|
|
|
|
* @param from The address getting liquidated, current owner of the aTokens
|
|
|
|
* @param to The recipient
|
|
|
|
* @param value The amount of tokens getting transferred
|
|
|
|
**/
|
|
|
|
function transferOnLiquidation(
|
|
|
|
address from,
|
|
|
|
address to,
|
|
|
|
uint256 value
|
|
|
|
) external;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @dev Transfers the underlying asset to `target`. Used by the LendingPool to transfer
|
2020-11-26 09:29:53 +00:00
|
|
|
* assets in borrow(), withdraw() and flashLoan()
|
2021-03-01 16:47:27 +00:00
|
|
|
* @param user The recipient of the underlying
|
2020-11-26 09:21:18 +00:00
|
|
|
* @param amount The amount getting transferred
|
|
|
|
* @return The amount transferred
|
|
|
|
**/
|
|
|
|
function transferUnderlyingTo(address user, uint256 amount) external returns (uint256);
|
2021-01-28 10:05:19 +00:00
|
|
|
|
2021-03-01 16:47:27 +00:00
|
|
|
/**
|
|
|
|
* @dev Invoked to execute actions on the aToken side after a repayment.
|
|
|
|
* @param user The user executing the repayment
|
|
|
|
* @param amount The amount getting repaid
|
|
|
|
**/
|
|
|
|
function handleRepayment(address user, uint256 amount) external;
|
|
|
|
|
2021-04-01 12:27:09 +00:00
|
|
|
/**
|
|
|
|
* @dev implements the permit function as for
|
|
|
|
* https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md
|
|
|
|
* @param owner The owner of the funds
|
|
|
|
* @param spender The spender
|
|
|
|
* @param value The amount
|
|
|
|
* @param deadline The deadline timestamp, type(uint256).max for max deadline
|
|
|
|
* @param v Signature param
|
|
|
|
* @param s Signature param
|
|
|
|
* @param r Signature param
|
|
|
|
*/
|
|
|
|
function permit(
|
|
|
|
address owner,
|
|
|
|
address spender,
|
|
|
|
uint256 value,
|
|
|
|
uint256 deadline,
|
|
|
|
uint8 v,
|
|
|
|
bytes32 r,
|
|
|
|
bytes32 s
|
|
|
|
) external;
|
|
|
|
|
2021-01-28 10:05:19 +00:00
|
|
|
/**
|
|
|
|
* @dev Returns the address of the incentives controller contract
|
|
|
|
**/
|
|
|
|
function getIncentivesController() external view returns (IAaveIncentivesController);
|
2021-03-15 20:42:33 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @dev Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)
|
|
|
|
**/
|
|
|
|
function UNDERLYING_ASSET_ADDRESS() external view returns (address);
|
2020-11-26 09:21:18 +00:00
|
|
|
}
|