mirror of
				https://github.com/Instadapp/aave-protocol-v2.git
				synced 2024-07-29 21:47:30 +00:00 
			
		
		
		
	feat: new ui pool data provider working, returning base currenci information
This commit is contained in:
		
							parent
							
								
									9ab111f92b
								
							
						
					
					
						commit
						de95ca55b9
					
				|  | @ -24,6 +24,8 @@ contract UiPoolDataProvider is IUiPoolDataProvider { | |||
|   using UserConfiguration for DataTypes.UserConfigurationMap; | ||||
| 
 | ||||
|   address public constant MOCK_USD_ADDRESS = 0x10F7Fc1F91Ba351f9C629c5947AD69bD03C05b96; | ||||
|   uint256 public constant USD_PRICE = 100000000; | ||||
|   uint256 public constant ETH_CURRENCY_DECIMALS = 18; | ||||
| 
 | ||||
|   constructor() public { | ||||
|   } | ||||
|  | @ -62,7 +64,7 @@ contract UiPoolDataProvider is IUiPoolDataProvider { | |||
|     override | ||||
|     returns ( | ||||
|       AggregatedReserveData[] memory, | ||||
|       uint256 | ||||
|       BaseCurrencyInfo memory | ||||
|     ) | ||||
|   { | ||||
|     IAaveOracle oracle = IAaveOracle(provider.getPriceOracle()); | ||||
|  | @ -102,8 +104,6 @@ contract UiPoolDataProvider is IUiPoolDataProvider { | |||
|       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.underlyingAsset).symbol(); | ||||
|       reserveData.name = ''; | ||||
|  | @ -132,7 +132,20 @@ contract UiPoolDataProvider is IUiPoolDataProvider { | |||
|       ); | ||||
|     } | ||||
| 
 | ||||
|     return (reservesData, oracle.getAssetPrice(MOCK_USD_ADDRESS)); | ||||
|     BaseCurrencyInfo memory baseCurrencyInfo; | ||||
|     try oracle.BASE_CURRENCY_UNIT() returns (uint256 baseCurrencyUnit) {         | ||||
|       baseCurrencyInfo.baseCurrencyDecimals = baseCurrencyUnit; | ||||
|       if (address(0) == oracle.BASE_CURRENCY()) { | ||||
|         baseCurrencyInfo.baseCurrencyPriceInUsd = USD_PRICE; | ||||
|       } else { | ||||
|         baseCurrencyInfo.baseCurrencyPriceInUsd = oracle.getAssetPrice(MOCK_USD_ADDRESS); | ||||
|       } | ||||
|     } catch (bytes memory /*lowLevelData*/) {   | ||||
|       baseCurrencyInfo.baseCurrencyDecimals = ETH_CURRENCY_DECIMALS; | ||||
|       baseCurrencyInfo.baseCurrencyPriceInUsd = oracle.getAssetPrice(MOCK_USD_ADDRESS); | ||||
|     } | ||||
| 
 | ||||
|     return (reservesData, baseCurrencyInfo); | ||||
|   } | ||||
| 
 | ||||
|   function getUserReservesData(ILendingPoolAddressesProvider provider, address user) | ||||
|  | @ -181,123 +194,135 @@ contract UiPoolDataProvider is IUiPoolDataProvider { | |||
|     return (userReservesData); | ||||
|   } | ||||
| 
 | ||||
|   // function getReservesData(ILendingPoolAddressesProvider provider, address user) | ||||
|   //   external | ||||
|   //   view | ||||
|   //   override | ||||
|   //   returns ( | ||||
|   //     AggregatedReserveData[] memory, | ||||
|   //     UserReserveData[] memory, | ||||
|   //     uint256 | ||||
|   //   ) | ||||
|   // { | ||||
|   //   IAaveOracle oracle = IAaveOracle(provider.getPriceOracle()); | ||||
|   //   ILendingPool lendingPool = ILendingPool(provider.getLendingPool()); | ||||
|   //   address[] memory reserves = lendingPool.getReservesList(); | ||||
|   //   DataTypes.UserConfigurationMap memory userConfig = lendingPool.getUserConfiguration(user); | ||||
|   function getReservesData(ILendingPoolAddressesProvider provider, address user) | ||||
|     external | ||||
|     view | ||||
|     override | ||||
|     returns ( | ||||
|       AggregatedReserveData[] memory, | ||||
|       UserReserveData[] memory, | ||||
|       BaseCurrencyInfo memory | ||||
|     ) | ||||
|   { | ||||
|     IAaveOracle oracle = IAaveOracle(provider.getPriceOracle()); | ||||
|     ILendingPool lendingPool = ILendingPool(provider.getLendingPool()); | ||||
|     address[] memory reserves = lendingPool.getReservesList(); | ||||
|     DataTypes.UserConfigurationMap memory userConfig = lendingPool.getUserConfiguration(user); | ||||
| 
 | ||||
|   //   AggregatedReserveData[] memory reservesData = new AggregatedReserveData[](reserves.length); | ||||
|   //   UserReserveData[] memory userReservesData = | ||||
|   //     new UserReserveData[](user != address(0) ? reserves.length : 0); | ||||
|     AggregatedReserveData[] memory reservesData = new AggregatedReserveData[](reserves.length); | ||||
|     UserReserveData[] memory userReservesData = | ||||
|       new UserReserveData[](user != address(0) ? reserves.length : 0); | ||||
| 
 | ||||
|   //   for (uint256 i = 0; i < reserves.length; i++) { | ||||
|   //     AggregatedReserveData memory reserveData = reservesData[i]; | ||||
|   //     reserveData.underlyingAsset = reserves[i]; | ||||
|     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); | ||||
|       // 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(); | ||||
|       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.underlyingAsset).symbol(); | ||||
|       reserveData.name = ''; | ||||
| 
 | ||||
