@@ -31,7 +31,14 @@ import {IAddressProvider} from "@gearbox-protocol/core-v2/contracts/interfaces/I
3131import {IDataCompressorV2_10} from "../interfaces/IDataCompressorV2_10.sol " ;
3232
3333import {
34- COUNT, QUERY, CreditAccountData, CreditManagerData, PoolData, TokenBalance, ContractAdapter
34+ COUNT,
35+ QUERY,
36+ CreditAccountData,
37+ CreditManagerData,
38+ PoolData,
39+ TokenBalance,
40+ ContractAdapter,
41+ CreditManagerDebtParams
3542} from "./Types.sol " ;
3643
3744// EXCEPTIONS
@@ -113,6 +120,7 @@ contract DataCompressorV2_10 is
113120
114121 result.borrower = borrower;
115122 result.creditManager = _creditManager;
123+ result.cmName = cmDescriptions[_creditManager];
116124 result.creditFacade = address (creditFacade);
117125 result.addr = creditAccount;
118126
@@ -157,6 +165,8 @@ contract DataCompressorV2_10 is
157165 result.cumulativeIndexLastUpdate = ICreditAccount (creditAccount).cumulativeIndexAtOpen ();
158166
159167 result.since = uint64 (ICreditAccount (creditAccount).since ());
168+ (,, uint40 ed ,) = creditFacade.params ();
169+ result.expirationDate = ed;
160170 }
161171
162172 /// @dev Returns CreditManagerData for all Credit Managers
@@ -186,6 +196,8 @@ contract DataCompressorV2_10 is
186196 result.addr = _creditManager;
187197 result.cfVersion = ver;
188198 result.name = cmDescriptions[_creditManager];
199+ result.creditFacade = address (creditFacade);
200+ result.creditConfigurator = creditManagerV2.creditConfigurator ();
189201
190202 result.underlying = creditManagerV2.underlying ();
191203
@@ -195,6 +207,9 @@ contract DataCompressorV2_10 is
195207 result.baseBorrowRate = pool.borrowAPY_RAY ();
196208
197209 (uint128 currentTotalDebt , uint128 totalDebtLimit ) = creditFacade.totalDebt ();
210+
211+ result.totalDebt = currentTotalDebt;
212+ result.totalDebtLimit = totalDebtLimit;
198213 result.availableToBorrow = pool.creditManagersCanBorrow (_creditManager)
199214 ? Math.min (pool.availableLiquidity (), totalDebtLimit - currentTotalDebt)
200215 : 0 ;
@@ -231,9 +246,8 @@ contract DataCompressorV2_10 is
231246 }
232247 }
233248
234- result.creditFacade = address (creditFacade);
235- result.creditConfigurator = creditManagerV2.creditConfigurator ();
236249 result.degenNFT = creditFacade.degenNFT ();
250+ result.isDegenMode = result.degenNFT != address (0 );
237251 {
238252 bool isIncreaseDebtForbidden;
239253 (, isIncreaseDebtForbidden,,) = creditFacade.params (); // V2 only: true if increasing debt is forbidden
@@ -265,29 +279,58 @@ contract DataCompressorV2_10 is
265279 PoolService pool = PoolService (_pool);
266280
267281 result.addr = _pool;
268- result.expectedLiquidity = pool.expectedLiquidity ();
269- result.availableLiquidity = pool.availableLiquidity ();
270- result.totalBorrowed = pool.totalBorrowed ();
271- result.dieselRate_RAY = pool.getDieselRate_RAY ();
272- result.baseInterestIndex = pool.calcLinearCumulative_RAY ();
273- result.baseInterestRate = pool.borrowAPY_RAY ();
274282 result.underlying = pool.underlyingToken ();
275283 result.dieselToken = pool.dieselToken ();
276284
277285 result.symbol = IERC20Metadata (result.dieselToken).symbol ();
278286 result.name = IERC20Metadata (result.dieselToken).name ();
279287
288+ result.baseInterestIndex = pool.calcLinearCumulative_RAY ();
289+ result.availableLiquidity = pool.availableLiquidity ();
290+ result.expectedLiquidity = pool.expectedLiquidity ();
291+
292+ result.totalBorrowed = pool.totalBorrowed ();
293+
294+ result.totalSupply = IERC20 (result.dieselToken).totalSupply ();
295+ result.totalAssets = pool.fromDiesel (result.totalSupply);
296+
297+ result.dieselRate_RAY = pool.getDieselRate_RAY ();
298+
299+ result.baseInterestRate = pool.borrowAPY_RAY ();
300+
280301 result.dieselRate_RAY = pool.getDieselRate_RAY ();
302+
281303 result.withdrawFee = pool.withdrawFee ();
282304 result.lastBaseInterestUpdate = pool._timestampLU ();
283305 result.baseInterestIndexLU = pool._cumulativeIndex_RAY ();
284306
285- uint256 dieselSupply = IERC20 (result.dieselToken).totalSupply ();
286- uint256 totalLP = pool.fromDiesel (dieselSupply);
287- result.supplyRate = totalLP == 0
307+ result.supplyRate = result.totalAssets == 0
288308 ? result.baseInterestRate
289- : (result.baseInterestRate * result.totalBorrowed) * (PERCENTAGE_FACTOR - result.withdrawFee) / totalLP
290- / PERCENTAGE_FACTOR;
309+ : (result.baseInterestRate * result.totalBorrowed) * (PERCENTAGE_FACTOR - result.withdrawFee)
310+ / result.totalAssets / PERCENTAGE_FACTOR;
311+
312+ uint256 len = pool.creditManagersCount ();
313+ result.creditManagerDebtParams = new CreditManagerDebtParams [](len);
314+
315+ unchecked {
316+ for (uint256 i; i < len; ++ i) {
317+ address creditManager = pool.creditManagers (i);
318+
319+ uint128 currentTotalDebt;
320+ uint128 totalDebtLimit;
321+ if (_isContractV2 (creditManager)) {
322+ (,, ICreditFacadeV2 creditFacade ,) = getCreditContracts (creditManager);
323+ (currentTotalDebt, totalDebtLimit) = creditFacade.totalDebt ();
324+ }
325+
326+ result.creditManagerDebtParams[i] = CreditManagerDebtParams ({
327+ creditManager: creditManager,
328+ borrowed: currentTotalDebt,
329+ limit: pool.creditManagersCanBorrow (creditManager) ? totalDebtLimit : 0 ,
330+ availableToBorrow: pool.creditManagersCanBorrow (creditManager) ? result.availableLiquidity : 0
331+ });
332+ }
333+ }
291334
292335 result.version = uint8 (pool.version ());
293336 result.lirm = getLIRMData (address (pool.interestRateModel ()));
0 commit comments