Skip to main content

Library

Code#

DMMLibrary.sol

Constants#

PRECISION = 1e18

Internal Functions#

sortTokens#

function sortTokens(IERC20 tokenA, IERC20 tokenB) internal pure returns (IERC20 token0, IERC20 token1);

Sorts token addresses.

getTradeInfo#

function getTradeInfo(address pool, IERC20 tokenA, IERC20 tokenB) internal view returns ( uint256 reserveA, uint256 reserveB, uint256 vReserveA, uint256 vReserveB, uint256 feeInPrecision)

Calls getTradeInfo on the pool for the passed tokens, and returns the actual and virtual reserves of the pool, and the dynamic fee to be charged.

getReserves#

function getReserves(address pool, IERC20 tokenA, IERC20 tokenB) internal view returns (uint256 reserveA, uint256 reserveB);

Calls getReserves on the pool for the passed tokens, and returns the results sorted in the order that the parameters were passed in.

quote#

function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) internal pure returns (uint256 amountB);

Given some asset amount and reserves, returns an amount of the other asset representing equivalent value.

  • Useful for calculating optimal token amounts before calling mint.

getAmountOut#

function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut, uint256 vReserveIn, uint256 vReserveOut, uint256 feeInPrecision) internal pure returns (uint256 amountOut);

Given an input asset amount and pool reserves (both actual and virtual balances), returns the maximum output amount of the other asset (accounting for fees).

getAmountIn#

function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut, uint256 vReserveIn, uint256 vReserveOut, uint256 feeInPrecision) internal pure returns (uint256 amountIn);

Returns the minimum input asset amount required to buy the given output asset amount (accounting for fees) given pool reserves (both acutal and virtual balances).

getAmountsOut#

function getAmountsOut(uint256 amountIn, address[] memory poolsPath, IERC20[] memory path) internal view returns (uint256[] memory amounts);

Given an input asset amount and an array of token and corresponding pool addresses, calculates all subsequent maximum output token amounts by calling getTradeInfo for each pair of token addresses in the path in turn, and using these to call getAmountOut.

Since there are possibly multiple pools per token pair, it is required to specify the pools to be used for the swap. As such, it is a requirement that poolsPath.length = path.length - 1.

  • Useful for calculating optimal token amounts before calling swap.

getAmountsIn#

function getAmountsIn(uint256 amountOut, address[] memory poolsPath, IERC20[] memory path) internal view returns (uint256[] memory amounts);

Given an output asset amount and an array of token addresses, calculates all preceding minimum input token amounts by calling getTradeInfo for each pair of token addresses in the path in turn, and using these to call getAmountIn.

Since there are possibly multiple pools per token pair, it is required to specify the pools to be used for the swap. As such, it is a requirement that poolsPath.length = path.length - 1.

  • Useful for calculating optimal token amounts before calling swap.