For the complete documentation index, see llms.txt. This page is also available as Markdown.

Pool

This documentation provides an overview of the IPool.sol. This contract defines the functions and events for interacting with a liquidity pool in Maverick AMM.

Table of Contents

Contract Details

  • Name : IPool

  • Solidity Version : ^0.8.0

  • SPDX License-Identifier : GPL-2.0-or-later

  • Code: Github

Events

Swap

  • sender : The address that executed this swap

  • recipient : The address receiving this swap

  • tokenAIn : A boolean to determine if there is any input for Token A

  • exactOutput : A boolean to determine if there is any exact amount of tokens expected to receive

  • amountIn : The uint256 amount of the input token

  • amountOut : The uint256 amount of the output token

  • activeTick : The active tick int32 value for the pool

AddLiquidity

  • sender : The indexed sender address that executed addLiquidity()

  • tokenId : The uint256 indexed ID of the receiving token

  • binDeltas : An array of BinDelta structures

MigrateBinsUpStack

  • sender : The indexed sender address that executed MigrateBinsUpStack()

  • binId : The uint128 bin ID that was migrated

  • maxRecursion : Maximum recursion depth in uint32

TransferLiquidity

  • fromTokenId : Transfer liquidity from token ID uint256

  • toTokenId : Transfer liquidity to token ID uint256

  • params : Array of RemoveLiquidityParams that specify the bins and amounts

RemoveLiquidity

  • sender : Remove liquidity from sender address

  • recipient : Remove liquidity to receiver address

  • tokenId : Current indexed uint256 tokenId to remove liquidity from

  • binDeltas : Array of BinDelta that specify the bins and amounts

BinMerged

  • binId : The indexed bin ID uint128 that was merged.

  • reserveA : amount of A token uint128 in bin.

  • reserveB : amount of B token uint128 in bin.

  • mergeId : The current active bin uint128.

BinMoved

  • binId : The indexed bin ID uint128 that was moved.

  • previousTick : Previous tick value in int128.

  • newTick : New tick value in uint128.

ProtocolFeeCollected

  • protocolFee : Amount of Protocol fee collected in uint256.

  • isTokenA : boolean check if Token A was used for Protocol fee.

SetProtocolFeeRatio

  • protocolFee : The new amount of Protocol fee set in uint256.

Structs

BinDelta

Return parameters for Add/Remove liquidity.

  • deltaA : The amount of A token uint128 that has been added or removed

  • deltaB : The amount of B token uint128 that has been added or removed

  • deltaLpBalance : The amount of LP balance uint256 that has increase (add) or decreased (remove)

  • binId : The bin ID uint128 of the bin that changed

  • kind : One of the 4 Kinds (0=static, 1=right, 2=left, 3=both) in uint8

  • lowerTick : The lower price tick int32 of the bin in its current state

  • isActive : A boolean to indicate whether the bin is still active

TwaState

Time weighted average state.

  • twa : The twa int96 at the last update instant

  • value : The new value int96 that was passed in at the last update

  • lastTimestamp : The timestamp uint64 of the last update in seconds

BinState

The bin state parameters.

  • reserveA : The amount of A token uint128 in bin

  • reserveB : The amount of B token uint128 in bin

  • mergeBinBalance : The LP token balance uint128 that this bin possesses after merge

  • mergeId : The binId that this bin uint128 has merged in to

  • totalSupply : The total amount of LP tokens uint128 in this bin

  • kind : one of the 4 Kinds (0=static, 1=right, 2=left, 3=both) in uint8

  • lowerTick : The lower price tick int32 of the bin in its current state

AddLiquidityParams

Parameters for each bin that will get new liquidity.

  • kind : one of the 4 Kinds (0=static, 1=right, 2=left, 3=both) in uint8

  • pos : The bin position in int32

  • isDelta : A boolean that indicates whether the bin position is relative to the current bin or an absolute position

  • deltaA : The amount of A token uint128 to add

  • deltaB : The amount of B token uint128 to add

RemoveLiquidityParams

Parameters for each bin that will have liquidity removed.

  • binId : The index of the bin uint128 losing liquidity

  • amount : The LP balance amount uint128 to remove

State

The state of the pool.

  • activeTick : The current bin position int32 that contains the active bins

  • status : The status values uint8 defined in Pool.sol e.g. locked or unlocked;

  • binCounter : The index uint128 of the last bin created

  • protocolFeeRatio : The ratio of the swap fee that is kept for the protocol in uint64

Functions

fee()

Retrieves the fee for the pool in 18 decimal format.

  • Returns :

    • The fee uint256 for the pool as a uint256 value

tickSpacing()

Retrieves the tick spacing of the pool. The tick spacing is used to calculate the bin width.

  • Returns :

    • The tick spacing as a uint256 value

tokenA()

Retrieves the address of token A associated with the pool.

  • Returns :

    • The address of token A as an IERC20 interface

tokenB()

