diff --git a/foundry/src/TychoRouter.sol b/foundry/src/TychoRouter.sol index c032a97..83303e9 100644 --- a/foundry/src/TychoRouter.sol +++ b/foundry/src/TychoRouter.sol @@ -140,12 +140,11 @@ contract TychoRouter is AccessControl, Dispatcher, Pausable, ReentrancyGuard { uint256 nTokens, address receiver, bytes calldata swaps - ) external payable whenNotPaused nonReentrant returns (uint256 amountOut) { + ) public payable whenNotPaused nonReentrant returns (uint256 amountOut) { if (receiver == address(0)) { revert TychoRouter__AddressZero(); } - - // Assume funds already in our router. + // Assume funds are already in the router. if (wrapEth) { _wrapETH(amountIn); tokenIn = address(_weth); @@ -223,16 +222,9 @@ contract TychoRouter is AccessControl, Dispatcher, Pausable, ReentrancyGuard { IAllowanceTransfer.PermitSingle calldata permitSingle, bytes calldata signature, bytes calldata swaps - ) external payable whenNotPaused nonReentrant returns (uint256 amountOut) { - if (receiver == address(0)) { - revert TychoRouter__AddressZero(); - } - + ) external payable whenNotPaused returns (uint256 amountOut) { // For native ETH, assume funds already in our router. Else, transfer and handle approval. - if (wrapEth) { - _wrapETH(amountIn); - tokenIn = address(_weth); - } else if (tokenIn != address(0)) { + if (tokenIn != address(0)) { permit2.permit(msg.sender, permitSingle, signature); permit2.transferFrom( msg.sender, @@ -242,37 +234,17 @@ contract TychoRouter is AccessControl, Dispatcher, Pausable, ReentrancyGuard { ); } - amountOut = _swap(amountIn, nTokens, swaps); - - if (fee > 0) { - uint256 feeAmount = (amountOut * fee) / 10000; - amountOut -= feeAmount; - IERC20(tokenOut).safeTransfer(feeReceiver, feeAmount); - } - - if (minAmountOut > 0 && amountOut < minAmountOut) { - revert TychoRouter__NegativeSlippage(amountOut, minAmountOut); - } - - uint256 leftoverAmountIn; - if (tokenIn == address(0)) { - leftoverAmountIn = address(this).balance; - } else { - leftoverAmountIn = IERC20(tokenIn).balanceOf(address(this)); - } - - if (leftoverAmountIn > 0) { - revert TychoRouter__AmountInNotFullySpent(leftoverAmountIn); - } - - if (unwrapEth) { - _unwrapETH(amountOut); - } - if (tokenOut == address(0)) { - Address.sendValue(payable(receiver), amountOut); - } else { - IERC20(tokenOut).safeTransfer(receiver, amountOut); - } + return swap( + amountIn, + tokenIn, + tokenOut, + minAmountOut, + wrapEth, + unwrapEth, + nTokens, + receiver, + swaps + ); } /**