Skip to content

Instantly share code, notes, and snippets.

@dhruvinparikh
Last active November 23, 2023 22:09
Show Gist options
  • Select an option

  • Save dhruvinparikh/65dce4c9ceeae201d51015bf19616a68 to your computer and use it in GitHub Desktop.

Select an option

Save dhruvinparikh/65dce4c9ceeae201d51015bf19616a68 to your computer and use it in GitHub Desktop.
UniswapV2 Swap Fee Math
getAmountOut
uint amountInWithFee = amountIn.mul(997);
uint numerator = amountInWithFee.mul(reserveOut);
uint denominator = reserveIn.mul(1000).add(amountInWithFee);
amountOut = numerator / denominator;
(_tokenOutReserves * _tokenInReserves)
amountOut = _tokenOutReserves - -------------------------------------
(_tokenOutReserves + _amountTokenIn)
_tokenOutReserves(_tokenInReserves + _amountTokenIn) - ((_tokenOutReserves * _tokenInReserves)
amountOut = ---------------------------------------------------------------------------------------
(_tokenInReserves + _amountTokenIn))
Add fees
_tokenOutReserves * _amountTokenIn * 99.7%
amountOut = -----------------------------------------------------
(_tokenInReserves) + (_amountTokenIn * 99.7%)
_tokenOutReserves * _amountTokenIn * 997/1000
amountOut = -----------------------------------------------------
(_tokenInReserves) + (_amountTokenIn * 997/1000)
_tokenOutReserves * _amountTokenIn * 997
amountOut = -----------------------------------------------------
(_tokenInReserves * 1000) + (_amountTokenIn * 997/1000)1000
_tokenOutReserves * _amountTokenIn * 997
amountOut = -----------------------------------------------------
(_tokenInReserves * 1000) + (_amountTokenIn * 997)
getAmountIn
uint numerator = reserveIn.mul(amountOut).mul(1000);
uint denominator = reserveOut.sub(amountOut).mul(997);
amountIn = (numerator / denominator).add(1);
(_tokenOutReserves * _tokenInReserves)
amountIn = ---------------------------------------- - _tokenInReserves
(_tokenOutReserves - $amountTokenOut)
(_tokenOutReserves * _tokenInReserves) - _tokenInReserves(_tokenOutReserves - $amountTokenOut)
amountIn = ----------------------------------------------------------------------------------------------
(_tokenOutReserves - $amountTokenOut)
_tokenInReserves * $amountTokenOut
amountIn = --------------------------------------
_tokenOutReserves - $amountTokenOut
Add fees
_tokenInReserves * $amountTokenOut
amountIn * 99.7% = -----------------------------------------------------
_tokenOutReserves - $amountTokenOut
_tokenInReserves * $amountTokenOut
amountIn * 997/1000 = -----------------------------------------------------
_tokenOutReserves - $amountTokenOut
_tokenInReserves * $amountTokenOut * 1000
amountIn = -----------------------------------------------------
997(_tokenOutReserves - $amountTokenOut)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment