aave-protocol-v2/contracts/interfaces/IRewardsAwareAToken.sol
2021-05-12 12:55:13 +02:00

121 lines
4.6 KiB
Solidity

// SPDX-License-Identifier: agpl-3.0
pragma solidity 0.6.12;
import {IAToken} from './IAToken.sol';
interface IRewardsAwareAToken is IAToken {
/**
* @dev Emitted after the update rewards state
* @param from The address which can claim rewards
* @param token The reward token address
* @param claimable The amount available to claim
**/
event UserRewardSnapshot(address indexed from, address indexed token, uint256 claimable);
/**
* @dev Emitted after the claim action
* @param from The address performing the claim
* @param token The reward token address
* @param claimed The amount claimed
* @param rewards The rewards amount, this can differ from claimed rewards if is staked
**/
event Claim(address indexed from, address indexed token, uint256 claimed, uint256 rewards);
/**
* @dev Emitted after the update of the user index
* @param from The address with updated user index
* @param token The reward token address
* @param newIndex The latest user index
**/
event UserIndexUpdate(address indexed from, address indexed token, uint256 newIndex);
/**
* @dev Emitted after the update of the reward token index
* @param token The reward token address
* @param newIndex The amount available to claim
**/
event RewardIndexUpdate(address indexed token, uint256 newIndex);
/**
* @dev Emitted after the update of the rewards reserve factor
* @param reserveFactor the new reserve factor
**/
event RewardsReserveFactorUpdate(uint256 reserveFactor);
/**
* @dev Get the current claimable rewards dinamically by calling the external rewards contract and simulate the rewards without storage
* @param token Address of the rewards token
* @param user Address of the account to get current claimable rewards
* @return The claimable rewards of the address passed at the "user" argument
*/
function getClaimableRewards(address token, address user) external view returns (uint256);
/**
* @dev Get the total lifetime rewards of an address from contract storage
* @param token Address of the rewards token
* @param user Address of the account to get the total lifetime rewards
* @return The total lifetime rewards of an address, this includes claimed and pending rewards
*/
function getUserRewardsAccrued(address token, address user) external view returns (uint256);
/**
* @dev Get the claimed rewards of an address from contract storage
* @param token Address of the rewards token
* @param user Address of the account to get the claimed rewards
* @return The claimed rewards of an address
*/
function getUserClaimedRewards(address token, address user) external view returns (uint256);
/**
* @dev Get the total lifetime rewards of the aToken contract itself, from contract storage
* @param token Address of the rewards token
* @return The total lifetime rewards, this includes claimed and pending rewards from the aToken contract
*/
function getLifetimeRewards(address token) external view returns (uint256);
/**
* @dev Get lifetime minted rewards of a rewards token
* @param token Address of the rewards token
* @return The lifetime rewards claimed
*/
function getLifetimeClaimed(address token) external view returns (uint256);
/**
* @dev Get the user checkpoint of the aToken contract itself, from contract storage
* @param token Address of the rewards token
* @param user Address of the account to get the claimed rewards
* @return The total lifetime rewards, this includes claimed and pending rewards from the aToken contract
*/
function getUserIndex(address token, address user) external view returns (uint256);
/**
* @dev Get the rewards ERC20 token address by index position
* @param index The position of the rewards, starting from zero up
* @return The rewards ERC20 token address
*/
function getRewardsTokenAddress(uint256 index) external view returns (address);
/**
* @dev Get all the rewards token addresses
* @return The list of rewards token addresseses
*/
function getRewardsTokenAddressList() external view returns (address[9] memory);
/**
* @dev Return the rewards reserve factor to the treasury
* @return reserve factor in percent value
*/
function getRewardsReserveFactor() external view returns (uint256);
/**
* @dev Claim the available reward from the caller and transfers to `msg.sender`
*/
function claim(address token) external;
/**
* @dev Set the rewards reserve factor to the treasury, only allowed by LendingPoolAddressesProvider pool admin
* @param reserveFactor reserve factor in percent value
*/
function setRewardsReserveFactor(uint256 reserveFactor) external;
}