Skip to content

Commit 8a053b0

Browse files
committed
Merge branch 'main' of github.com:Gearbox-protocol/periphery-v3
2 parents 105df5b + 85f764e commit 8a053b0

File tree

3 files changed

+40
-2
lines changed

3 files changed

+40
-2
lines changed

contracts/data/DataCompressor_2_1.sol

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ contract DataCompressorV2_10 is IDataCompressorV2_10, ContractsRegisterTrait, Li
116116

117117
address pool = creditManagerV2.pool();
118118
result.baseBorrowRate = IPoolService(pool).borrowAPY_RAY();
119+
result.aggregatedBorrowRate = result.baseBorrowRate;
119120

120121
uint256 collateralTokenCount = creditManagerV2.collateralTokensCount();
121122

contracts/data/DataCompressor_3_0.sol

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
pragma solidity ^0.8.10;
55
pragma experimental ABIEncoderV2;
66

7+
import "@gearbox-protocol/core-v3/contracts/interfaces/IAddressProviderV3.sol";
78
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
89
import {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

3940
import {AddressProvider} from "@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol";
4041
import {IDataCompressorV3_00, PriceOnDemand} from "../interfaces/IDataCompressorV3_00.sol";
42+
import {IZapper} from "@gearbox-protocol/integrations-v3/contracts/interfaces/zappers/IZapper.sol";
4143

4244
import {
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
5861
import "@gearbox-protocol/core-v3/contracts/interfaces/IExceptions.sol";
5962
import {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

contracts/data/Types.sol

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@ struct ContractAdapter {
3232
address adapter;
3333
}
3434

35+
struct ZapperInfo {
36+
address tokenFrom;
37+
address zapper;
38+
}
39+
3540
struct CreditAccountData {
3641
// if not successful, priceFeedsNeeded are filled with the data
3742
bool isSuccessful;
@@ -137,7 +142,10 @@ struct PoolData {
137142
uint256 cumulativeIndex_RAY;
138143
uint256 baseInterestIndexLU;
139144
uint256 version;
145+
address poolQuotaKeeper;
146+
address gauge;
140147
QuotaInfo[] quotas;
148+
ZapperInfo[] zappers;
141149
LinearModel lirm;
142150
bool isPaused;
143151
}

0 commit comments

Comments
 (0)