44pragma solidity ^ 0.8.10 ;
55pragma experimental ABIEncoderV2;
66
7+ import "@gearbox-protocol/core-v3/contracts/interfaces/IAddressProviderV3.sol " ;
78import {IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol " ;
89import {PERCENTAGE_FACTOR, RAY} from "@gearbox-protocol/core-v2/contracts/libraries/Constants.sol " ;
910
@@ -38,6 +39,7 @@ import {IVersion} from "@gearbox-protocol/core-v2/contracts/interfaces/IVersion.
3839
3940import {AddressProvider} from "@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol " ;
4041import {IDataCompressorV3_00, PriceOnDemand} from "../interfaces/IDataCompressorV3_00.sol " ;
42+ import {IZapper} from "@gearbox-protocol/integrations-v3/contracts/interfaces/zappers/IZapper.sol " ;
4143
4244import {
4345 COUNT,
@@ -51,12 +53,14 @@ import {
5153 GaugeInfo,
5254 GaugeQuotaParams,
5355 CreditManagerDebtParams,
54- GaugeVote
56+ GaugeVote,
57+ ZapperInfo
5558} from "./Types.sol " ;
5659
5760// EXCEPTIONS
5861import "@gearbox-protocol/core-v3/contracts/interfaces/IExceptions.sol " ;
5962import {LinearInterestModelHelper} from "./LinearInterestModelHelper.sol " ;
63+ import {ZapperRegister} from "./ZapperRegister.sol " ;
6064
6165/// @title Data compressor 3.0.
6266/// @notice Collects data from various contracts for use in the dApp
@@ -65,9 +69,14 @@ contract DataCompressorV3_00 is IDataCompressorV3_00, ContractsRegisterTrait, Li
6569 // Contract version
6670 uint256 public constant version = 3_00 ;
6771
72+ ZapperRegister public zapperRegister;
73+
6874 error CreditManagerIsNotV3Exception ();
6975
70- constructor (address _addressProvider ) ContractsRegisterTrait (_addressProvider) {}
76+ constructor (address _addressProvider ) ContractsRegisterTrait (_addressProvider) {
77+ zapperRegister =
78+ ZapperRegister (IAddressProviderV3 (_addressProvider).getAddressOrRevert ("ZAPPER_REGISTER " , 3_00 ));
79+ }
7180
7281 /// @dev Returns CreditAccountData for all opened accounts for particular borrower
7382 /// @param borrower Borrower address
@@ -194,6 +203,8 @@ contract DataCompressorV3_00 is IDataCompressorV3_00, ContractsRegisterTrait, Li
194203 result.enabledTokensMask = creditManager.enabledTokensMaskOf (_creditAccount);
195204
196205 result.balances = new TokenBalance [](collateralTokenCount);
206+
207+ uint256 quotaRevenue = 0 ;
197208 {
198209 uint256 forbiddenTokenMask = creditFacade.forbiddenTokenMask ();
199210 uint256 quotedTokensMask = creditManager.quotedTokensMask ();
@@ -215,13 +226,17 @@ contract DataCompressorV3_00 is IDataCompressorV3_00, ContractsRegisterTrait, Li
215226 if (balance.isQuoted) {
216227 (balance.quota,) = pqk.getQuota (_creditAccount, balance.token);
217228 balance.quotaRate = pqk.getQuotaRate (balance.token);
229+
230+ quotaRevenue += balance.quota * balance.quotaRate;
218231 }
219232
220233 result.balances[i] = balance;
221234 }
222235 }
223236 }
224237
238+ result.aggregatedBorrowRate = result.baseBorrowRate + RAY * quotaRevenue / PERCENTAGE_FACTOR / result.debt;
239+
225240 // uint256 debt;
226241 // uint256 cumulativeIndexNow;
227242 // uint256 cumulativeIndexLastUpdate;
@@ -441,6 +456,20 @@ contract DataCompressorV3_00 is IDataCompressorV3_00, ContractsRegisterTrait, Li
441456 result.lirm = getLIRMData (pool.interestRateModel ());
442457 result.isPaused = pool.paused ();
443458
459+ address [] memory zappers = zapperRegister.zappers (address (pool));
460+ len = zappers.length ;
461+ result.zappers = new ZapperInfo [](len);
462+
463+ unchecked {
464+ for (uint256 i; i < len; ++ i) {
465+ address tokenFrom = IZapper (zappers[i]).unwrappedToken ();
466+ result.zappers[i] = ZapperInfo ({tokenFrom: tokenFrom, zapper: zappers[i]});
467+ }
468+ }
469+
470+ result.poolQuotaKeeper = pool.poolQuotaKeeper ();
471+ result.gauge = IPoolQuotaKeeperV3 (result.poolQuotaKeeper).gauge ();
472+
444473 return result;
445474 }
446475
0 commit comments