From bf28924c708ad69e843573c0dc50da0a349742e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=9Fingen?= Date: Wed, 15 Jan 2025 20:03:06 +0000 Subject: [PATCH] test: Adjust some tolerances for Zappers with UniV3 exchange --- contracts/test/zapperLeverage.t.sol | 44 ++++++++++++++--------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/contracts/test/zapperLeverage.t.sol b/contracts/test/zapperLeverage.t.sol index d78ba917c..e15ed8dbb 100644 --- a/contracts/test/zapperLeverage.t.sol +++ b/contracts/test/zapperLeverage.t.sol @@ -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(); @@ -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) @@ -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)); } } @@ -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(); @@ -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"); @@ -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); @@ -596,7 +594,7 @@ contract ZapperLeverageMainnet is DevTestSetup { _params.leverageZapper.leverUpTrove(params); vm.stopPrank(); - return flashLoanAmount; + return (flashLoanAmount, effectiveBoldAmount); } function testCanLeverUpTroveWithCurve() external { @@ -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); } } @@ -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); @@ -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(); @@ -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"); @@ -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; @@ -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; @@ -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; @@ -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); } } @@ -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); @@ -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 @@ -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( @@ -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( @@ -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( @@ -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);