mirror of
https://github.com/Instadapp/aave-protocol-v2.git
synced 2024-07-29 21:47:30 +00:00
Merge branch 'feat/split-ui-dataprovider-logic' of github.com:aave/protocol-v2 into feat/188-avalanche-market
This commit is contained in:
commit
b27092bacc
|
@ -30,6 +30,21 @@ interface IAaveIncentivesController {
|
||||||
uint256
|
uint256
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* LEGACY **************************
|
||||||
|
* @dev Returns the configuration of the distribution for a certain asset
|
||||||
|
* @param asset The address of the reference asset of the distribution
|
||||||
|
* @return The asset index, the emission per second and the last updated timestamp
|
||||||
|
**/
|
||||||
|
function assets(address asset)
|
||||||
|
external
|
||||||
|
view
|
||||||
|
returns (
|
||||||
|
uint128,
|
||||||
|
uint128,
|
||||||
|
uint256
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @dev Whitelists an address to claim the rewards on behalf of another address
|
* @dev Whitelists an address to claim the rewards on behalf of another address
|
||||||
* @param user The address of the user
|
* @param user The address of the user
|
||||||
|
|
|
@ -25,7 +25,7 @@ contract UiPoolDataProvider is IUiPoolDataProvider {
|
||||||
using UserConfiguration for DataTypes.UserConfigurationMap;
|
using UserConfiguration for DataTypes.UserConfigurationMap;
|
||||||
|
|
||||||
address public constant MOCK_USD_ADDRESS = 0x10F7Fc1F91Ba351f9C629c5947AD69bD03C05b96;
|
address public constant MOCK_USD_ADDRESS = 0x10F7Fc1F91Ba351f9C629c5947AD69bD03C05b96;
|
||||||
IAaveIncentivesController public immutable incentivesController;
|
IAaveIncentivesController public immutable override incentivesController;
|
||||||
IPriceOracleGetter public immutable oracle;
|
IPriceOracleGetter public immutable oracle;
|
||||||
|
|
||||||
constructor(IAaveIncentivesController _incentivesController, IPriceOracleGetter _oracle) public {
|
constructor(IAaveIncentivesController _incentivesController, IPriceOracleGetter _oracle) public {
|
||||||
|
@ -51,6 +51,188 @@ contract UiPoolDataProvider is IUiPoolDataProvider {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getReservesList(ILendingPoolAddressesProvider provider)
|
||||||
|
public
|
||||||
|
view
|
||||||
|
override
|
||||||
|
returns (address[] memory)
|
||||||
|
{
|
||||||
|
ILendingPool lendingPool = ILendingPool(provider.getLendingPool());
|
||||||
|
return lendingPool.getReservesList();
|
||||||
|
}
|
||||||
|
|
||||||
|
function getSimpleReservesData(ILendingPoolAddressesProvider provider)
|
||||||
|
public
|
||||||
|
view
|
||||||
|
override
|
||||||
|
returns (
|
||||||
|
AggregatedReserveData[] memory,
|
||||||
|
uint256,
|
||||||
|
uint256
|
||||||
|
)
|
||||||
|
{
|
||||||
|
ILendingPool lendingPool = ILendingPool(provider.getLendingPool());
|
||||||
|
address[] memory reserves = lendingPool.getReservesList();
|
||||||
|
AggregatedReserveData[] memory reservesData = new AggregatedReserveData[](reserves.length);
|
||||||
|
|
||||||
|
for (uint256 i = 0; i < reserves.length; i++) {
|
||||||
|
AggregatedReserveData memory reserveData = reservesData[i];
|
||||||
|
reserveData.underlyingAsset = reserves[i];
|
||||||
|
|
||||||
|
// reserve current state
|
||||||
|
DataTypes.ReserveData memory baseData =
|
||||||
|
lendingPool.getReserveData(reserveData.underlyingAsset);
|
||||||
|
reserveData.liquidityIndex = baseData.liquidityIndex;
|
||||||
|
reserveData.variableBorrowIndex = baseData.variableBorrowIndex;
|
||||||
|
reserveData.liquidityRate = baseData.currentLiquidityRate;
|
||||||
|
reserveData.variableBorrowRate = baseData.currentVariableBorrowRate;
|
||||||
|
reserveData.stableBorrowRate = baseData.currentStableBorrowRate;
|
||||||
|
reserveData.lastUpdateTimestamp = baseData.lastUpdateTimestamp;
|
||||||
|
reserveData.aTokenAddress = baseData.aTokenAddress;
|
||||||
|
reserveData.stableDebtTokenAddress = baseData.stableDebtTokenAddress;
|
||||||
|
reserveData.variableDebtTokenAddress = baseData.variableDebtTokenAddress;
|
||||||
|
reserveData.interestRateStrategyAddress = baseData.interestRateStrategyAddress;
|
||||||
|
reserveData.priceInEth = oracle.getAssetPrice(reserveData.underlyingAsset);
|
||||||
|
|
||||||
|
reserveData.availableLiquidity = IERC20Detailed(reserveData.underlyingAsset).balanceOf(
|
||||||
|
reserveData.aTokenAddress
|
||||||
|
);
|
||||||
|
(
|
||||||
|
reserveData.totalPrincipalStableDebt,
|
||||||
|
,
|
||||||
|
reserveData.averageStableRate,
|
||||||
|
reserveData.stableDebtLastUpdateTimestamp
|
||||||
|
) = IStableDebtToken(reserveData.stableDebtTokenAddress).getSupplyData();
|
||||||
|
reserveData.totalScaledVariableDebt = IVariableDebtToken(reserveData.variableDebtTokenAddress)
|
||||||
|
.scaledTotalSupply();
|
||||||
|
|
||||||
|
// reserve configuration
|
||||||
|
|
||||||
|
// we're getting this info from the aToken, because some of assets can be not compliant with ETC20Detailed
|
||||||
|
reserveData.symbol = IERC20Detailed(reserveData.aTokenAddress).symbol();
|
||||||
|
reserveData.name = '';
|
||||||
|
|
||||||
|
(
|
||||||
|
reserveData.baseLTVasCollateral,
|
||||||
|
reserveData.reserveLiquidationThreshold,
|
||||||
|
reserveData.reserveLiquidationBonus,
|
||||||
|
reserveData.decimals,
|
||||||
|
reserveData.reserveFactor
|
||||||
|
) = baseData.configuration.getParamsMemory();
|
||||||
|
(
|
||||||
|
reserveData.isActive,
|
||||||
|
reserveData.isFrozen,
|
||||||
|
reserveData.borrowingEnabled,
|
||||||
|
reserveData.stableBorrowRateEnabled
|
||||||
|
) = baseData.configuration.getFlagsMemory();
|
||||||
|
reserveData.usageAsCollateralEnabled = reserveData.baseLTVasCollateral != 0;
|
||||||
|
(
|
||||||
|
reserveData.variableRateSlope1,
|
||||||
|
reserveData.variableRateSlope2,
|
||||||
|
reserveData.stableRateSlope1,
|
||||||
|
reserveData.stableRateSlope2
|
||||||
|
) = getInterestRateStrategySlopes(
|
||||||
|
DefaultReserveInterestRateStrategy(reserveData.interestRateStrategyAddress)
|
||||||
|
);
|
||||||
|
|
||||||
|
// incentives
|
||||||
|
if (address(0) != address(incentivesController)) {
|
||||||
|
(
|
||||||
|
reserveData.aEmissionPerSecond,
|
||||||
|
reserveData.aIncentivesLastUpdateTimestamp,
|
||||||
|
reserveData.aTokenIncentivesIndex
|
||||||
|
// ) = incentivesController.getAssetData(reserveData.aTokenAddress); TODO: temp fix
|
||||||
|
) = incentivesController.assets(reserveData.aTokenAddress);
|
||||||
|
|
||||||
|
(
|
||||||
|
reserveData.sEmissionPerSecond,
|
||||||
|
reserveData.sIncentivesLastUpdateTimestamp,
|
||||||
|
reserveData.sTokenIncentivesIndex
|
||||||
|
// ) = incentivesController.getAssetData(reserveData.stableDebtTokenAddress); TODO: temp fix
|
||||||
|
) = incentivesController.assets(reserveData.stableDebtTokenAddress);
|
||||||
|
|
||||||
|
(
|
||||||
|
reserveData.vEmissionPerSecond,
|
||||||
|
reserveData.vIncentivesLastUpdateTimestamp,
|
||||||
|
reserveData.vTokenIncentivesIndex
|
||||||
|
// ) = incentivesController.getAssetData(reserveData.variableDebtTokenAddress); TODO: temp fix
|
||||||
|
) = incentivesController.assets(reserveData.variableDebtTokenAddress);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uint256 emissionEndTimestamp;
|
||||||
|
if (address(0) != address(incentivesController)) {
|
||||||
|
emissionEndTimestamp = incentivesController.DISTRIBUTION_END();
|
||||||
|
}
|
||||||
|
|
||||||
|
return (reservesData, oracle.getAssetPrice(MOCK_USD_ADDRESS), emissionEndTimestamp);
|
||||||
|
}
|
||||||
|
|
||||||
|
function getUserReservesData(ILendingPoolAddressesProvider provider, address user)
|
||||||
|
external
|
||||||
|
view
|
||||||
|
override
|
||||||
|
returns (UserReserveData[] memory, uint256)
|
||||||
|
{
|
||||||
|
ILendingPool lendingPool = ILendingPool(provider.getLendingPool());
|
||||||
|
address[] memory reserves = lendingPool.getReservesList();
|
||||||
|
DataTypes.UserConfigurationMap memory userConfig = lendingPool.getUserConfiguration(user);
|
||||||
|
|
||||||
|
UserReserveData[] memory userReservesData =
|
||||||
|
new UserReserveData[](user != address(0) ? reserves.length : 0);
|
||||||
|
|
||||||
|
for (uint256 i = 0; i < reserves.length; i++) {
|
||||||
|
DataTypes.ReserveData memory baseData = lendingPool.getReserveData(reserves[i]);
|
||||||
|
// incentives
|
||||||
|
if (address(0) != address(incentivesController)) {
|
||||||
|
userReservesData[i].aTokenincentivesUserIndex = incentivesController.getUserAssetData(
|
||||||
|
user,
|
||||||
|
baseData.aTokenAddress
|
||||||
|
);
|
||||||
|
userReservesData[i].vTokenincentivesUserIndex = incentivesController.getUserAssetData(
|
||||||
|
user,
|
||||||
|
baseData.variableDebtTokenAddress
|
||||||
|
);
|
||||||
|
userReservesData[i].sTokenincentivesUserIndex = incentivesController.getUserAssetData(
|
||||||
|
user,
|
||||||
|
baseData.stableDebtTokenAddress
|
||||||
|
);
|
||||||
|
}
|
||||||
|
// user reserve data
|
||||||
|
userReservesData[i].underlyingAsset = reserves[i];
|
||||||
|
userReservesData[i].scaledATokenBalance = IAToken(baseData.aTokenAddress).scaledBalanceOf(
|
||||||
|
user
|
||||||
|
);
|
||||||
|
userReservesData[i].usageAsCollateralEnabledOnUser = userConfig.isUsingAsCollateral(i);
|
||||||
|
|
||||||
|
if (userConfig.isBorrowing(i)) {
|
||||||
|
userReservesData[i].scaledVariableDebt = IVariableDebtToken(
|
||||||
|
baseData
|
||||||
|
.variableDebtTokenAddress
|
||||||
|
)
|
||||||
|
.scaledBalanceOf(user);
|
||||||
|
userReservesData[i].principalStableDebt = IStableDebtToken(baseData.stableDebtTokenAddress)
|
||||||
|
.principalBalanceOf(user);
|
||||||
|
if (userReservesData[i].principalStableDebt != 0) {
|
||||||
|
userReservesData[i].stableBorrowRate = IStableDebtToken(baseData.stableDebtTokenAddress)
|
||||||
|
.getUserStableRate(user);
|
||||||
|
userReservesData[i].stableBorrowLastUpdateTimestamp = IStableDebtToken(
|
||||||
|
baseData
|
||||||
|
.stableDebtTokenAddress
|
||||||
|
)
|
||||||
|
.getUserLastUpdated(user);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uint256 userUnclaimedRewards;
|
||||||
|
if (address(0) != address(incentivesController)) {
|
||||||
|
userUnclaimedRewards = incentivesController.getUserUnclaimedRewards(user);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (userReservesData, userUnclaimedRewards);
|
||||||
|
}
|
||||||
|
|
||||||
function getReservesData(ILendingPoolAddressesProvider provider, address user)
|
function getReservesData(ILendingPoolAddressesProvider provider, address user)
|
||||||
external
|
external
|
||||||
view
|
view
|
||||||
|
@ -136,19 +318,22 @@ contract UiPoolDataProvider is IUiPoolDataProvider {
|
||||||
reserveData.aTokenIncentivesIndex,
|
reserveData.aTokenIncentivesIndex,
|
||||||
reserveData.aEmissionPerSecond,
|
reserveData.aEmissionPerSecond,
|
||||||
reserveData.aIncentivesLastUpdateTimestamp
|
reserveData.aIncentivesLastUpdateTimestamp
|
||||||
) = incentivesController.getAssetData(reserveData.aTokenAddress);
|
// ) = incentivesController.getAssetData(reserveData.aTokenAddress); TODO: temp fix
|
||||||
|
) = incentivesController.assets(reserveData.aTokenAddress);
|
||||||
|
|
||||||
(
|
(
|
||||||
reserveData.sTokenIncentivesIndex,
|
reserveData.sTokenIncentivesIndex,
|
||||||
reserveData.sEmissionPerSecond,
|
reserveData.sEmissionPerSecond,
|
||||||
reserveData.sIncentivesLastUpdateTimestamp
|
reserveData.sIncentivesLastUpdateTimestamp
|
||||||
) = incentivesController.getAssetData(reserveData.stableDebtTokenAddress);
|
// ) = incentivesController.getAssetData(reserveData.stableDebtTokenAddress); TODO: temp fix
|
||||||
|
) = incentivesController.assets(reserveData.stableDebtTokenAddress);
|
||||||
|
|
||||||
(
|
(
|
||||||
reserveData.vTokenIncentivesIndex,
|
reserveData.vTokenIncentivesIndex,
|
||||||
reserveData.vEmissionPerSecond,
|
reserveData.vEmissionPerSecond,
|
||||||
reserveData.vIncentivesLastUpdateTimestamp
|
reserveData.vIncentivesLastUpdateTimestamp
|
||||||
) = incentivesController.getAssetData(reserveData.variableDebtTokenAddress);
|
// ) = incentivesController.getAssetData(reserveData.variableDebtTokenAddress); TODO: temp fix
|
||||||
|
) = incentivesController.assets(reserveData.variableDebtTokenAddress);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (user != address(0)) {
|
if (user != address(0)) {
|
||||||
|
@ -200,12 +385,12 @@ contract UiPoolDataProvider is IUiPoolDataProvider {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
IncentivesControllerData memory incentivesControllerData;
|
IncentivesControllerData memory incentivesControllerData;
|
||||||
|
|
||||||
if (address(0) != address(incentivesController)) {
|
if (address(0) != address(incentivesController)) {
|
||||||
if (user != address(0)) {
|
if (user != address(0)) {
|
||||||
incentivesControllerData.userUnclaimedRewards = incentivesController.getUserUnclaimedRewards(user);
|
incentivesControllerData.userUnclaimedRewards = incentivesController
|
||||||
|
.getUserUnclaimedRewards(user);
|
||||||
}
|
}
|
||||||
incentivesControllerData.emissionEndTimestamp = incentivesController.DISTRIBUTION_END();
|
incentivesControllerData.emissionEndTimestamp = incentivesController.DISTRIBUTION_END();
|
||||||
}
|
}
|
||||||
|
|
|
@ -73,7 +73,31 @@ interface IUiPoolDataProvider {
|
||||||
uint256 emissionEndTimestamp;
|
uint256 emissionEndTimestamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getReservesList(ILendingPoolAddressesProvider provider)
|
||||||
|
external
|
||||||
|
view
|
||||||
|
returns (address[] memory);
|
||||||
|
|
||||||
|
function incentivesController() external view returns (IAaveIncentivesController);
|
||||||
|
|
||||||
|
function getSimpleReservesData(ILendingPoolAddressesProvider provider)
|
||||||
|
external
|
||||||
|
view
|
||||||
|
returns (
|
||||||
|
AggregatedReserveData[] memory,
|
||||||
|
uint256, // usd price eth
|
||||||
|
uint256 // emission end timestamp
|
||||||
|
);
|
||||||
|
|
||||||
|
function getUserReservesData(ILendingPoolAddressesProvider provider, address user)
|
||||||
|
external
|
||||||
|
view
|
||||||
|
returns (
|
||||||
|
UserReserveData[] memory,
|
||||||
|
uint256 // user unclaimed rewards
|
||||||
|
);
|
||||||
|
|
||||||
|
// generic method with full data
|
||||||
function getReservesData(ILendingPoolAddressesProvider provider, address user)
|
function getReservesData(ILendingPoolAddressesProvider provider, address user)
|
||||||
external
|
external
|
||||||
view
|
view
|
||||||
|
|
|
@ -48,7 +48,10 @@ export const NETWORKS_RPC_URL: iParamsPerNetwork<string> = {
|
||||||
[eEthereumNetwork.buidlerevm]: 'http://localhost:8545',
|
[eEthereumNetwork.buidlerevm]: 'http://localhost:8545',
|
||||||
[eEthereumNetwork.tenderly]: `https://rpc.tenderly.co/fork/`,
|
[eEthereumNetwork.tenderly]: `https://rpc.tenderly.co/fork/`,
|
||||||
[ePolygonNetwork.mumbai]: 'https://rpc-mumbai.maticvigil.com',
|
[ePolygonNetwork.mumbai]: 'https://rpc-mumbai.maticvigil.com',
|
||||||
[ePolygonNetwork.matic]: 'https://rpc-mainnet.matic.network',
|
[ePolygonNetwork.matic]:
|
||||||
|
// 'https://rpc-mainnet.maticvigil.com/v1/e616b9ddc7598ffae92629f8145614d55094c722',
|
||||||
|
'https://polygon-mainnet.g.alchemy.com/v2/6NUmfWDZw6lC3RPAphj0p_2vm7ElOn2U',
|
||||||
|
// [ePolygonNetwork.matic]: 'https://rpc-mainnet.matic.network',
|
||||||
[eXDaiNetwork.xdai]: 'https://rpc.xdaichain.com/',
|
[eXDaiNetwork.xdai]: 'https://rpc.xdaichain.com/',
|
||||||
[eAvalancheNetwork.avalanche]: 'https://cchain.explorer.avax.network/',
|
[eAvalancheNetwork.avalanche]: 'https://cchain.explorer.avax.network/',
|
||||||
[eAvalancheNetwork.fuji]: 'https://api.avax-test.network/ext/bc/C/rpc'
|
[eAvalancheNetwork.fuji]: 'https://api.avax-test.network/ext/bc/C/rpc'
|
||||||
|
|
Loading…
Reference in New Issue
Block a user