//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>);
}