@@ -23,6 +23,9 @@ contract UiPoolDataProvider is IUiPoolDataProvider {
23
23
using ReserveConfiguration for DataTypes.ReserveConfigurationMap;
24
24
using NftConfiguration for DataTypes.NftConfigurationMap;
25
25
26
+ uint256 public constant RPICE_DECIMAL = 10 ** 18 ;
27
+ address public constant MOCK_ETH_USD_ADDRESS = 0x9ceB4d4C184d1786614a593a03621b7F37F8685F ;
28
+
26
29
IReserveOracleGetter public immutable reserveOracle;
27
30
INFTOracleGetter public immutable nftOracle;
28
31
@@ -50,12 +53,14 @@ contract UiPoolDataProvider is IUiPoolDataProvider {
50
53
address [] memory reserves = lendPool.getReservesList ();
51
54
AggregatedReserveData[] memory reservesData = new AggregatedReserveData [](reserves.length );
52
55
56
+ uint256 ethUSDPrice = reserveOracle.getAssetPrice (MOCK_ETH_USD_ADDRESS);
57
+
53
58
for (uint256 i = 0 ; i < reserves.length ; i++ ) {
54
59
AggregatedReserveData memory reserveData = reservesData[i];
55
60
56
61
DataTypes.ReserveData memory baseData = lendPool.getReserveData (reserves[i]);
57
62
58
- _fillReserveData (reserveData, reserves[i], baseData);
63
+ _fillReserveData (reserveData, reserves[i], baseData, ethUSDPrice );
59
64
}
60
65
61
66
return (reservesData);
@@ -93,11 +98,13 @@ contract UiPoolDataProvider is IUiPoolDataProvider {
93
98
AggregatedReserveData[] memory reservesData = new AggregatedReserveData [](reserves.length );
94
99
UserReserveData[] memory userReservesData = new UserReserveData [](user != address (0 ) ? reserves.length : 0 );
95
100
101
+ uint256 ethUSDPrice = reserveOracle.getAssetPrice (MOCK_ETH_USD_ADDRESS);
102
+
96
103
for (uint256 i = 0 ; i < reserves.length ; i++ ) {
97
104
AggregatedReserveData memory reserveData = reservesData[i];
98
105
99
106
DataTypes.ReserveData memory baseData = lendPool.getReserveData (reserves[i]);
100
- _fillReserveData (reserveData, reserves[i], baseData);
107
+ _fillReserveData (reserveData, reserves[i], baseData, ethUSDPrice );
101
108
102
109
if (user != address (0 )) {
103
110
_fillUserReserveData (userReservesData[i], user, reserves[i], baseData);
@@ -110,7 +117,8 @@ contract UiPoolDataProvider is IUiPoolDataProvider {
110
117
function _fillReserveData (
111
118
AggregatedReserveData memory reserveData ,
112
119
address reserveAsset ,
113
- DataTypes.ReserveData memory baseData
120
+ DataTypes.ReserveData memory baseData ,
121
+ uint256 ethUSDPrice
114
122
) internal view {
115
123
reserveData.underlyingAsset = reserveAsset;
116
124
@@ -124,6 +132,7 @@ contract UiPoolDataProvider is IUiPoolDataProvider {
124
132
reserveData.debtTokenAddress = baseData.debtTokenAddress;
125
133
reserveData.interestRateAddress = baseData.interestRateAddress;
126
134
reserveData.priceInEth = reserveOracle.getAssetPrice (reserveData.underlyingAsset);
135
+ reserveData.priceInUSD = (reserveData.priceInEth * ethUSDPrice) / RPICE_DECIMAL;
127
136
128
137
reserveData.availableLiquidity = IERC20Detailed (reserveData.underlyingAsset).balanceOf (reserveData.bTokenAddress);
129
138
reserveData.totalVariableDebt = IDebtToken (reserveData.debtTokenAddress).totalSupply ();
@@ -139,6 +148,13 @@ contract UiPoolDataProvider is IUiPoolDataProvider {
139
148
(reserveData.variableRateSlope1, reserveData.variableRateSlope2) = getInterestRateStrategySlopes (
140
149
InterestRate (reserveData.interestRateAddress)
141
150
);
151
+
152
+ if (reserveData.totalVariableDebt > 0 ) {
153
+ reserveData.utilizationRate =
154
+ reserveData.totalVariableDebt /
155
+ (reserveData.availableLiquidity + reserveData.totalVariableDebt);
156
+ }
157
+ reserveData.maxUtilizationRate = baseData.maxUtilizationRate;
142
158
}
143
159
144
160
function _fillUserReserveData (
@@ -169,12 +185,14 @@ contract UiPoolDataProvider is IUiPoolDataProvider {
169
185
address [] memory nfts = lendPool.getNftsList ();
170
186
AggregatedNftData[] memory nftsData = new AggregatedNftData [](nfts.length );
171
187
188
+ uint256 ethUSDPrice = reserveOracle.getAssetPrice (MOCK_ETH_USD_ADDRESS);
189
+
172
190
for (uint256 i = 0 ; i < nfts.length ; i++ ) {
173
191
AggregatedNftData memory nftData = nftsData[i];
174
192
175
193
DataTypes.NftData memory baseData = lendPool.getNftData (nfts[i]);
176
194
177
- _fillNftData (nftData, nfts[i], baseData, lendPoolLoan);
195
+ _fillNftData (nftData, nfts[i], baseData, lendPoolLoan, ethUSDPrice );
178
196
}
179
197
180
198
return (nftsData);
@@ -217,13 +235,15 @@ contract UiPoolDataProvider is IUiPoolDataProvider {
217
235
AggregatedNftData[] memory nftsData = new AggregatedNftData [](nfts.length );
218
236
UserNftData[] memory userNftsData = new UserNftData [](user != address (0 ) ? nfts.length : 0 );
219
237
238
+ uint256 ethUSDPrice = reserveOracle.getAssetPrice (MOCK_ETH_USD_ADDRESS);
239
+
220
240
for (uint256 i = 0 ; i < nfts.length ; i++ ) {
221
241
AggregatedNftData memory nftData = nftsData[i];
222
242
UserNftData memory userNftData = userNftsData[i];
223
243
224
244
DataTypes.NftData memory baseData = lendPool.getNftData (nfts[i]);
225
245
226
- _fillNftData (nftData, nfts[i], baseData, lendPoolLoan);
246
+ _fillNftData (nftData, nfts[i], baseData, lendPoolLoan, ethUSDPrice );
227
247
if (user != address (0 )) {
228
248
_fillUserNftData (userNftData, user, nfts[i], baseData, lendPoolLoan);
229
249
}
@@ -236,13 +256,16 @@ contract UiPoolDataProvider is IUiPoolDataProvider {
236
256
AggregatedNftData memory nftData ,
237
257
address nftAsset ,
238
258
DataTypes.NftData memory baseData ,
239
- ILendPoolLoan lendPoolLoan
259
+ ILendPoolLoan lendPoolLoan ,
260
+ uint256 ethUSDPrice
240
261
) internal view {
241
262
nftData.underlyingAsset = nftAsset;
242
263
243
264
// nft current state
244
265
nftData.bNftAddress = baseData.bNftAddress;
245
266
nftData.priceInEth = nftOracle.getAssetPrice (nftData.underlyingAsset);
267
+ nftData.priceInUSD = (nftData.priceInEth * ethUSDPrice) / RPICE_DECIMAL;
268
+ nftData.isPriceStale = nftOracle.isPriceStale (nftData.underlyingAsset);
246
269
247
270
nftData.totalCollateral = lendPoolLoan.getNftCollateralAmount (nftAsset);
248
271
@@ -258,6 +281,7 @@ contract UiPoolDataProvider is IUiPoolDataProvider {
258
281
.getAuctionParamsMemory ();
259
282
(nftData.isActive, nftData.isFrozen) = baseData.configuration.getFlagsMemory ();
260
283
nftData.minBidFine = baseData.configuration.getMinBidFineMemory ();
284
+ nftData.maxCollateralCap = baseData.maxCollateralCap;
261
285
}
262
286
263
287
function _fillUserNftData (
0 commit comments