Skip to content

Commit

Permalink
test: Adjust some tolerances for Zappers with UniV3 exchange
Browse files Browse the repository at this point in the history
  • Loading branch information
bingen committed Jan 15, 2025
1 parent 584b9d8 commit bf28924
Showing 1 changed file with 22 additions and 22 deletions.
44 changes: 22 additions & 22 deletions contracts/test/zapperLeverage.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -310,7 +310,7 @@ contract ZapperLeverageMainnet is DevTestSetup {

function openLeveragedTroveWithIndex(OpenLeveragedTroveWithIndexParams memory _inputParams)
internal
returns (uint256)
returns (uint256, uint256)
{
OpenTroveVars memory vars;
(vars.price,) = _inputParams.priceFeed.fetchPrice();
Expand Down Expand Up @@ -350,7 +350,7 @@ contract ZapperLeverageMainnet is DevTestSetup {
vars.troveId = addressToTroveId(A, _inputParams.index);
vm.stopPrank();

return vars.troveId;
return (vars.troveId, vars.effectiveBoldAmount);
}

function _setInitialBalances(ILeverageZapper _leverageZapper, uint256 _branch, TestVars memory vars)
Expand All @@ -377,7 +377,6 @@ contract ZapperLeverageMainnet is DevTestSetup {

function testCanOpenTroveWithUniV3() external {
for (uint256 i = 0; i < NUM_COLLATERALS; i++) {
if (i == 2) continue; // TODO!!
_testCanOpenTrove(leverageZapperUniV3Array[i], ExchangeType.UniV3, i, address(0));
}
}
Expand Down Expand Up @@ -443,7 +442,8 @@ contract ZapperLeverageMainnet is DevTestSetup {
openTroveParams.exchangeType = _exchangeType;
openTroveParams.branch = _branch;
openTroveParams.batchManager = _batchManager;
vars.troveId = openLeveragedTroveWithIndex(openTroveParams);
uint256 expectedMinNetDebt;
(vars.troveId, expectedMinNetDebt) = openLeveragedTroveWithIndex(openTroveParams);

// Checks
(vars.price,) = contractsArray[_branch].priceFeed.fetchPrice();
Expand All @@ -458,8 +458,6 @@ contract ZapperLeverageMainnet is DevTestSetup {
"Coll mismatch"
);
// debt
uint256 expectedMinNetDebt = vars.collAmount * (vars.newLeverageRatio - DECIMAL_PRECISION) / DECIMAL_PRECISION // * leverage ratio
* vars.price / DECIMAL_PRECISION; // price
uint256 expectedMaxNetDebt = expectedMinNetDebt * 105 / 100;
uint256 troveEntireDebt = getTroveEntireDebt(contractsArray[_branch].troveManager, vars.troveId);
assertGe(troveEntireDebt, expectedMinNetDebt, "Debt too low");
Expand Down Expand Up @@ -582,7 +580,7 @@ contract ZapperLeverageMainnet is DevTestSetup {
return (vars.flashLoanAmount, vars.effectiveBoldAmount);
}

function leverUpTrove(LeverUpParams memory _params) internal returns (uint256) {
function leverUpTrove(LeverUpParams memory _params) internal returns (uint256, uint256) {
// This should be done in the frontend
(uint256 flashLoanAmount, uint256 effectiveBoldAmount) = _getLeverUpFlashLoanAndBoldAmount(_params);

Expand All @@ -596,7 +594,7 @@ contract ZapperLeverageMainnet is DevTestSetup {
_params.leverageZapper.leverUpTrove(params);
vm.stopPrank();

return flashLoanAmount;
return (flashLoanAmount, effectiveBoldAmount);
}

function testCanLeverUpTroveWithCurve() external {
Expand All @@ -607,7 +605,6 @@ contract ZapperLeverageMainnet is DevTestSetup {

function testCanLeverUpTroveWithUniV3() external {
for (uint256 i = 0; i < NUM_COLLATERALS; i++) {
if (i == 2) continue; // TODO!!
_testCanLeverUpTrove(leverageZapperUniV3Array[i], ExchangeType.UniV3, i);
}
}
Expand Down Expand Up @@ -636,7 +633,7 @@ contract ZapperLeverageMainnet is DevTestSetup {
openTroveParams.exchangeType = _exchangeType;
openTroveParams.branch = _branch;
openTroveParams.batchManager = address(0);
vars.troveId = openLeveragedTroveWithIndex(openTroveParams);
(vars.troveId,) = openLeveragedTroveWithIndex(openTroveParams);

vars.initialDebt = getTroveEntireDebt(contractsArray[_branch].troveManager, vars.troveId);

Expand All @@ -654,7 +651,8 @@ contract ZapperLeverageMainnet is DevTestSetup {
params.priceFeed = contractsArray[_branch].priceFeed;
params.exchangeType = _exchangeType;
params.branch = _branch;
vars.flashLoanAmount = leverUpTrove(params);
uint256 expectedMinLeverUpNetDebt;
(vars.flashLoanAmount, expectedMinLeverUpNetDebt) = leverUpTrove(params);

// Checks
(vars.price,) = contractsArray[_branch].priceFeed.fetchPrice();
Expand All @@ -666,7 +664,7 @@ contract ZapperLeverageMainnet is DevTestSetup {
"Coll mismatch"
);
// debt
uint256 expectedMinNetDebt = vars.initialDebt + vars.flashLoanAmount * vars.price / DECIMAL_PRECISION;
uint256 expectedMinNetDebt = vars.initialDebt + expectedMinLeverUpNetDebt;
uint256 expectedMaxNetDebt = expectedMinNetDebt * 105 / 100;
uint256 troveEntireDebt = getTroveEntireDebt(contractsArray[_branch].troveManager, vars.troveId);
assertGe(troveEntireDebt, expectedMinNetDebt, "Debt too low");
Expand Down Expand Up @@ -771,7 +769,7 @@ contract ZapperLeverageMainnet is DevTestSetup {
openTroveParams.exchangeType = _exchangeType;
openTroveParams.branch = _branch;
openTroveParams.batchManager = address(0);
uint256 troveId = openLeveragedTroveWithIndex(openTroveParams);
(uint256 troveId,) = openLeveragedTroveWithIndex(openTroveParams);

LeverUpParams memory getterParams;
getterParams.leverageZapper = _leverageZapper;
Expand Down Expand Up @@ -839,7 +837,7 @@ contract ZapperLeverageMainnet is DevTestSetup {
openTroveParams.exchangeType = _exchangeType;
openTroveParams.branch = _branch;
openTroveParams.batchManager = address(0);
uint256 troveId = openLeveragedTroveWithIndex(openTroveParams);
(uint256 troveId,) = openLeveragedTroveWithIndex(openTroveParams);

LeverUpParams memory getterParams;
getterParams.leverageZapper = _leverageZapper;
Expand Down Expand Up @@ -913,7 +911,7 @@ contract ZapperLeverageMainnet is DevTestSetup {
openTroveParams.exchangeType = _exchangeType;
openTroveParams.branch = _branch;
openTroveParams.batchManager = address(0);
uint256 troveId = openLeveragedTroveWithIndex(openTroveParams);
(uint256 troveId,) = openLeveragedTroveWithIndex(openTroveParams);

// B tries to lever up A’s trove calling Balancer Vault directly
LeverUpParams memory getterParams;
Expand Down Expand Up @@ -1002,7 +1000,6 @@ contract ZapperLeverageMainnet is DevTestSetup {

function testCanLeverDownTroveWithUniV3() external {
for (uint256 i = 0; i < NUM_COLLATERALS; i++) {
if (i == 2) continue; // TODO!!
_testCanLeverDownTrove(leverageZapperUniV3Array[i], ExchangeType.UniV3, i);
}
}
Expand Down Expand Up @@ -1031,7 +1028,7 @@ contract ZapperLeverageMainnet is DevTestSetup {
openTroveParams.exchangeType = _exchangeType;
openTroveParams.branch = _branch;
openTroveParams.batchManager = address(0);
vars.troveId = openLeveragedTroveWithIndex(openTroveParams);
(vars.troveId,) = openLeveragedTroveWithIndex(openTroveParams);

vars.initialDebt = getTroveEntireDebt(contractsArray[_branch].troveManager, vars.troveId);

Expand Down Expand Up @@ -1065,10 +1062,13 @@ contract ZapperLeverageMainnet is DevTestSetup {
assertGe(troveEntireDebt, expectedMinNetDebt, "Debt too low");
assertLe(troveEntireDebt, expectedMaxNetDebt, "Debt too high");
// CR
// When getting flashloan amount, we allow the min debt to deviate up to 5%
// That deviation can translate into CR, specially for UniV3 exchange which is the less efficient
uint256 CRTolerance = _exchangeType == ExchangeType.UniV3 ? 5e16 : 17e15;
assertApproxEqAbs(
contractsArray[_branch].troveManager.getCurrentICR(vars.troveId, vars.price),
vars.resultingCollateralRatio,
17e15,
CRTolerance,
"Wrong CR"
);
// token balances
Expand Down Expand Up @@ -1163,7 +1163,7 @@ contract ZapperLeverageMainnet is DevTestSetup {
openTroveParams.exchangeType = _exchangeType;
openTroveParams.branch = _branch;
openTroveParams.batchManager = address(0);
uint256 troveId = openLeveragedTroveWithIndex(openTroveParams);
(uint256 troveId,) = openLeveragedTroveWithIndex(openTroveParams);

// B tries to lever up A’s trove
(uint256 flashLoanAmount, uint256 minBoldDebt) = _getLeverDownFlashLoanAndBoldAmount(
Expand Down Expand Up @@ -1231,7 +1231,7 @@ contract ZapperLeverageMainnet is DevTestSetup {
openTroveParams.exchangeType = _exchangeType;
openTroveParams.branch = _branch;
openTroveParams.batchManager = address(0);
uint256 troveId = openLeveragedTroveWithIndex(openTroveParams);
(uint256 troveId,) = openLeveragedTroveWithIndex(openTroveParams);

// B tries to lever down A’s trove calling our flash loan provider module
(uint256 flashLoanAmount, uint256 minBoldDebt) = _getLeverDownFlashLoanAndBoldAmount(
Expand Down Expand Up @@ -1301,7 +1301,7 @@ contract ZapperLeverageMainnet is DevTestSetup {
openTroveParams.exchangeType = _exchangeType;
openTroveParams.branch = _branch;
openTroveParams.batchManager = address(0);
uint256 troveId = openLeveragedTroveWithIndex(openTroveParams);
(uint256 troveId,) = openLeveragedTroveWithIndex(openTroveParams);

// B tries to lever down A’s trove calling Balancer Vault directly
(uint256 flashLoanAmount, uint256 minBoldDebt) = _getLeverDownFlashLoanAndBoldAmount(
Expand Down Expand Up @@ -1671,7 +1671,7 @@ contract ZapperLeverageMainnet is DevTestSetup {
openTroveParams.exchangeType = _exchangeType;
openTroveParams.branch = _branch;
openTroveParams.batchManager = address(0);
uint256 troveId = openLeveragedTroveWithIndex(openTroveParams);
(uint256 troveId,) = openLeveragedTroveWithIndex(openTroveParams);

assertGt(getTroveEntireColl(contractsArray[_branch].troveManager, troveId), 0);
assertGt(getTroveEntireDebt(contractsArray[_branch].troveManager, troveId), 0);
Expand Down

0 comments on commit bf28924

Please sign in to comment.