Skip to content

Commit da3a239

Browse files
authored
Merge pull request #14 from Gearbox-protocol/fix--update-zappiers
Fix update zappiers
2 parents 0d8559e + 9f595f6 commit da3a239

File tree

6 files changed

+76
-168
lines changed

6 files changed

+76
-168
lines changed

contracts/data/DataCompressor_2_1.sol

Lines changed: 57 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,14 @@ import {IAddressProvider} from "@gearbox-protocol/core-v2/contracts/interfaces/I
3131
import {IDataCompressorV2_10} from "../interfaces/IDataCompressorV2_10.sol";
3232

3333
import {
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()));

contracts/data/DataCompressor_3_0.sol

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ contract DataCompressorV3_00 is IDataCompressorV3_00, ContractsRegisterTrait, Li
187187
ICreditManagerV3 creditManager = ICreditManagerV3(_cm);
188188
ICreditFacadeV3 creditFacade = _getCreditFacade(address(creditManager));
189189
// ICreditConfiguratorV3 creditConfigurator = ICreditConfiguratorV3(creditManager.creditConfigurator());
190-
190+
result.creditFacade = address(creditFacade);
191191
result.cfVersion = _getVersion(address(creditFacade));
192192

193193
address borrower = _getBorrowerOrRevert(address(creditManager), _creditAccount);
@@ -197,6 +197,7 @@ contract DataCompressorV3_00 is IDataCompressorV3_00, ContractsRegisterTrait, Li
197197
result.addr = _creditAccount;
198198

199199
result.underlying = _getUnderlying(creditManager);
200+
result.cmName = _getName(_cm);
200201

201202
address pool = _getPool(_cm);
202203
result.baseBorrowRate = _getBaseInterestRate(pool);
@@ -259,6 +260,9 @@ contract DataCompressorV3_00 is IDataCompressorV3_00, ContractsRegisterTrait, Li
259260
returns (CollateralDebtData memory collateralDebtData) {
260261
result.accruedInterest = collateralDebtData.accruedInterest;
261262
result.accruedFees = collateralDebtData.accruedFees;
263+
result.totalDebtUSD = collateralDebtData.totalDebtUSD;
264+
result.totalValueUSD = collateralDebtData.totalValueUSD;
265+
result.twvUSD = collateralDebtData.twvUSD;
262266
result.healthFactor = collateralDebtData.twvUSD * PERCENTAGE_FACTOR / collateralDebtData.totalDebtUSD;
263267
result.totalValue = collateralDebtData.totalValue;
264268
result.isSuccessful = true;
@@ -348,6 +352,9 @@ contract DataCompressorV3_00 is IDataCompressorV3_00, ContractsRegisterTrait, Li
348352
result.name = _getName(_cm);
349353
result.cfVersion = _getVersion(address(creditFacade));
350354

355+
result.creditFacade = address(creditFacade);
356+
result.creditConfigurator = address(creditConfigurator);
357+
351358
result.underlying = _getUnderlying(creditManager);
352359

353360
{
@@ -392,9 +399,8 @@ contract DataCompressorV3_00 is IDataCompressorV3_00, ContractsRegisterTrait, Li
392399
}
393400
}
394401

395-
result.creditFacade = address(creditFacade);
396-
result.creditConfigurator = address(creditConfigurator);
397402
result.degenNFT = creditFacade.degenNFT();
403+
result.isDegenMode = result.degenNFT != address(0);
398404
// (, result.isIncreaseDebtForbidden,,) = creditFacade.params(); // V2 only: true if increasing debt is forbidden
399405
result.forbiddenTokenMask = creditFacade.forbiddenTokenMask(); // V2 only: mask which forbids some particular tokens
400406
result.maxEnabledTokensLength = creditManager.maxEnabledTokens(); // V2 only: a limit on enabled tokens imposed for security
@@ -665,6 +671,7 @@ contract DataCompressorV3_00 is IDataCompressorV3_00, ContractsRegisterTrait, Li
665671
gaugeInfo.addr = gauge;
666672
gaugeInfo.pool = _getPool(gauge);
667673
(gaugeInfo.symbol, gaugeInfo.name) = _getSymbolAndName(gaugeInfo.pool);
674+
gaugeInfo.underlying = IPoolV3(gaugeInfo.pool).asset();
668675