Retrieves the address of token B associated with the pool.

  • Returns :

    • The address of token B as an IERC20 interface

factory()

Retrieves the address of the factory contract associated with the pool.

  • Returns :

    • The address of the factory contract as an IFactory interface

binMap()

Retrieves the bitmap of active bins at the given tick.

  • Parameters :

    • tick : The tick int32 for which to retrieve the active bin map

  • Returns :

    • The bitmap of active bins as a uint256 value

binPositions()

Retrieves the bin ID for the given tick and bin kind

  • Parameters:

    • tick: The tick int32 for which to retrieve the bin ID

    • kind: The kind uint256 of the bin (0=static, 1=right, 2=left, 3=both)

  • Returns:

    • The bin ID as a uint128 value

binBalanceA()

Retrieves the internal accounting of the sum of token A balances across bins.

  • Returns: The sum of token A balances as a uint128 value

binBalanceB()

Retrieves the internal accounting of the sum of token B balances across bins.

  • Returns:

    • The sum of token B balances as a uint128 value

getTwa()

Retrieves the time-weighted average (TWA) state values.

  • Returns:

    • A TwaState structure containing the TWA, value, last timestamp, and look back

getCurrentTwa()

Retrieves the log base binWidth of the time-weighted average price.

  • Returns:

    • The log base binWidth of the TWA as an int256 value.

getState()

Retrieves the state of the pool.

  • Returns:

    • A State structure containing the active tick, status, bin counter, and protocol fee ratio

addLiquidity()

Adds liquidity to a pool.

  • Parameters:

    • tokenId: The NFT token ID uint256 that will hold the position.

    • params: An array of AddLiquidityParams structures that specify the mode, position, and liquidity details.

    • data: A callback function that addLiquidity will call to transfer tokens.

  • Returns:

    • tokenAAmount: The amount of token A added as a uint256 value.

    • tokenBAmount: The amount of token B added as a uint256 value.

    • binDeltas: An array of BinDelta structures representing the changes in bin states.

transferLiquidity()

Transfers liquidity from one NFT token ID to another using an array of bins.

  • Parameters:

    • fromTokenId: The NFT token ID uint256 that holds the position being transferred.

    • toTokenId: The NFT token ID uint256 that is receiving the liquidity.

    • params: An array of RemoveLiquidityParams structures specifying the bins and amounts to transfer.

removeLiquidity()

Removes liquidity from a pool.

  • Parameters:

    • recipient: The address that will receive the removed tokens.

    • tokenId: The NFT token ID uint256 that holds the position being removed.

    • params: An array of RemoveLiquidityParams structures specifying the bins and amounts to remove.

  • Returns:

    • tokenAOut: The amount of token A uin256 received as a result of removing liquidity.

    • tokenBOut: The amount of token B uin256 received as a result of removing liquidity.

    • binDeltas: An array of BinDelta structures representing the changes in bin states.

migrateBinUpStack()

Migrates bins up the linked list of merged bins so that its mergeId is the current active bin.

  • Parameters:

    • binId: An array of the bin IDs uint128 to be migrated.

    • maxRecursion: The maximum recursion depth uint32 of the migration. Set to zero to recurse until the active bin is found.

swap()

Swaps tokens.

  • Parameters:

    • recipient: The address that will receive the output tokens.

    • amount: The amount of tokens uint256 to swap.

    • tokenAIn: A boolean indicating whether token A is the input.

    • exactOutput: A boolean indicating whether the amount specified is the exact output amount (true).

    • sqrtPriceLimit: The limiting square root price uint256 of the swap. A value of 0 indicates no limit. The limit is only engaged for exactOutput=false. If the limit is reached, only part of the input amount will be swapped, and the callback will only require that amount of the swap to be paid.

    • data: A callback function bytes that swap will call to transfer tokens.

  • Returns:

    • amountIn: The amount of tokens uint256 swapped as input.

    • amountOut: The amount of tokens uint256 received as output.

getBin()

Retrieves the bin information for a given bin ID.

  • Parameters:

    • binId: The index of the bin uint128.

  • Returns:

    • A BinState structure containing the details of the bin.

balanceOf()

Retrieves the LP token balance for a given tokenId at a specific binId.

  • Parameters:

    • tokenId: The NFT token ID uint256.

    • binId: The index of the bin uint128.

  • Returns:

    • The LP token balance as a uint256 value.

tokenAScale()

Retrieves the tokenA scale value.

msb is a flag to indicate whether tokenA has more or less than 18 decimals. Scale is used in conjuction with Math.toScale/Math.fromScale functions to convert from token amounts to D18 scale internal pool accounting.

  • Returns:

    • The tokenA scale value as a uint256.

tokenBScale()

Retrieves the tokenB scale value.

msb is a flag to indicate whether tokenA has more or less than 18 decimals. Scale is used in conjuction with Math.toScale/Math.fromScale functions to convert from token amounts to D18 scale internal pool accounting.

  • Returns:

    • The tokenB scale value as a uint256.

Last updated