Merge pull request #87 from propeller-heads/router/hr/ENG-4278-refactor-swap-functions

refactor: use swap core logic in swapPermit2
This commit is contained in:
Harsh Vardhan Roy
2025-02-26 23:15:34 +05:30
committed by GitHub

View File

@@ -140,12 +140,11 @@ contract TychoRouter is AccessControl, Dispatcher, Pausable, ReentrancyGuard {
uint256 nTokens, uint256 nTokens,
address receiver, address receiver,
bytes calldata swaps bytes calldata swaps
) external payable whenNotPaused nonReentrant returns (uint256 amountOut) { ) public payable whenNotPaused nonReentrant returns (uint256 amountOut) {
if (receiver == address(0)) { if (receiver == address(0)) {
revert TychoRouter__AddressZero(); revert TychoRouter__AddressZero();
} }
// Assume funds are already in the router.
// Assume funds already in our router.
if (wrapEth) { if (wrapEth) {
_wrapETH(amountIn); _wrapETH(amountIn);
tokenIn = address(_weth); tokenIn = address(_weth);
@@ -223,16 +222,9 @@ contract TychoRouter is AccessControl, Dispatcher, Pausable, ReentrancyGuard {
IAllowanceTransfer.PermitSingle calldata permitSingle, IAllowanceTransfer.PermitSingle calldata permitSingle,
bytes calldata signature, bytes calldata signature,
bytes calldata swaps bytes calldata swaps
) external payable whenNotPaused nonReentrant returns (uint256 amountOut) { ) external payable whenNotPaused returns (uint256 amountOut) {
if (receiver == address(0)) {
revert TychoRouter__AddressZero();
}
// For native ETH, assume funds already in our router. Else, transfer and handle approval. // For native ETH, assume funds already in our router. Else, transfer and handle approval.
if (wrapEth) { if (tokenIn != address(0)) {
_wrapETH(amountIn);
tokenIn = address(_weth);
} else if (tokenIn != address(0)) {
permit2.permit(msg.sender, permitSingle, signature); permit2.permit(msg.sender, permitSingle, signature);
permit2.transferFrom( permit2.transferFrom(
msg.sender, msg.sender,
@@ -242,37 +234,17 @@ contract TychoRouter is AccessControl, Dispatcher, Pausable, ReentrancyGuard {
); );
} }
amountOut = _swap(amountIn, nTokens, swaps); return swap(
amountIn,
if (fee > 0) { tokenIn,
uint256 feeAmount = (amountOut * fee) / 10000; tokenOut,
amountOut -= feeAmount; minAmountOut,
IERC20(tokenOut).safeTransfer(feeReceiver, feeAmount); wrapEth,
} unwrapEth,
nTokens,
if (minAmountOut > 0 && amountOut < minAmountOut) { receiver,
revert TychoRouter__NegativeSlippage(amountOut, minAmountOut); swaps
} );
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);
}
} }
/** /**