669676
address[] memory quotaTokens = _getQuotedTokens(pqk);
670677
uint256 quotaTokensLen = quotaTokens.length;

contracts/data/LinearInterestModelHelper.sol

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,18 @@ pragma solidity ^0.8.17;
66
import {LinearInterestRateModelV3} from "@gearbox-protocol/core-v3/contracts/pool/LinearInterestRateModelV3.sol";
77
import {LinearInterestRateModel} from "@gearbox-protocol/core-v2/contracts/pool/LinearInterestRateModel.sol";
88
import {LinearModel} from "./Types.sol";
9+
import "forge-std/console.sol";
910

1011
contract LinearInterestModelHelper {
1112
function getLIRMData(address _model) internal view returns (LinearModel memory irm) {
1213
irm.interestModel = _model;
1314
irm.version = LinearInterestRateModel(_model).version();
1415

15-
if (irm.version == 1) {
16-
(uint256 U_1, uint256 R_base, uint256 R_slope1, uint256 R_slope2) =
17-
LinearInterestRateModel(_model).getModelParameters();
18-
irm.U_1 = uint16(U_1);
19-
irm.R_base = uint16(R_base);
20-
irm.R_slope1 = uint16(R_slope1);
21-
irm.R_slope2 = uint16(R_slope2);
22-
} else {
23-
(irm.U_1, irm.U_2, irm.R_base, irm.R_slope1, irm.R_slope2, irm.R_slope3) =
24-
LinearInterestRateModelV3(_model).getModelParameters();
16+
console.log(irm.version);
2517

26-
irm.isBorrowingMoreU2Forbidden = LinearInterestRateModelV3(_model).isBorrowingMoreU2Forbidden();
27-
}
18+
(irm.U_1, irm.U_2, irm.R_base, irm.R_slope1, irm.R_slope2, irm.R_slope3) =
19+
LinearInterestRateModelV3(_model).getModelParameters();
20+
21+
irm.isBorrowingMoreU2Forbidden = LinearInterestRateModelV3(_model).isBorrowingMoreU2Forbidden();
2822
}
2923
}

contracts/data/Types.sol

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,10 @@ struct CreditAccountData {
4646
address addr;
4747
address borrower;
4848
address creditManager;
49-
string cmDescription;
49+
string cmName;
5050
address creditFacade;
5151
address underlying;
5252
uint256 debt;
53-
uint256 cumulativeIndexNow;
5453
uint256 cumulativeIndexLastUpdate;
5554
uint128 cumulativeQuotaInterest;
5655
uint256 accruedInterest;
@@ -177,6 +176,7 @@ struct GaugeInfo {
177176
address pool;
178177
string symbol;
179178
string name;
179+
address underlying;
180180
uint16 currentEpoch;
181181
bool epochFrozen;
182182
GaugeQuotaParams[] quotaParams;

contracts/test/DC_Printer.sol

Lines changed: 0 additions & 136 deletions
This file was deleted.

contracts/test/DC_Test.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import {NetworkDetector} from "@gearbox-protocol/sdk-gov/contracts/NetworkDetect
1414

1515
import "forge-std/console.sol";
1616

17-
address constant ap = 0xfb78A83730aBd595A362645368D10fE5a20525a6;
17+
address constant ap = 0x9ea7b04Da02a5373317D745c1571c84aaD03321D;
1818

1919
contract DCTest {
2020
DataCompressorV2_10 public dc2;

0 commit comments

Comments
 (0)