jediswap_v2_nft_position_manager

Wraps JediSwap V2 positions in the ERC721 non-fungible token interface

Functions

mint

fn mint(ref self: ContractState, params: MintParams) -> (u256, u128, u256, u256)

Creates a new position wrapped in a NFT

Call this when the pool does exist and is initialized

Emits IncreaseLiquidity.

Parameters:

Name
Type
Description

params

MintParams

The params necessary to mint a position

Return Values:

Type
Description

u256

The ID of the token that represents the minted position

u128

The amount of liquidity for this position

u256

The amount of token0

u256

The amount of token1

increase_liquidity

fn increase_liquidity(ref self: ContractState, params: IncreaseLiquidityParams) -> (u128, u256, u256)

Increases the amount of liquidity in a position, with tokens paid by the caller

Emits IncreaseLiquidity.

Parameters:

Name
Type
Description

params

IncreaseLiquidityParams

The params necessary to increase liquidity of a position

Return Values:

Type
Description

u128

The new liquidity amount as a result of the increase

u256

The amount of token0 to achieve resulting liquidity

u256

The amount of token1 to achieve resulting liquidity

decrease_liquidity

fn decrease_liquidity(ref self: ContractState, params: DecreaseLiquidityParams) -> (u256, u256)

Decreases the amount of liquidity in a position and accounts it to the position

Emits DecreaseLiquidity.

Parameters:

Name
Type
Description

params

DecreaseLiquidityParams

The params necessary to decrease liquidity of a position

Return Values:

Type
Description

u256

The amount of token0 accounted to the position's tokens owed

u256

The amount of token1 accounted to the position's tokens owed

collect

fn collect(ref self: ContractState, params: CollectParams) -> (u128, u128)

Collects up to a maximum amount of fees owed to a specific position to the recipient

Emits Collect.

Parameters:

Name
Type
Description

params

CollectParams

The params necessary to collect fees of a position

Return Values:

Type
Description

u128

The amount of fees collected in token0

u128

The amount of fees collected in token1

burn

fn burn(ref self: ContractState, token_id: u256)

Burns a token ID, which deletes it from the NFT contract. The token must have 0 liquidity and all tokens must be collected first.

Parameters:

Name
Type
Description

token_id

u256

The ID of the token that is being burned

create_and_initialize_pool

fn create_and_initialize_pool(ref self: ContractState, token0: ContractAddress, token1: ContractAddress, fee: u32, sqrt_price_X96: u256) -> ContractAddress

Creates a new pool if it does not exist, then initializes if not initialized

This method can be bundled with others via multicall for the first action (e.g. mint) performed against a pool

Parameters:

Name
Type
Description

token0

ContractAddress

The contract address of token0 of the pool

token1

ContractAddress

The contract address of token1 of the pool

fee

u32

The fee amount of the v2 pool for the specified token pair

sqrt_price_X96

u256

The initial square root price of the pool as a Q64.96 value

Return Values:

Type
Description

ContractAddress

The pool address based on the pair of tokens and fee, will return the newly created pool address if necessary

jediswap_v2_mint_callback

fn jediswap_v2_mint_callback(ref self: ContractState, amount0_owed: u256, amount1_owed: u256, callback_data_span: Span<felt252>)

Parameters:

Name
Type
Description

amount0_owed

u256

amount1_owed

u256

callback_data_span

Span<felt252>

Events

IncreaseLiquidity

Emitted when liquidity is increased for a position NFT. Also emitted when a token is minted.

struct IncreaseLiquidity {
    token_id: u256,
    liquidity: u128,
    amount0: u256,
    amount1: u256
}

Parameters:

Name
Type
Description

token_id

u256

The ID of the token for which liquidity was increased

liquidity

u128

The amount by which liquidity for the NFT position was increased

amount0

u256

The amount of token0 that was paid for the increase in liquidity

amount1

u256

The amount of token1 that was paid for the increase in liquidity

DecreaseLiquidity

struct DecreaseLiquidity {
    token_id: u256,
    liquidity: u128,
    amount0: u256,
    amount1: u256
}

Parameters:

