From d8de65aedf459e34911f80da4dc6e44da93aa807 Mon Sep 17 00:00:00 2001 From: Diana Carvalho Date: Tue, 28 Jan 2025 10:26:38 +0000 Subject: [PATCH] fix: Remove checkMinAmount If minAmountOut == 0, then skip the check --- don't change below this line --- ENG-4041 Took 35 minutes --- foundry/src/TychoRouter.sol | 12 ++++-------- foundry/test/TychoRouter.t.sol | 5 ----- 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/foundry/src/TychoRouter.sol b/foundry/src/TychoRouter.sol index 24a1497..2d43030 100644 --- a/foundry/src/TychoRouter.sol +++ b/foundry/src/TychoRouter.sol @@ -97,13 +97,12 @@ contract TychoRouter is * - For ERC20 tokens, Permit2 is used to approve and transfer tokens from the caller to the router. * - Swaps are executed sequentially using the `_splitSwap` function. * - A fee is deducted from the output token if `fee > 0`, and the remaining amount is sent to the receiver. - * - Reverts with `TychoRouter__NegativeSlippage` if the output amount is less than `minAmountOut` and `checkMinAmount` is true. + * - Reverts with `TychoRouter__NegativeSlippage` if the output amount is less than `minAmountOut` and `minAmountOut` is bigger than 0. * * @param amountIn The input token amount to be swapped. * @param tokenIn The address of the input token. Use `address(0)` for native ETH when `wrapEth` is true. * @param tokenOut The address of the output token. Use `address(0)` for native ETH when `unwrapEth` is true. - * @param checkMinAmount A boolean indicating whether to enforce the `minAmountOut` check. - * @param minAmountOut The minimum acceptable amount of the output token. Reverts if this condition is not met. + * @param minAmountOut The minimum acceptable amount of the output token. Reverts if this condition is not met. If it's 0, no check is performed. * @param wrapEth If true, treats the input token as native ETH and wraps it into WETH. * @param unwrapEth If true, unwraps the resulting WETH into native ETH and sends it to the receiver. * @param nTokens The total number of tokens involved in the swap graph (used to initialize arrays for internal calculations). @@ -118,7 +117,6 @@ contract TychoRouter is uint256 amountIn, address tokenIn, address tokenOut, - bool checkMinAmount, uint256 minAmountOut, bool wrapEth, bool unwrapEth, @@ -131,8 +129,7 @@ contract TychoRouter is // For native ETH, assume funds already in our router. Else, transfer and handle approval. if (wrapEth) { _wrapETH(amountIn); - } else { - if (tokenIn != address(0)) { + } else if (tokenIn != address(0)) { permit2.permit(msg.sender, permitSingle, signature); permit2.transferFrom( msg.sender, @@ -140,7 +137,6 @@ contract TychoRouter is uint160(amountIn), permitSingle.details.token ); - } } amountOut = _splitSwap(amountIn, nTokens, swaps); @@ -154,7 +150,7 @@ contract TychoRouter is } } - if (checkMinAmount && amountOut < minAmountOut) { + if (minAmountOut > 0 && amountOut < minAmountOut) { revert TychoRouter__NegativeSlippage(amountOut, minAmountOut); } diff --git a/foundry/test/TychoRouter.t.sol b/foundry/test/TychoRouter.t.sol index 37ab4fd..7df01bf 100644 --- a/foundry/test/TychoRouter.t.sol +++ b/foundry/test/TychoRouter.t.sol @@ -351,7 +351,6 @@ contract TychoRouterTest is TychoRouterTestSetup { amount_in, WETH_ADDR, DAI_ADDR, - true, minAmountOut, false, false, @@ -403,7 +402,6 @@ contract TychoRouterTest is TychoRouterTestSetup { amount_in, WETH_ADDR, DAI_ADDR, - true, minAmountOut, false, false, @@ -449,7 +447,6 @@ contract TychoRouterTest is TychoRouterTestSetup { amount_in, WETH_ADDR, DAI_ADDR, - false, 0, false, false, @@ -498,7 +495,6 @@ contract TychoRouterTest is TychoRouterTestSetup { amount_in, address(0), DAI_ADDR, - false, 0, true, false, @@ -542,7 +538,6 @@ contract TychoRouterTest is TychoRouterTestSetup { amount_in, DAI_ADDR, address(0), - false, 0, false, true,