@@ -15,8 +15,11 @@ import {ReserveConfiguration} from '../protocol/libraries/configuration/ReserveC
1515import {UserConfiguration} from '../protocol/libraries/configuration/UserConfiguration.sol ' ;
1616import {DataTypes} from '../protocol/libraries/types/DataTypes.sol ' ;
1717import {IChainlinkAggregator} from '../interfaces/IChainlinkAggregator.sol ' ;
18- import {DefaultReserveInterestRateStrategy} from '../protocol/lendingpool/DefaultReserveInterestRateStrategy.sol ' ;
18+ import {
19+ DefaultReserveInterestRateStrategy
20+ } from '../protocol/lendingpool/DefaultReserveInterestRateStrategy.sol ' ;
1921import {IERC20DetailedBytes } from './interfaces/IERC20DetailedBytes.sol ' ;
22+ import {ILendingRateOracle} from '../interfaces/ILendingRateOracle.sol ' ;
2023
2124contract UiPoolDataProviderV2V3 is IUiPoolDataProviderV3 {
2225 using WadRayMath for uint256 ;
@@ -36,22 +39,23 @@ contract UiPoolDataProviderV2V3 is IUiPoolDataProviderV3 {
3639 marketReferenceCurrencyPriceInUsdProxyAggregator = _marketReferenceCurrencyPriceInUsdProxyAggregator;
3740 }
3841
39- function getInterestRateStrategySlopes (DefaultReserveInterestRateStrategy interestRateStrategy )
42+ function getInterestRateStrategySlopes (DefaultReserveInterestRateStrategy interestRateStrategy , ILendingPoolAddressesProvider provider , address reserve )
4043 internal
4144 view
42- returns (
43- uint256 ,
44- uint256 ,
45- uint256 ,
46- uint256
47- )
45+ returns (InterestRates memory )
4846 {
49- return (
50- interestRateStrategy.variableRateSlope1 (),
51- interestRateStrategy.variableRateSlope2 (),
52- interestRateStrategy.stableRateSlope1 (),
53- interestRateStrategy.stableRateSlope2 ()
54- );
47+ InterestRates memory interestRates;
48+ interestRates.variableRateSlope1 = interestRateStrategy.variableRateSlope1 ();
49+ interestRates.variableRateSlope2 = interestRateStrategy.variableRateSlope2 ();
50+ interestRates.stableRateSlope1 = interestRateStrategy.stableRateSlope1 ();
51+ interestRates.stableRateSlope2 = interestRateStrategy.stableRateSlope2 ();
52+ interestRates.baseVariableBorrowRate = interestRateStrategy.baseVariableBorrowRate ();
53+ interestRates.optimalUsageRatio = interestRateStrategy.OPTIMAL_UTILIZATION_RATE ();
54+
55+ interestRates.baseStableBorrowRate = ILendingRateOracle (provider.getLendingRateOracle ())
56+ .getMarketBorrowRate (reserve);
57+
58+ return interestRates;
5559 }
5660
5761 function getReservesList (ILendingPoolAddressesProvider provider )
@@ -80,9 +84,8 @@ contract UiPoolDataProviderV2V3 is IUiPoolDataProviderV3 {
8084 reserveData.underlyingAsset = reserves[i];
8185
8286 // reserve current state
83- DataTypes.ReserveData memory baseData = lendingPool.getReserveData (
84- reserveData.underlyingAsset
85- );
87+ DataTypes.ReserveData memory baseData =
88+ lendingPool.getReserveData (reserveData.underlyingAsset);
8689 reserveData.liquidityIndex = baseData.liquidityIndex;
8790 reserveData.variableBorrowIndex = baseData.variableBorrowIndex;
8891 reserveData.liquidityRate = baseData.currentLiquidityRate;
@@ -96,6 +99,7 @@ contract UiPoolDataProviderV2V3 is IUiPoolDataProviderV3 {
9699 reserveData.priceInMarketReferenceCurrency = oracle.getAssetPrice (
97100 reserveData.underlyingAsset
98101 );
102+ reserveData.priceOracle = oracle.getSourceOfAsset (reserveData.underlyingAsset);
99103
100104 reserveData.availableLiquidity = IERC20Detailed (reserveData.underlyingAsset).balanceOf (
101105 reserveData.aTokenAddress
@@ -111,9 +115,12 @@ contract UiPoolDataProviderV2V3 is IUiPoolDataProviderV3 {
111115
112116 if (address (reserveData.underlyingAsset) == address (MKRAddress)) {
113117 bytes32 symbol = IERC20DetailedBytes (reserveData.underlyingAsset).symbol ();
118+ bytes32 name = IERC20DetailedBytes (reserveData.underlyingAsset).name ();
114119 reserveData.symbol = bytes32ToString (symbol);
120+ reserveData.name = bytes32ToString (name);
115121 } else {
116122 reserveData.symbol = IERC20Detailed (reserveData.underlyingAsset).symbol ();
123+ reserveData.name = IERC20Detailed (reserveData.underlyingAsset).name ();
117124 }
118125
119126 (
@@ -130,14 +137,18 @@ contract UiPoolDataProviderV2V3 is IUiPoolDataProviderV3 {
130137 reserveData.stableBorrowRateEnabled
131138 ) = baseData.configuration.getFlagsMemory ();
132139 reserveData.usageAsCollateralEnabled = reserveData.baseLTVasCollateral != 0 ;
133- (
134- reserveData.variableRateSlope1,
135- reserveData.variableRateSlope2,
136- reserveData.stableRateSlope1,
137- reserveData.stableRateSlope2
138- ) = getInterestRateStrategySlopes (
139- DefaultReserveInterestRateStrategy (reserveData.interestRateStrategyAddress)
140+
141+ InterestRates memory interestRates = getInterestRateStrategySlopes (
142+ DefaultReserveInterestRateStrategy (reserveData.interestRateStrategyAddress), provider, reserveData.underlyingAsset
140143 );
144+
145+ reserveData.variableRateSlope1 = interestRates.variableRateSlope1;
146+ reserveData.variableRateSlope2 = interestRates.variableRateSlope2;
147+ reserveData.stableRateSlope1 = interestRates.stableRateSlope1;
148+ reserveData.stableRateSlope2 = interestRates.stableRateSlope2;
149+ reserveData.baseStableBorrowRate = interestRates.baseStableBorrowRate;
150+ reserveData.baseVariableBorrowRate = interestRates.baseVariableBorrowRate;
151+ reserveData.optimalUsageRatio = interestRates.optimalUsageRatio;
141152 }
142153
143154 BaseCurrencyInfo memory baseCurrencyInfo;
@@ -150,8 +161,8 @@ contract UiPoolDataProviderV2V3 is IUiPoolDataProviderV3 {
150161 if (ETH_CURRENCY_UNIT == baseCurrencyUnit) {
151162 baseCurrencyInfo.marketReferenceCurrencyUnit = ETH_CURRENCY_UNIT;
152163 baseCurrencyInfo
153- .marketReferenceCurrencyPriceInUsd = marketReferenceCurrencyPriceInUsdProxyAggregator
154- .latestAnswer ();
164+ .marketReferenceCurrencyPriceInUsd = marketReferenceCurrencyPriceInUsdProxyAggregator
165+ .latestAnswer ();
155166 } else {
156167 baseCurrencyInfo.marketReferenceCurrencyUnit = baseCurrencyUnit;
157168 baseCurrencyInfo.marketReferenceCurrencyPriceInUsd = int256 (baseCurrencyUnit);
@@ -178,9 +189,8 @@ contract UiPoolDataProviderV2V3 is IUiPoolDataProviderV3 {
178189 address [] memory reserves = lendingPool.getReservesList ();
179190 DataTypes.UserConfigurationMap memory userConfig = lendingPool.getUserConfiguration (user);
180191
181- UserReserveData[] memory userReservesData = new UserReserveData [](
182- user != address (0 ) ? reserves.length : 0
183- );
192+ UserReserveData[] memory userReservesData =
193+ new UserReserveData [](user != address (0 ) ? reserves.length : 0 );
184194
185195 for (uint256 i = 0 ; i < reserves.length ; i++ ) {
186196 DataTypes.ReserveData memory baseData = lendingPool.getReserveData (reserves[i]);
@@ -194,16 +204,20 @@ contract UiPoolDataProviderV2V3 is IUiPoolDataProviderV3 {
194204
195205 if (userConfig.isBorrowing (i)) {
196206 userReservesData[i].scaledVariableDebt = IVariableDebtToken (
197- baseData.variableDebtTokenAddress
198- ).scaledBalanceOf (user);
207+ baseData
208+ .variableDebtTokenAddress
209+ )
210+ .scaledBalanceOf (user);
199211 userReservesData[i].principalStableDebt = IStableDebtToken (baseData.stableDebtTokenAddress)
200212 .principalBalanceOf (user);
201213 if (userReservesData[i].principalStableDebt != 0 ) {
202214 userReservesData[i].stableBorrowRate = IStableDebtToken (baseData.stableDebtTokenAddress)
203215 .getUserStableRate (user);
204216 userReservesData[i].stableBorrowLastUpdateTimestamp = IStableDebtToken (
205- baseData.stableDebtTokenAddress
206- ).getUserLastUpdated (user);
217+ baseData
218+ .stableDebtTokenAddress
219+ )
220+ .getUserLastUpdated (user);
207221 }
208222 }
209223 }
@@ -223,4 +237,4 @@ contract UiPoolDataProviderV2V3 is IUiPoolDataProviderV3 {
223237 }
224238 return string (bytesArray);
225239 }
226- }
240+ }
0 commit comments