|   //     // we're getting this info from the aToken, because some of assets can be not compliant with ETC20Detailed | ||||
|   //     reserveData.symbol = IERC20Detailed(reserveData.underlyingAsset).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) | ||||
|       ); | ||||
| 
 | ||||
|   //     ( | ||||
|   //       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) | ||||
|   //     ); | ||||
|       if (user != address(0)) { | ||||
|         // user reserve data | ||||
|         userReservesData[i].underlyingAsset = reserveData.underlyingAsset; | ||||
|         userReservesData[i].scaledATokenBalance = IAToken(reserveData.aTokenAddress) | ||||
|           .scaledBalanceOf(user); | ||||
|         userReservesData[i].usageAsCollateralEnabledOnUser = userConfig.isUsingAsCollateral(i); | ||||
| 
 | ||||
|   //     if (user != address(0)) { | ||||
|   //       // user reserve data | ||||
|   //       userReservesData[i].underlyingAsset = reserveData.underlyingAsset; | ||||
|   //       userReservesData[i].scaledATokenBalance = IAToken(reserveData.aTokenAddress) | ||||
|   //         .scaledBalanceOf(user); | ||||
|   //       userReservesData[i].usageAsCollateralEnabledOnUser = userConfig.isUsingAsCollateral(i); | ||||
|         if (userConfig.isBorrowing(i)) { | ||||
|           userReservesData[i].scaledVariableDebt = IVariableDebtToken( | ||||
|             reserveData | ||||
|               .variableDebtTokenAddress | ||||
|           ) | ||||
|             .scaledBalanceOf(user); | ||||
|           userReservesData[i].principalStableDebt = IStableDebtToken( | ||||
|             reserveData | ||||
|               .stableDebtTokenAddress | ||||
|           ) | ||||
|             .principalBalanceOf(user); | ||||
|           if (userReservesData[i].principalStableDebt != 0) { | ||||
|             userReservesData[i].stableBorrowRate = IStableDebtToken( | ||||
|               reserveData | ||||
|                 .stableDebtTokenAddress | ||||
|             ) | ||||
|               .getUserStableRate(user); | ||||
|             userReservesData[i].stableBorrowLastUpdateTimestamp = IStableDebtToken( | ||||
|               reserveData | ||||
|                 .stableDebtTokenAddress | ||||
|             ) | ||||
|               .getUserLastUpdated(user); | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     } | ||||
| 
 | ||||
|   //       if (userConfig.isBorrowing(i)) { | ||||
|   //         userReservesData[i].scaledVariableDebt = IVariableDebtToken( | ||||
|   //           reserveData | ||||
|   //             .variableDebtTokenAddress | ||||
|   //         ) | ||||
|   //           .scaledBalanceOf(user); | ||||
|   //         userReservesData[i].principalStableDebt = IStableDebtToken( | ||||
|   //           reserveData | ||||
|   //             .stableDebtTokenAddress | ||||
|   //         ) | ||||
|   //           .principalBalanceOf(user); | ||||
|   //         if (userReservesData[i].principalStableDebt != 0) { | ||||
|   //           userReservesData[i].stableBorrowRate = IStableDebtToken( | ||||
|   //             reserveData | ||||
|   //               .stableDebtTokenAddress | ||||
|   //           ) | ||||
|   //             .getUserStableRate(user); | ||||
|   //           userReservesData[i].stableBorrowLastUpdateTimestamp = IStableDebtToken( | ||||
|   //             reserveData | ||||
|   //               .stableDebtTokenAddress | ||||
|   //           ) | ||||
|   //             .getUserLastUpdated(user); | ||||
|   //         } | ||||
|   //       } | ||||
|   //     } | ||||
|   //   } | ||||
|     BaseCurrencyInfo memory baseCurrencyInfo; | ||||
|     try oracle.BASE_CURRENCY_UNIT() returns (uint256 baseCurrencyUnit) {         | ||||
|       baseCurrencyInfo.baseCurrencyDecimals = baseCurrencyUnit; | ||||
|       if (address(0) == oracle.BASE_CURRENCY()) { | ||||
|         baseCurrencyInfo.baseCurrencyPriceInUsd = USD_PRICE; | ||||
|       } else { | ||||
|         baseCurrencyInfo.baseCurrencyPriceInUsd = oracle.getAssetPrice(MOCK_USD_ADDRESS); | ||||
|       } | ||||
|     } catch (bytes memory /*lowLevelData*/) {   | ||||
|       baseCurrencyInfo.baseCurrencyDecimals = ETH_CURRENCY_DECIMALS; | ||||
|       baseCurrencyInfo.baseCurrencyPriceInUsd = oracle.getAssetPrice(MOCK_USD_ADDRESS); | ||||
|     } | ||||
| 
 | ||||
|     return ( | ||||
|       reservesData, | ||||
|       userReservesData, | ||||
|       baseCurrencyInfo | ||||
|     ); | ||||
|   } | ||||
| 
 | ||||
|   //   return ( | ||||
|   //     reservesData, | ||||
|   //     userReservesData, | ||||
|   //     oracle.getAssetPrice(MOCK_USD_ADDRESS), | ||||
|   //   ); | ||||
|   // } | ||||
| } | ||||
|  |  | |||
|  | @ -7,8 +7,8 @@ pragma solidity 0.6.12; | |||
|  **/ | ||||
| 
 | ||||