Name
Type
Description

token_id

u256

The ID of the token for which liquidity was decreased

liquidity

u128

The amount by which liquidity for the NFT position was decreased

amount0

u256

The amount of token0 that was accounted for the decrease in liquidity

amount1

u256

The amount of token1 that was accounted for the decrease in liquidity

Collect

struct Collect {
    token_id: u256,
    recipient: ContractAddress,
    amount0_collect: u128,
    amount1_collect: u128
}

The amounts reported may not be exactly equivalent to the amounts transferred, due to rounding behavior

Parameters:

Name
Type
Description

token_id

u256

The ID of the token for which underlying tokens were collected

recipient

ContractAddress

The address of the account that received the collected tokens

amount0_collect

u128

The amount of token0 owed to the position that was collected

amount1_collect

u128

The amount of token1 owed to the position that was collected

ABI

//sign true for negative numbers
struct i32 {
    mag: u32,
    sign: bool,
}

// @notice The identifying key of the pool
struct PoolKey {
    // @notice The first of the two tokens of the pool, sorted by address
    token0: ContractAddress,
    // @notice The second of the two tokens of the pool, sorted by address
    token1: ContractAddress,
    // @notice The pool's fee in hundredths of a bip, i.e. 1e-6
    fee: u32
}

// @notice details about the JediSwap V2 position
struct PositionDetail {
    // @notice The address that is approved for spending this token
    operator: ContractAddress,
    // @notice The ID of the pool with which this token is connected
    pool_id: u64,
    // @notice The lower tick of the position
    tick_lower: i32,
    // @notice The upper tick of the position
    tick_upper: i32,
    // @notice The liquidity of the position
    liquidity: u128,
    // @notice The fee growth of the aggregate position as of the last action on the individual position, for token0
    fee_growth_inside_0_last_X128: u256,
    // @notice The fee growth of the aggregate position as of the last action on the individual position, for token1
    fee_growth_inside_1_last_X128: u256,
    // @notice Uncollected token0 owed to the position, as of the last computation
    tokens_owed_0: u128,
    // @notice Uncollected token1 owed to the position, as of the last computation
    tokens_owed_1: u128
}

struct MintParams {
    token0: ContractAddress,
    token1: ContractAddress,
    fee: u32,
    tick_lower: i32,
    tick_upper: i32,
    amount0_desired: u256,
    amount1_desired: u256,
    amount0_min: u256,
    amount1_min: u256,
    recipient: ContractAddress,
    deadline: u64
}

struct IncreaseLiquidityParams {
    token_id: u256,
    amount0_desired: u256,
    amount1_desired: u256,
    amount0_min: u256,
    amount1_min: u256,
    deadline: u64
}

struct DecreaseLiquidityParams {
    token_id: u256,
    liquidity: u128,
    amount0_min: u256,
    amount1_min: u256,
    deadline: u64
}

struct CollectParams {
    token_id: u256,
    recipient: ContractAddress,
    amount0_max: u128,
    amount1_max: u128
}

#[starknet::interface]
trait IJediSwapV2NFTPositionManager<TContractState> {
    fn get_factory(self: @TContractState) -> ContractAddress;
    fn get_position(self: @TContractState, token_id: u256) -> (PositionDetail, PoolKey);

    fn mint(ref self: TContractState, params: MintParams) -> (u256, u128, u256, u256);
    fn increase_liquidity(ref self: TContractState, params: IncreaseLiquidityParams) -> (u128, u256, u256);
    fn decrease_liquidity(ref self: TContractState, params: DecreaseLiquidityParams) -> (u256, u256);
    fn collect(ref self: TContractState, params: CollectParams) -> (u128, u128);
    fn burn(ref self: TContractState, token_id: u256);
    fn create_and_initialize_pool(ref self: TContractState, token0: ContractAddress, token1: ContractAddress, fee: u32, sqrt_price_X96: u256) -> ContractAddress;
    fn jediswap_v2_mint_callback(ref self: TContractState, amount0_owed: u256, amount1_owed: u256, callback_data_span: Span<felt252>);
}

Last updated