'Lessen the gas fees for multiple token swap
I am making smart contract which will swap multiple tokens at once. But the gas fees is in humongous quantity any way I can optimise it. One way to do it calling multiple times a for loop with all the stored address in array but that will also take a lot of gas fees. So please tell.
Below is my code
function swap(
address _tokenIn,
address _tokenOut,
uint256 _amountIn,
uint256 _amountOutMin,
address _to
) external {
IERC20(_tokenIn).transferFrom(msg.sender, address(this), _amountIn);
IERC20(_tokenIn).approve(UNISWAP_V2_ROUTER, _amountIn);
address[] memory path;
if (_tokenIn == WETH || _tokenOut == WETH) {
path = new address[](2);
path[0] = _tokenIn;
path[1] = _tokenOut;
} else {
path = new address[](3);
path[0] = _tokenIn;
path[1] = WETH;
path[2] = _tokenOut;
}
IUniswapV2Router(UNISWAP_V2_ROUTER).swapExactTokensForTokens(
_amountIn,
_amountOutMin,
path,
_to,
block.timestamp
);
}
function getAmountOutMin(
address _tokenIn,
address _tokenOut,
uint256 _amountIn
) external view returns (uint256) {
address[] memory path;
if (_tokenIn == WETH || _tokenOut == WETH) {
path = new address[](2);
path[0] = _tokenIn;
path[1] = _tokenOut;
} else {
path = new address[](3);
path[0] = _tokenIn;
path[1] = WETH;
path[2] = _tokenOut;
}
// same length as path
uint256[] memory amountOutMins = IUniswapV2Router(UNISWAP_V2_ROUTER)
.getAmountsOut(_amountIn, path);
return amountOutMins[path.length - 1];
}
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