| interface IAaveOracle { | ||||
|   function BASE_CURRENCY() external view returns (address); | ||||
|   function BASE_CURRENCY_UNIT() external view returns (address); | ||||
|   function BASE_CURRENCY() external view returns (address); // if usd returns 0x0, if eth returns weth address | ||||
|   function BASE_CURRENCY_UNIT() external view returns (uint256); // if usd 8  | ||||
|   function WETH() external view returns (address); | ||||
| 
 | ||||
|   /*********** | ||||
|  |  | |||
|  | @ -53,6 +53,11 @@ interface IUiPoolDataProvider { | |||
|     uint256 stableBorrowLastUpdateTimestamp; | ||||
|   } | ||||
| 
 | ||||
|   struct BaseCurrencyInfo { | ||||
|     uint256 baseCurrencyDecimals; | ||||
|     uint256 baseCurrencyPriceInUsd; | ||||
|   } | ||||
| 
 | ||||
|   function getReservesList(ILendingPoolAddressesProvider provider) | ||||
|     external | ||||
|     view | ||||
|  | @ -63,7 +68,7 @@ interface IUiPoolDataProvider { | |||
|     view | ||||
|     returns ( | ||||
|       AggregatedReserveData[] memory, | ||||
|       uint256 // usd price eth | ||||
|       BaseCurrencyInfo memory | ||||
|     ); | ||||
| 
 | ||||
|   function getUserReservesData(ILendingPoolAddressesProvider provider, address user) | ||||
|  | @ -74,12 +79,12 @@ interface IUiPoolDataProvider { | |||
|     ); | ||||
| 
 | ||||
|   // generic method with full data | ||||
|   // function getReservesData(ILendingPoolAddressesProvider provider, address user) | ||||
|   //   external | ||||
|   //   view | ||||
|   //   returns ( | ||||
|   //     AggregatedReserveData[] memory, | ||||
|   //     UserReserveData[] memory, | ||||
|   //     uint256 | ||||
|   //   ); | ||||
|   function getReservesData(ILendingPoolAddressesProvider provider, address user) | ||||
|     external | ||||
|     view | ||||
|     returns ( | ||||
|       AggregatedReserveData[] memory, | ||||
|       UserReserveData[] memory, | ||||
|       BaseCurrencyInfo memory | ||||
|     ); | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 sendra
						sendra