code-423n4 / 2021-12-amun-findings

0 stars 0 forks source link

Avoid unnecessary external calls can save gas #225

Open code423n4 opened 2 years ago

code423n4 commented 2 years ago

Handle

WatchPug

Vulnerability details

https://github.com/code-423n4/2021-12-amun/blob/98f6e2ff91f5fcebc0489f5871183566feaec307/contracts/basket/contracts/singleJoinExit/SingleTokenJoin.sol#L91-L98

path[0] = _joinTokenStruct.inputToken;
path[1] = address(INTERMEDIATE_TOKEN);
uint256[] memory amountsOut = uniSwapLikeRouter.getAmountsOut(
    _joinTokenStruct.inputAmount,
    path
);

uniSwapLikeRouter.swapExactTokensForTokens(
    _joinTokenStruct.inputAmount,
    amountsOut[amountsOut.length - 1],
    path,
    address(this),
    _joinTokenStruct.deadline
);

Getting amountsOut with uniSwapLikeRouter.getAmountsOut() before calling uniSwapLikeRouter.swapExactTokensForTokens() and set minAmountOut as amountsOut[amountsOut.length - 1] is unnecessary as it will always met minAmountOut, use 0 for minAmountOut instead can save gas.

Recommendation

Change to:

uniSwapLikeRouter.swapExactTokensForTokens(
    _joinTokenStruct.inputAmount,
    0,
    path,
    address(this),
    _joinTokenStruct.deadline
);