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