Router

This documentation provides an overview of the IRouter.sol. This contract defines various functions and structs used for interacting with the Maverick AMM.

Contents

Contract Details

Structs

PoolParams

  • fee : The fee value uint256 associated with the pool.

  • tickSpacing : The tick spacing value uint256 for the pool.

  • lookback : The lookback value int256 for the pool.

  • activeTick : The active tick value int32 for the pool.

  • tokenA : The ERC20 token A address associated with the pool.

  • tokenB : The ERC20 token B address associated with the pool.

ExactInputParams

  • path : A bytes string representing the path of tokens to swap.

  • recipient : The address where the swapped tokens will be sent.

  • deadline : The deadline timestamp (in seconds) uint256 until which the swap can be executed.

  • amountIn : The amount of the input token uint256 to be swapped.

  • amountOutMinimum : The minimum acceptable amount of the output token uint256 specified to prevent infinite slippage.

ExactOutputParams

  • path : A bytes string representing the path of tokens to swap (reversed).

  • recipient : The address where the swapped tokens will be sent.

  • deadline : The deadline timestamp (in seconds) uint256 until which the swap can be executed.

  • amountOut : The amount of the output token uint256 desired.

  • amountInMaximum : The maximum acceptable amount of the input token uint256 required.

Functions

factory()

Returns the address of the factory.

  • Returns :

    • IFactory : The address of the Factory

position()

Returns the address of the Position NFT.

  • Returns

    • IPosition : The position NFT address

exactInput()

Swaps amountIn of one token for as much as possible of another along the specified path.

  • Parameters :

    • params : The parameters necessary for the multi-hop swap, encoded as ExactInputParams in calldata

  • Returns :

    • amountOut : The amount of the received token in uint256

exactOutput()

Swaps as little as possible of one token for amountOut of another along the specified path (reversed).

  • Parameters :

    • params : The parameters necessary for the multi-hop swap, encoded as ExactOutputParams in calldata

  • Returns :

    • amountIn : The amount of the input token in uint256

getOrCreatePoolAndAddLiquidity()

Either gets an existing pool or creates a pool if it does not exist and adds liquidity to it.

  • Parameters :

    • poolParams : Parameters of a pool with poolParams

    • tokenId : NFT ID of the token uint256 that will hold LP balance. Use 0 to mint a new token

    • addParams : Parameters of liquidity addition with addParams

    • minTokenAAmount : Minimum amount of token A uint256 to add. Reverts if not met

    • minTokenBAmount : Minimum amount of token B uint256 to add. Reverts if not met

    • deadline : Epoch timestamp (in seconds) uint256

  • Returns :

    • receivingTokenId : The ID uint256 of the receiving token

    • tokenAAmount : The amount of token A uint256

    • tokenBAmount : The amount of token B uint256

    • binDeltas : An array of BinDelta structures

addLiquidityToPool()

Adds liquidity to a pool.

  • Parameters :

    • pool : Pool to add liquidity to IPool

    • tokenId : NFT ID of the token uint256 that will hold LP balance. Use 0 to mint a new token

    • params : Parameters of liquidity addition with params

    • minTokenAAmount : Minimum amount of token A uint256 to add. Reverts if not met

    • minTokenBAmount : Minimum amount of token B uint256 to add. Reverts if not met

    • deadline : Epoch timestamp (in seconds) uint256

  • Returns :

    • receivingTokenId : The ID of the receiving token uint256

    • tokenAAmount : The amount of token A uint256

    • tokenBAmount : The amount of token B uint256

    • binDeltas : An array of BinDelta structures

addLiquidityWTickLimits()

Adds liquidity to a pool with active tick limits.

  • Parameters :

    • pool : Pool to add liquidity to IPool

    • tokenId : NFT ID of the token uint256 that will hold LP balance. Use 0 to mint a new token

    • params : Parameters of liquidity addition with params

    • minTokenAAmount : Minimum amount of token A uint256 to add. Reverts if not met

    • minTokenBAmount : Minimum amount of token B uint256 to add. Reverts if not met

    • minActiveTick : Lowest activeTick int32 (inclusive) of the pool that will permit the transaction to pass

    • maxActiveTick : Highest activeTick int32 (inclusive) of the pool that will permit the transaction to pass

    • deadline : Epoch timestamp (in seconds)

  • Returns :

    • receivingTokenId : The ID of the receiving token uint256

    • tokenAAmount : The amount of token A uint256

    • tokenBAmount : The amount of token B uint256

    • binDeltas : An array of BinDelta structures

migrateBinsUpStack()

Moves the head of input merged bins to the active bin.

  • Parameters :

    • pool : Pool to remove from with IPool

    • binIds : Array of binIds to migrate

    • maxRecursion : Maximum recursion depth uint32 before returning; 0 means no maximum

    • deadline : Epoch timestamp (in seconds) uint256

removeLiquidity()

Removes liquidity from a pool and receives WETH if one of the tokens is WETH.

Router must be approved for the withdrawing tokenId: Position.approve(router, tokenId)

  • Parameters :

    • pool : Pool to remove from with IPool

    • recipient : address where the proceeds are sent. Use zero or router address to leave tokens in the router

    • tokenId : ID uint256 of the position NFT that holds liquidity

    • params : Parameters of liquidity removal with params

    • minTokenAAmount : Minimum amount of token A uint256 to receive. Reverts if not met

    • minTokenBAmount : Minimum amount of token B uint256 to receive. Reverts if not met

    • deadline : Epoch timestamp (in seconds) uint256

  • Returns :

    • tokenAAmount : The amount of token A uint256 received

    • tokenBAmount : The amount of token B uint256 received

    • binDeltas : An array of BinDelta structure

Last updated