{
"version": "0.1.0",
"name": "amm_v3",
"instructions": [
{
"name": "createAmmConfig",
"docs": [
"# Arguments",
"",
"* `ctx`- The accounts needed by instruction.",
"* `index` - The index of amm config, there may be multiple config.",
"* `tick_spacing` - The tickspacing binding with config, cannot be changed.",
"* `trade_fee_rate` - Trade fee rate, can be changed.",
"* `protocol_fee_rate` - The rate of protocol fee within tarde fee.",
"* `fund_fee_rate` - The rate of fund fee within tarde fee.",
""
],
"accounts": [
{
"name": "owner",
"isMut": true,
"isSigner": true,
"docs": [
"Address to be set as protocol owner."
]
},
{
"name": "ammConfig",
"isMut": true,
"isSigner": false,
"docs": [
"Initialize config state account to store protocol owner address and fee rates."
]
},
{
"name": "systemProgram",
"isMut": false,
"isSigner": false
}
],
"args": [
{
"name": "index",
"type": "u16"
},
{
"name": "tickSpacing",
"type": "u16"
},
{
"name": "tradeFeeRate",
"type": "u32"
},
{
"name": "protocolFeeRate",
"type": "u32"
},
{
"name": "fundFeeRate",
"type": "u32"
}
]
},
{
"name": "updateAmmConfig",
"docs": [
"Updates the owner of the amm config",
"Must be called by the current owner or admin",
"",
"# Arguments",
"",
"* `ctx`- The context of accounts",
"* `trade_fee_rate`- The new trade fee rate of amm config, be set when `param` is 0",
"* `protocol_fee_rate`- The new protocol fee rate of amm config, be set when `param` is 1",
"* `fund_fee_rate`- The new fund fee rate of amm config, be set when `param` is 2",
"* `new_owner`- The config's new owner, be set when `param` is 3",
"* `new_fund_owner`- The config's new fund owner, be set when `param` is 4",
"* `param`- The vaule can be 0 | 1 | 2 | 3 | 4, otherwise will report a error",
""
],
"accounts": [
{
"name": "owner",
"isMut": false,
"isSigner": true,
"docs": [
"The amm config owner or admin"
]
},
{
"name": "ammConfig",
"isMut": true,
"isSigner": false,
"docs": [
"Amm config account to be changed"
]
}
],
"args": [
{
"name": "param",
"type": "u8"
},
{
"name": "value",
"type": "u32"
}
]
},
{
"name": "createPool",
"docs": [
"Creates a pool for the given token pair and the initial price",
"",
"# Arguments",
"",
"* `ctx`- The context of accounts",
"* `sqrt_price_x64` - the initial sqrt price (amount_token_1 / amount_token_0) of the pool as a Q64.64",
""
],
"accounts": [
{
"name": "poolCreator",
"isMut": true,
"isSigner": true,
"docs": [
"Address paying to create the pool. Can be anyone"
]
},
{
"name": "ammConfig",
"isMut": false,
"isSigner": false,
"docs": [
"Which config the pool belongs to."
]
},
{
"name": "poolState",
"isMut": true,
"isSigner": false,
"docs": [
"Initialize an account to store the pool state"
]
},
{
"name": "tokenMint0",
"isMut": false,
"isSigner": false,
"docs": [
"Token_0 mint, the key must be smaller then token_1 mint."
]
},
{
"name": "tokenMint1",
"isMut": false,
"isSigner": false,
"docs": [
"Token_1 mint"
]
},
{
"name": "tokenVault0",
"isMut": true,
"isSigner": false,
"docs": [
"Token_0 vault for the pool"
]
},
{
"name": "tokenVault1",
"isMut": true,
"isSigner": false,
"docs": [
"Token_1 vault for the pool"
]
},
{
"name": "observationState",
"isMut": true,
"isSigner": false,
"docs": [
"Initialize an account to store oracle observations"
]
},
{
"name": "tickArrayBitmap",
"isMut": true,
"isSigner": false,
"docs": [
"Initialize an account to store if a tick array is initialized."
]
},
{
"name": "tokenProgram0",
"isMut": false,
"isSigner": false,
"docs": [
"Spl token program or token program 2022"
]
},
{
"name": "tokenProgram1",
"isMut": false,
"isSigner": false,
"docs": [
"Spl token program or token program 2022"
]
},
{
"name": "systemProgram",
"isMut": false,
"isSigner": false,
"docs": [
"To create a new program account"
]
},
{
"name": "rent",
"isMut": false,
"isSigner": false,
"docs": [
"Sysvar for program account"
]
}
],
"args": [
{
"name": "sqrtPriceX64",
"type": "u128"
},
{
"name": "openTime",
"type": "u64"
}
]
},
{
"name": "updatePoolStatus",
"docs": [
"Update pool status for given vaule",
"",
"# Arguments",
"",
"* `ctx`- The context of accounts",
"* `status` - The vaule of status",
""
],
"accounts": [
{
"name": "authority",
"isMut": false,
"isSigner": true
},
{
"name": "poolState",
"isMut": true,
"isSigner": false
}
],
"args": [
{
"name": "status",
"type": "u8"
}
]
},
{
"name": "createOperationAccount",
"docs": [
"Creates an operation account for the program",
"",
"# Arguments",
"",
"* `ctx`- The context of accounts",
""
],
"accounts": [
{
"name": "owner",
"isMut": true,
"isSigner": true,
"docs": [
"Address to be set as operation account owner."
]
},
{
"name": "operationState",
"isMut": true,
"isSigner": false,
"docs": [
"Initialize operation state account to store operation owner address and white list mint."
]
},
{
"name": "systemProgram",
"isMut": false,
"isSigner": false
}
],
"args": []
},
{
"name": "updateOperationAccount",
"docs": [
"Update the operation account",
"",
"# Arguments",
"",
"* `ctx`- The context of accounts",
"* `param`- The vaule can be 0 | 1 | 2 | 3, otherwise will report a error",
"* `keys`- update operation owner when the `param` is 0",
"remove operation owner when the `param` is 1",
"update whitelist mint when the `param` is 2",
"remove whitelist mint when the `param` is 3",
""
],
"accounts": [
{
"name": "owner",
"isMut": false,
"isSigner": true,
"docs": [
"Address to be set as operation account owner."
]
},
{
"name": "operationState",
"isMut": true,
"isSigner": false,
"docs": [
"Initialize operation state account to store operation owner address and white list mint."
]
},
{
"name": "systemProgram",
"isMut": false,
"isSigner": false
}
],
"args": [
{
"name": "param",
"type": "u8"
},
{
"name": "keys",
"type": {
"vec": "publicKey"
}
}
]
},
{
"name": "transferRewardOwner",
"docs": [
"Transfer reward owner",
"",
"# Arguments",
"",
"* `ctx`- The context of accounts",
"* `new_owner`- new owner pubkey",
""
],
"accounts": [
{
"name": "authority",
"isMut": false,
"isSigner": true,
"docs": [
"Address to be set as operation account owner."
]
},
{
"name": "poolState",
"isMut": true,
"isSigner": false
}
],
"args": [
{
"name": "newOwner",
"type": "publicKey"
}
]
},
{
"name": "initializeReward",
"docs": [
"Initialize a reward info for a given pool and reward index",
"",
"# Arguments",
"",
"* `ctx`- The context of accounts",
"* `reward_index` - the index to reward info",
"* `open_time` - reward open timestamp",
"* `end_time` - reward end timestamp",
"* `emissions_per_second_x64` - Token reward per second are earned per unit of liquidity.",
""
],
"accounts": [
{
"name": "rewardFunder",
"isMut": true,
"isSigner": true,
"docs": [
"The founder deposit reward token to vault"
]
},
{
"name": "funderTokenAccount",
"isMut": true,
"isSigner": false
},
{
"name": "ammConfig",
"isMut": false,
"isSigner": false,
"docs": [
"For check the reward_funder authority"
]
},
{
"name": "poolState",
"isMut": true,
"isSigner": false,
"docs": [
"Set reward for this pool"
]
},
{
"name": "operationState",
"isMut": false,
"isSigner": false,
"docs": [
"load info from the account to judge reward permission"
]
},
{
"name": "rewardTokenMint",
"isMut": false,
"isSigner": false,
"docs": [
"Reward mint"
]
},
{
"name": "rewardTokenVault",
"isMut": true,
"isSigner": false,
"docs": [
"A pda, reward vault"
]
},
{
"name": "rewardTokenProgram",
"isMut": false,
"isSigner": false
},
{
"name": "systemProgram",
"isMut": false,
"isSigner": false
},
{
"name": "rent",
"isMut": false,
"isSigner": false
}
],
"args": [
{
"name": "param",
"type": {
"defined": "InitializeRewardParam"
}
}
]
},
{
"name": "collectRemainingRewards",
"docs": [
"Collect remaining reward token for reward founder",
"",
"# Arguments",
"",
"* `ctx`- The context of accounts",
"* `reward_index` - the index to reward info",
""
],
"accounts": [
{
"name": "rewardFunder",
"isMut": false,
"isSigner": true,
"docs": [
"The founder who init reward info in berfore"
]
},
{
"name": "funderTokenAccount",
"isMut": true,
"isSigner": false,
"docs": [
"The funder's reward token account"
]
},
{
"name": "poolState",
"isMut": true,
"isSigner": false,
"docs": [
"Set reward for this pool"
]
},
{
"name": "rewardTokenVault",
"isMut": false,
"isSigner": false,
"docs": [
"Reward vault transfer remaining token to founder token account"
]
},
{
"name": "rewardVaultMint",
"isMut": false,
"isSigner": false,
"docs": [
"The mint of reward token vault"
]
},
{
"name": "tokenProgram",
"isMut": false,
"isSigner": false
},
{
"name": "tokenProgram2022",
"isMut": false,
"isSigner": false,
"docs": [
"Token program 2022"
]
},
{
"name": "memoProgram",
"isMut": false,
"isSigner": false,
"docs": [
"memo program"
]
}
],
"args": [
{
"name": "rewardIndex",
"type": "u8"
}
]
},
{
"name": "updateRewardInfos",
"docs": [
"Update rewards info of the given pool, can be called for everyone",
"",
"# Arguments",
"",
"* `ctx`- The context of accounts",
""
],
"accounts": [
{
"name": "poolState",
"isMut": true,
"isSigner": false,
"docs": [
"The liquidity pool for which reward info to update"
]
}
],
"args": []
},
{
"name": "setRewardParams",
"docs": [
"Restset reward param, start a new reward cycle or extend the current cycle.",
"",
"# Arguments",
"",
"* `ctx` - The context of accounts",
"* `reward_index` - The index of reward token in the pool.",
"* `emissions_per_second_x64` - The per second emission reward, when extend the current cycle,",
"new value can't be less than old value",
"* `open_time` - reward open timestamp, must be set when state a new cycle",
"* `end_time` - reward end timestamp",
""
],
"accounts": [
{
"name": "authority",
"isMut": false,
"isSigner": true,
"docs": [
"Address to be set as protocol owner. It pays to create factory state account."
]
},
{
"name": "ammConfig",
"isMut": false,
"isSigner": false
},
{
"name": "poolState",
"isMut": true,
"isSigner": false
},
{
"name": "operationState",
"isMut": false,
"isSigner": false,
"docs": [
"load info from the account to judge reward permission"
]
},
{
"name": "tokenProgram",
"isMut": false,
"isSigner": false,
"docs": [
"Token program"
]
},
{
"name": "tokenProgram2022",
"isMut": false,
"isSigner": false,
"docs": [
"Token program 2022"
]
}
],
"args": [
{
"name": "rewardIndex",
"type": "u8"
},
{
"name": "emissionsPerSecondX64",
"type": "u128"
},
{
"name": "openTime",
"type": "u64"
},
{
"name": "endTime",
"type": "u64"
}
]
},
{
"name": "collectProtocolFee",
"docs": [
"Collect the protocol fee accrued to the pool",
"",
"# Arguments",
"",
"* `ctx` - The context of accounts",
"* `amount_0_requested` - The maximum amount of token_0 to send, can be 0 to collect fees in only token_1",
"* `amount_1_requested` - The maximum amount of token_1 to send, can be 0 to collect fees in only token_0",
""
],
"accounts": [
{
"name": "owner",
"isMut": false,
"isSigner": true,
"docs": [
"Only admin or config owner can collect fee now"
]
},
{
"name": "poolState",
"isMut": true,
"isSigner": false,
"docs": [
"Pool state stores accumulated protocol fee amount"
]
},
{
"name": "ammConfig",
"isMut": false,
"isSigner": false,
"docs": [
"Amm config account stores owner"
]
},
{
"name": "tokenVault0",
"isMut": true,
"isSigner": false,
"docs": [
"The address that holds pool tokens for token_0"
]
},
{
"name": "tokenVault1",
"isMut": true,
"isSigner": false,
"docs": [
"The address that holds pool tokens for token_1"
]
},
{
"name": "vault0Mint",
"isMut": false,
"isSigner": false,
"docs": [
"The mint of token vault 0"
]
},
{
"name": "vault1Mint",
"isMut": false,
"isSigner": false,
"docs": [
"The mint of token vault 1"
]
},
{
"name": "recipientTokenAccount0",
"isMut": true,
"isSigner": false,
"docs": [
"The address that receives the collected token_0 protocol fees"
]
},
{
"name": "recipientTokenAccount1",
"isMut": true,
"isSigner": false,
"docs": [
"The address that receives the collected token_1 protocol fees"
]
},
{
"name": "tokenProgram",
"isMut": false,
"isSigner": false,
"docs": [
"The SPL program to perform token transfers"
]
},
{
"name": "tokenProgram2022",
"isMut": false,
"isSigner": false,
"docs": [
"The SPL program 2022 to perform token transfers"
]
}
],
"args": [
{
"name": "amount0Requested",
"type": "u64"
},
{
"name": "amount1Requested",
"type": "u64"
}
]
},
{
"name": "collectFundFee",
"docs": [
"Collect the fund fee accrued to the pool",
"",
"# Arguments",
"",
"* `ctx` - The context of accounts",
"* `amount_0_requested` - The maximum amount of token_0 to send, can be 0 to collect fees in only token_1",
"* `amount_1_requested` - The maximum amount of token_1 to send, can be 0 to collect fees in only token_0",
""
],
"accounts": [
{
"name": "owner",
"isMut": false,
"isSigner": true,
"docs": [
"Only admin or fund_owner can collect fee now"
]
},
{
"name": "poolState",
"isMut": true,
"isSigner": false,
"docs": [
"Pool state stores accumulated protocol fee amount"
]
},
{
"name": "ammConfig",
"isMut": false,
"isSigner": false,
"docs": [
"Amm config account stores fund_owner"
]
},
{
"name": "tokenVault0",
"isMut": true,
"isSigner": false,
"docs": [
"The address that holds pool tokens for token_0"
]
},
{
"name": "tokenVault1",
"isMut": true,
"isSigner": false,
"docs": [
"The address that holds pool tokens for token_1"
]
},
{
"name": "vault0Mint",
"isMut": false,
"isSigner": false,
"docs": [
"The mint of token vault 0"
]
},
{
"name": "vault1Mint",
"isMut": false,
"isSigner": false,
"docs": [
"The mint of token vault 1"
]
},
{
"name": "recipientTokenAccount0",
"isMut": true,
"isSigner": false,
"docs": [
"The address that receives the collected token_0 protocol fees"
]
},
{
"name": "recipientTokenAccount1",
"isMut": true,
"isSigner": false,
"docs": [
"The address that receives the collected token_1 protocol fees"
]
},
{
"name": "tokenProgram",
"isMut": false,
"isSigner": false,
"docs": [
"The SPL program to perform token transfers"
]
},
{
"name": "tokenProgram2022",
"isMut": false,
"isSigner": false,
"docs": [
"The SPL program 2022 to perform token transfers"
]
}
],
"args": [
{
"name": "amount0Requested",
"type": "u64"
},
{
"name": "amount1Requested",
"type": "u64"
}
]
},
{
"name": "openPosition",
"docs": [
"#[deprecated(note = \"Use `open_position_with_token22_nft` instead.\")]",
"Creates a new position wrapped in a NFT",
"",
"# Arguments",
"",
"* `ctx` - The context of accounts",
"* `tick_lower_index` - The low boundary of market",
"* `tick_upper_index` - The upper boundary of market",
"* `tick_array_lower_start_index` - The start index of tick array which include tick low",
"* `tick_array_upper_start_index` - The start index of tick array which include tick upper",
"* `liquidity` - The liquidity to be added",
"* `amount_0_max` - The max amount of token_0 to spend, which serves as a slippage check",
"* `amount_1_max` - The max amount of token_1 to spend, which serves as a slippage check",
""
],
"accounts": [
{
"name": "payer",
"isMut": true,
"isSigner": true,
"docs": [
"Pays to mint the position"
]
},
{
"name": "positionNftOwner",
"isMut": false,
"isSigner": false
},
{
"name": "positionNftMint",
"isMut": true,
"isSigner": true,
"docs": [
"Unique token mint address"
]
},
{
"name": "positionNftAccount",
"isMut": true,
"isSigner": false,
"docs": [
"Token account where position NFT will be minted",
"This account created in the contract by cpi to avoid large stack variables"
]
},
{
"name": "metadataAccount",
"isMut": true,
"isSigner": false,
"docs": [
"To store metaplex metadata"
]
},
{
"name": "poolState",
"isMut": true,
"isSigner": false,
"docs": [
"Add liquidity for this pool"
]
},
{
"name": "protocolPosition",
"isMut": true,
"isSigner": false,
"docs": [
"Store the information of market marking in range"
]
},
{
"name": "tickArrayLower",
"isMut": true,
"isSigner": false
},
{
"name": "tickArrayUpper",
"isMut": true,
"isSigner": false
},
{
"name": "personalPosition",
"isMut": true,
"isSigner": false,
"docs": [
"personal position state"
]
},
{
"name": "tokenAccount0",
"isMut": true,
"isSigner": false,
"docs": [
"The token_0 account deposit token to the pool"
]
},
{
"name": "tokenAccount1",
"isMut": true,
"isSigner": false,
"docs": [
"The token_1 account deposit token to the pool"
]
},
{
"name": "tokenVault0",
"isMut": true,
"isSigner": false,
"docs": [
"The address that holds pool tokens for token_0"
]
},
{
"name": "tokenVault1",
"isMut": true,
"isSigner": false,
"docs": [
"The address that holds pool tokens for token_1"
]
},
{
"name": "rent",
"isMut": false,
"isSigner": false,
"docs": [
"Sysvar for token mint and ATA creation"
]
},
{
"name": "systemProgram",
"isMut": false,
"isSigner": false,
"docs": [
"Program to create the position manager state account"
]
},
{
"name": "tokenProgram",
"isMut": false,
"isSigner": false,
"docs": [
"Program to create mint account and mint tokens"
]
},
{
"name": "associatedTokenProgram",
"isMut": false,
"isSigner": false,
"docs": [
"Program to create an ATA for receiving position NFT"
]
},
{
"name": "metadataProgram",
"isMut": false,
"isSigner": false,
"docs": [
"Program to create NFT metadata"
]
}
],
"args": [
{
"name": "tickLowerIndex",
"type": "i32"
},
{
"name": "tickUpperIndex",
"type": "i32"
},
{
"name": "tickArrayLowerStartIndex",
"type": "i32"
},
{
"name": "tickArrayUpperStartIndex",
"type": "i32"
},
{
"name": "liquidity",
"type": "u128"
},
{
"name": "amount0Max",
"type": "u64"
},
{
"name": "amount1Max",
"type": "u64"
}
]
},
{
"name": "openPositionV2",
"docs": [
"#[deprecated(note = \"Use `open_position_with_token22_nft` instead.\")]",
"Creates a new position wrapped in a NFT, support Token2022",
"",
"# Arguments",
"",
"* `ctx` - The context of accounts",
"* `tick_lower_index` - The low boundary of market",
"* `tick_upper_index` - The upper boundary of market",
"* `tick_array_lower_start_index` - The start index of tick array which include tick low",
"* `tick_array_upper_start_index` - The start index of tick array which include tick upper",
"* `liquidity` - The liquidity to be added, if zero, and the base_flage is specified, calculate liquidity base amount_0_max or amount_1_max according base_flag, otherwise open position with zero liquidity",
"* `amount_0_max` - The max amount of token_0 to spend, which serves as a slippage check",
"* `amount_1_max` - The max amount of token_1 to spend, which serves as a slippage check",
"* `with_metadata` - The flag indicating whether to create NFT mint metadata",
"* `base_flag` - if the liquidity specified as zero, true: calculate liquidity base amount_0_max otherwise base amount_1_max",
""
],
"accounts": [
{
"name": "payer",
"isMut": true,
"isSigner": true,
"docs": [
"Pays to mint the position"
]
},
{
"name": "positionNftOwner",
"isMut": false,
"isSigner": false
},
{
"name": "positionNftMint",
"isMut": true,
"isSigner": true,
"docs": [
"Unique token mint address"
]
},
{
"name": "positionNftAccount",
"isMut": true,
"isSigner": false,
"docs": [
"Token account where position NFT will be minted"
]
},
{
"name": "metadataAccount",
"isMut": true,
"isSigner": false,
"docs": [
"To store metaplex metadata"
]
},
{
"name": "poolState",
"isMut": true,
"isSigner": false,
"docs": [
"Add liquidity for this pool"
]
},
{
"name": "protocolPosition",
"isMut": true,
"isSigner": false,
"docs": [
"Store the information of market marking in range"
]
},
{
"name": "tickArrayLower",
"isMut": true,
"isSigner": false
},
{
"name": "tickArrayUpper",
"isMut": true,
"isSigner": false
},
{
"name": "personalPosition",
"isMut": true,
"isSigner": false,
"docs": [
"personal position state"
]
},
{
"name": "tokenAccount0",
"isMut": true,
"isSigner": false,
"docs": [
"The token_0 account deposit token to the pool"
]
},
{
"name": "tokenAccount1",
"isMut": true,
"isSigner": false,
"docs": [
"The token_1 account deposit token to the pool"
]
},
{
"name": "tokenVault0",
"isMut": true,
"isSigner": false,
"docs": [
"The address that holds pool tokens for token_0"
]
},
{
"name": "tokenVault1",
"isMut": true,
"isSigner": false,
"docs": [
"The address that holds pool tokens for token_1"
]
},
{
"name": "rent",
"isMut": false,
"isSigner": false,
"docs": [
"Sysvar for token mint and ATA creation"
]
},
{
"name": "systemProgram",
"isMut": false,
"isSigner": false,
"docs": [
"Program to create the position manager state account"
]
},
{
"name": "tokenProgram",
"isMut": false,
"isSigner": false,
"docs": [
"Program to create mint account and mint tokens"
]
},
{
"name": "associatedTokenProgram",
"isMut": false,
"isSigner": false,
"docs": [
"Program to create an ATA for receiving position NFT"
]
},
{
"name": "metadataProgram",
"isMut": false,
"isSigner": false,
"docs": [
"Program to create NFT metadata"
]
},
{
"name": "tokenProgram2022",
"isMut": false,
"isSigner": false,
"docs": [
"Program to create mint account and mint tokens"
]
},
{
"name": "vault0Mint",
"isMut": false,
"isSigner": false,
"docs": [
"The mint of token vault 0"
]
},
{
"name": "vault1Mint",
"isMut": false,
"isSigner": false,
"docs": [
"The mint of token vault 1"
]
}
],
"args": [
{
"name": "tickLowerIndex",
"type": "i32"
},
{
"name": "tickUpperIndex",
"type": "i32"
},
{
"name": "tickArrayLowerStartIndex",
"type": "i32"
},
{
"name": "tickArrayUpperStartIndex",
"type": "i32"
},
{
"name": "liquidity",
"type": "u128"
},
{
"name": "amount0Max",
"type": "u64"
},
{
"name": "amount1Max",
"type": "u64"
},
{
"name": "withMetadata",
"type": "bool"
},
{
"name": "baseFlag",
"type": {
"option": "bool"
}
}
]
},
{
"name": "openPositionWithToken22Nft",
"docs": [
"Creates a new position wrapped in a Token2022 NFT without relying on metadata_program and metadata_account, reduce the cost for user to create a personal position.",
"",
"# Arguments",
"",
"* `ctx` - The context of accounts",
"* `tick_lower_index` - The low boundary of market",
"* `tick_upper_index` - The upper boundary of market",
"* `tick_array_lower_start_index` - The start index of tick array which include tick low",
"* `tick_array_upper_start_index` - The start index of tick array which include tick upper",
"* `liquidity` - The liquidity to be added, if zero, and the base_flage is specified, calculate liquidity base amount_0_max or amount_1_max according base_flag, otherwise open position with zero liquidity",
"* `amount_0_max` - The max amount of token_0 to spend, which serves as a slippage check",
"* `amount_1_max` - The max amount of token_1 to spend, which serves as a slippage check",
"* `with_metadata` - The flag indicating whether to create NFT mint metadata",
"* `base_flag` - if the liquidity specified as zero, true: calculate liquidity base amount_0_max otherwise base amount_1_max",
""
],
"accounts": [
{
"name": "payer",
"isMut": true,
"isSigner": true,
"docs": [
"Pays to mint the position"
]
},
{
"name": "positionNftOwner",
"isMut": false,
"isSigner": false
},
{
"name": "positionNftMint",
"isMut": true,
"isSigner": true,
"docs": [
"Unique token mint address, initialize in constract"
]
},
{
"name": "positionNftAccount",
"isMut": true,
"isSigner": false
},
{
"name": "poolState",
"isMut": true,
"isSigner": false,
"docs": [
"Add liquidity for this pool"
]
},
{
"name": "protocolPosition",
"isMut": true,
"isSigner": false,
"docs": [
"Store the information of market marking in range"
]
},
{
"name": "tickArrayLower",
"isMut": true,
"isSigner": false
},
{
"name": "tickArrayUpper",
"isMut": true,
"isSigner": false
},
{
"name": "personalPosition",
"isMut": true,
"isSigner": false,
"docs": [
"personal position state"
]
},
{
"name": "tokenAccount0",
"isMut": true,
"isSigner": false,
"docs": [
"The token_0 account deposit token to the pool"
]
},
{
"name": "tokenAccount1",
"isMut": true,
"isSigner": false,
"docs": [
"The token_1 account deposit token to the pool"
]
},
{
"name": "tokenVault0",
"isMut": true,
"isSigner": false,
"docs": [
"The address that holds pool tokens for token_0"
]
},
{
"name": "tokenVault1",
"isMut": true,
"isSigner": false,
"docs": [
"The address that holds pool tokens for token_1"
]
},
{
"name": "rent",
"isMut": false,
"isSigner": false,
"docs": [
"Sysvar for token mint and ATA creation"
]
},
{
"name": "systemProgram",
"isMut": false,
"isSigner": false,
"docs": [
"Program to create the position manager state account"
]
},
{
"name": "tokenProgram",
"isMut": false,
"isSigner": false,
"docs": [
"Program to transfer for token account"
]
},
{
"name": "associatedTokenProgram",
"isMut": false,
"isSigner": false,
"docs": [
"Program to create an ATA for receiving position NFT"
]
},
{
"name": "tokenProgram2022",
"isMut": false,
"isSigner": false,
"docs": [
"Program to create NFT mint/token account and transfer for token22 account"
]
},
{
"name": "vault0Mint",
"isMut": false,
"isSigner": false,
"docs": [
"The mint of token vault 0"
]
},
{
"name": "vault1Mint",
"isMut": false,
"isSigner": false,
"docs": [
"The mint of token vault 1"
]
}
],
"args": [
{
"name": "tickLowerIndex",
"type": "i32"
},
{
"name": "tickUpperIndex",
"type": "i32"
},
{
"name": "tickArrayLowerStartIndex",
"type": "i32"
},
{
"name": "tickArrayUpperStartIndex",
"type": "i32"
},
{
"name": "liquidity",
"type": "u128"
},
{
"name": "amount0Max",
"type": "u64"
},
{
"name": "amount1Max",
"type": "u64"
},
{
"name": "withMetadata",
"type": "bool"
},
{
"name": "baseFlag",
"type": {
"option": "bool"
}
}
]
},
{
"name": "closePosition",
"docs": [
"Close the user's position and NFT account. If the NFT mint belongs to token2022, it will also be closed and the funds returned to the NFT owner.",
"",
"# Arguments",
"",
"* `ctx` - The context of accounts",
""
],
"accounts": [
{
"name": "nftOwner",
"isMut": true,
"isSigner": true,
"docs": [
"The position nft owner"
]
},
{
"name": "positionNftMint",
"isMut": true,
"isSigner": false,
"docs": [
"Mint address bound to the personal position."
]
},
{
"name": "positionNftAccount",
"isMut": true,
"isSigner": false,
"docs": [
"User token account where position NFT be minted to"
]
},
{
"name": "personalPosition",
"isMut": true,
"isSigner": false
},
{
"name": "systemProgram",
"isMut": false,
"isSigner": false,
"docs": [
"System program to close the position state account"
]
},
{
"name": "tokenProgram",
"isMut": false,
"isSigner": false,
"docs": [
"Token/Token2022 program to close token/mint account"
]
}
],
"args": []
},
{
"name": "increaseLiquidity",
"docs": [
"#[deprecated(note = \"Use `increase_liquidity_v2` instead.\")]",
"Increases liquidity with a exist position, with amount paid by `payer`",
"",
"# Arguments",
"",
"* `ctx` - The context of accounts",
"* `liquidity` - The desired liquidity to be added, can't be zero",
"* `amount_0_max` - The max amount of token_0 to spend, which serves as a slippage check",
"* `amount_1_max` - The max amount of token_1 to spend, which serves as a slippage check",
""
],
"accounts": [
{
"name": "nftOwner",
"isMut": false,
"isSigner": true,
"docs": [
"Pays to mint the position"
]
},
{
"name": "nftAccount",
"isMut": false,
"isSigner": false,
"docs": [
"The token account for nft"
]
},
{
"name": "poolState",
"isMut": true,
"isSigner": false
},
{
"name": "protocolPosition",
"isMut": true,
"isSigner": false
},
{
"name": "personalPosition",
"isMut": true,
"isSigner": false,
"docs": [
"Increase liquidity for this position"
]
},
{
"name": "tickArrayLower",
"isMut": true,
"isSigner": false,
"docs": [
"Stores init state for the lower tick"
]
},
{
"name": "tickArrayUpper",
"isMut": true,
"isSigner": false,
"docs": [
"Stores init state for the upper tick"
]
},
{
"name": "tokenAccount0",
"isMut": true,
"isSigner": false,
"docs": [
"The payer's token account for token_0"
]
},
{
"name": "tokenAccount1",
"isMut": true,
"isSigner": false,
"docs": [
"The token account spending token_1 to mint the position"
]
},
{
"name": "tokenVault0",
"isMut": true,
"isSigner": false,
"docs": [
"The address that holds pool tokens for token_0"
]
},
{
"name": "tokenVault1",
"isMut": true,
"isSigner": false,
"docs": [
"The address that holds pool tokens for token_1"
]
},
{
"name": "tokenProgram",
"isMut": false,
"isSigner": false,
"docs": [
"Program to create mint account and mint tokens"
]
}
],
"args": [
{
"name": "liquidity",
"type": "u128"
},
{
"name": "amount0Max",
"type": "u64"
},
{
"name": "amount1Max",
"type": "u64"
}
]
},
{
"name": "increaseLiquidityV2",
"docs": [
"Increases liquidity with a exist position, with amount paid by `payer`, support Token2022",
"",
"# Arguments",
"",
"* `ctx` - The context of accounts",
"* `liquidity` - The desired liquidity to be added, if zero, calculate liquidity base amount_0 or amount_1 according base_flag",
"* `amount_0_max` - The max amount of token_0 to spend, which serves as a slippage check",
"* `amount_1_max` - The max amount of token_1 to spend, which serves as a slippage check",
"* `base_flag` - must be specified if liquidity is zero, true: calculate liquidity base amount_0_max otherwise base amount_1_max",
""
],
"accounts": [
{
"name": "nftOwner",
"isMut": false,
"isSigner": true,
"docs": [
"Pays to mint the position"
]
},
{
"name": "nftAccount",
"isMut": false,
"isSigner": false,
"docs": [
"The token account for nft"
]
},
{
"name": "poolState",
"isMut": true,
"isSigner": false
},
{
"name": "protocolPosition",
"isMut": true,
"isSigner": false
},
{
"name": "personalPosition",
"isMut": true,
"isSigner": false,
"docs": [
"Increase liquidity for this position"
]
},
{
"name": "tickArrayLower",
"isMut": true,
"isSigner": false,
"docs": [
"Stores init state for the lower tick"
]
},
{
"name": "tickArrayUpper",
"isMut": true,
"isSigner": false,
"docs": [
"Stores init state for the upper tick"
]
},
{
"name": "tokenAccount0",
"isMut": true,
"isSigner": false,
"docs": [
"The payer's token account for token_0"
]
},
{
"name": "tokenAccount1",
"isMut": true,
"isSigner": false,
"docs": [
"The token account spending token_1 to mint the position"
]
},
{
"name": "tokenVault0",
"isMut": true,
"isSigner": false,
"docs": [
"The address that holds pool tokens for token_0"
]
},
{
"name": "tokenVault1",
"isMut": true,
"isSigner": false,
"docs": [
"The address that holds pool tokens for token_1"
]
},
{
"name": "tokenProgram",
"isMut": false,
"isSigner": false,
"docs": [
"Program to create mint account and mint tokens"
]
},
{
"name": "tokenProgram2022",
"isMut": false,
"isSigner": false,
"docs": [
"Token program 2022"
]
},
{
"name": "vault0Mint",
"isMut": false,
"isSigner": false,
"docs": [
"The mint of token vault 0"
]
},
{
"name": "vault1Mint",
"isMut": false,
"isSigner": false,
"docs": [
"The mint of token vault 1"
]
}
],
"args": [
{
"name": "liquidity",
"type": "u128"
},
{
"name": "amount0Max",
"type": "u64"
},
{
"name": "amount1Max",
"type": "u64"
},
{
"name": "baseFlag",
"type": {
"option": "bool"
}
}
]
},
{
"name": "decreaseLiquidity",
"docs": [
"#[deprecated(note = \"Use `decrease_liquidity_v2` instead.\")]",
"Decreases liquidity with a exist position",
"",
"# Arguments",
"",
"* `ctx` - The context of accounts",
"* `liquidity` - The amount by which liquidity will be decreased",
"* `amount_0_min` - The minimum amount of token_0 that should be accounted for the burned liquidity",
"* `amount_1_min` - The minimum amount of token_1 that should be accounted for the burned liquidity",
""
],
"accounts": [
{
"name": "nftOwner",
"isMut": false,
"isSigner": true,
"docs": [
"The position owner or delegated authority"
]
},
{
"name": "nftAccount",
"isMut": false,
"isSigner": false,
"docs": [
"The token account for the tokenized position"
]
},
{
"name": "personalPosition",
"isMut": true,
"isSigner": false,
"docs": [
"Decrease liquidity for this position"
]
},
{
"name": "poolState",
"isMut": true,
"isSigner": false
},
{
"name": "protocolPosition",
"isMut": true,
"isSigner": false
},
{
"name": "tokenVault0",
"isMut": true,
"isSigner": false,
"docs": [
"Token_0 vault"
]
},
{
"name": "tokenVault1",
"isMut": true,
"isSigner": false,
"docs": [
"Token_1 vault"
]
},
{
"name": "tickArrayLower",
"isMut": true,
"isSigner": false,
"docs": [
"Stores init state for the lower tick"
]
},
{
"name": "tickArrayUpper",
"isMut": true,
"isSigner": false,
"docs": [
"Stores init state for the upper tick"
]
},
{
"name": "recipientTokenAccount0",
"isMut": true,
"isSigner": false,
"docs": [
"The destination token account for receive amount_0"
]
},
{
"name": "recipientTokenAccount1",
"isMut": true,
"isSigner": false,
"docs": [
"The destination token account for receive amount_1"
]
},
{
"name": "tokenProgram",
"isMut": false,
"isSigner": false,
"docs": [
"SPL program to transfer out tokens"
]
}
],
"args": [
{
"name": "liquidity",
"type": "u128"
},
{
"name": "amount0Min",
"type": "u64"
},
{
"name": "amount1Min",
"type": "u64"
}
]
},
{
"name": "decreaseLiquidityV2",
"docs": [
"Decreases liquidity with a exist position, support Token2022",
"",
"# Arguments",
"",
"* `ctx` - The context of accounts",
"* `liquidity` - The amount by which liquidity will be decreased",
"* `amount_0_min` - The minimum amount of token_0 that should be accounted for the burned liquidity",
"* `amount_1_min` - The minimum amount of token_1 that should be accounted for the burned liquidity",
""
],
"accounts": [
{
"name": "nftOwner",
"isMut": false,
"isSigner": true,
"docs": [
"The position owner or delegated authority"
]
},
{
"name": "nftAccount",
"isMut": false,
"isSigner": false,
"docs": [
"The token account for the tokenized position"
]
},
{
"name": "personalPosition",
"isMut": true,
"isSigner": false,
"docs": [
"Decrease liquidity for this position"
]
},
{
"name": "poolState",
"isMut": true,
"isSigner": false
},
{
"name": "protocolPosition",
"isMut": true,
"isSigner": false
},
{
"name": "tokenVault0",
"isMut": true,
"isSigner": false,
"docs": [
"Token_0 vault"
]
},
{
"name": "tokenVault1",
"isMut": true,
"isSigner": false,
"docs": [
"Token_1 vault"
]
},
{
"name": "tickArrayLower",
"isMut": true,
"isSigner": false,
"docs": [
"Stores init state for the lower tick"
]
},
{
"name": "tickArrayUpper",
"isMut": true,
"isSigner": false,
"docs": [
"Stores init state for the upper tick"
]
},
{
"name": "recipientTokenAccount0",
"isMut": true,
"isSigner": false,
"docs": [
"The destination token account for receive amount_0"
]
},
{
"name": "recipientTokenAccount1",
"isMut": true,
"isSigner": false,
"docs": [
"The destination token account for receive amount_1"
]
},
{
"name": "tokenProgram",
"isMut": false,
"isSigner": false,
"docs": [
"SPL program to transfer out tokens"
]
},
{
"name": "tokenProgram2022",
"isMut": false,
"isSigner": false,
"docs": [
"Token program 2022"
]
},
{
"name": "memoProgram",
"isMut": false,
"isSigner": false,
"docs": [
"memo program"
]
},
{
"name": "vault0Mint",
"isMut": false,
"isSigner": false,
"docs": [
"The mint of token vault 0"
]
},
{
"name": "vault1Mint",
"isMut": false,
"isSigner": false,
"docs": [
"The mint of token vault 1"
]
}
],
"args": [
{
"name": "liquidity",
"type": "u128"
},
{
"name": "amount0Min",
"type": "u64"
},
{
"name": "amount1Min",
"type": "u64"
}
]
},
{
"name": "swap",
"docs": [
"#[deprecated(note = \"Use `swap_v2` instead.\")]",
"Swaps one token for as much as possible of another token across a single pool",
"",
"# Arguments",
"",
"* `ctx` - The context of accounts",
"* `amount` - Arranged in pairs with other_amount_threshold. (amount_in, amount_out_minimum) or (amount_out, amount_in_maximum)",
"* `other_amount_threshold` - For slippage check",
"* `sqrt_price_limit` - The Q64.64 sqrt price √P limit. If zero for one, the price cannot",
"* `is_base_input` - swap base input or swap base output",
""
],
"accounts": [
{
"name": "payer",
"isMut": false,
"isSigner": true,
"docs": [
"The user performing the swap"
]
},
{
"name": "ammConfig",
"isMut": false,
"isSigner": false,
"docs": [
"The factory state to read protocol fees"
]
},
{
"name": "poolState",
"isMut": true,
"isSigner": false,
"docs": [
"The program account of the pool in which the swap will be performed"
]
},
{
"name": "inputTokenAccount",
"isMut": true,
"isSigner": false,
"docs": [
"The user token account for input token"
]
},
{
"name": "outputTokenAccount",
"isMut": true,
"isSigner": false,
"docs": [
"The user token account for output token"
]
},
{
"name": "inputVault",
"isMut": true,
"isSigner": false,
"docs": [
"The vault token account for input token"
]
},
{
"name": "outputVault",
"isMut": true,
"isSigner": false,
"docs": [
"The vault token account for output token"
]
},
{
"name": "observationState",
"isMut": true,
"isSigner": false,
"docs": [
"The program account for the most recent oracle observation"
]
},
{
"name": "tokenProgram",
"isMut": false,
"isSigner": false,
"docs": [
"SPL program for token transfers"
]
},
{
"name": "tickArray",
"isMut": true,
"isSigner": false
}
],
"args": [
{
"name": "amount",
"type": "u64"
},
{
"name": "otherAmountThreshold",
"type": "u64"
},
{
"name": "sqrtPriceLimitX64",
"type": "u128"
},
{
"name": "isBaseInput",
"type": "bool"
}
]
},
{
"name": "swapV2",
"docs": [
"Swaps one token for as much as possible of another token across a single pool, support token program 2022",
"",
"# Arguments",
"",
"* `ctx` - The context of accounts",
"* `amount` - Arranged in pairs with other_amount_threshold. (amount_in, amount_out_minimum) or (amount_out, amount_in_maximum)",
"* `other_amount_threshold` - For slippage check",
"* `sqrt_price_limit` - The Q64.64 sqrt price √P limit. If zero for one, the price cannot",
"* `is_base_input` - swap base input or swap base output",
""
],
"accounts": [
{
"name": "payer",
"isMut": false,
"isSigner": true,
"docs": [
"The user performing the swap"
]
},
{
"name": "ammConfig",
"isMut": false,
"isSigner": false,
"docs": [
"The factory state to read protocol fees"
]
},
{
"name": "poolState",
"isMut": true,
"isSigner": false,
"docs": [
"The program account of the pool in which the swap will be performed"
]
},
{
"name": "inputTokenAccount",
"isMut": true,
"isSigner": false,
"docs": [
"The user token account for input token"
]
},
{
"name": "outputTokenAccount",
"isMut": true,
"isSigner": false,
"docs": [
"The user token account for output token"
]
},
{
"name": "inputVault",
"isMut": true,
"isSigner": false,
"docs": [
"The vault token account for input token"
]
},
{
"name": "outputVault",
"isMut": true,
"isSigner": false,
"docs": [
"The vault token account for output token"
]
},
{
"name": "observationState",
"isMut": true,
"isSigner": false,
"docs": [
"The program account for the most recent oracle observation"
]
},
{
"name": "tokenProgram",
"isMut": false,
"isSigner": false,
"docs": [
"SPL program for token transfers"
]
},
{
"name": "tokenProgram2022",
"isMut": false,
"isSigner": false,
"docs": [
"SPL program 2022 for token transfers"
]
},
{
"name": "memoProgram",
"isMut": false,
"isSigner": false
},
{
"name": "inputVaultMint",
"isMut": false,
"isSigner": false,
"docs": [
"The mint of token vault 0"
]
},
{
"name": "outputVaultMint",
"isMut": false,
"isSigner": false,
"docs": [
"The mint of token vault 1"
]
}
],
"args": [
{
"name": "amount",
"type": "u64"
},
{
"name": "otherAmountThreshold",
"type": "u64"
},
{
"name": "sqrtPriceLimitX64",
"type": "u128"
},
{
"name": "isBaseInput",
"type": "bool"
}
]
},
{
"name": "swapRouterBaseIn",
"docs": [
"Swap token for as much as possible of another token across the path provided, base input",
"",
"# Arguments",
"",
"* `ctx` - The context of accounts",
"* `amount_in` - Token amount to be swapped in",
"* `amount_out_minimum` - Panic if output amount is below minimum amount. For slippage.",
""
],
"accounts": [
{
"name": "payer",
"isMut": false,
"isSigner": true,
"docs": [
"The user performing the swap"
]
},
{
"name": "inputTokenAccount",
"isMut": true,
"isSigner": false,
"docs": [
"The token account that pays input tokens for the swap"
]
},
{
"name": "inputTokenMint",
"isMut": true,
"isSigner": false,
"docs": [
"The mint of input token"
]
},
{
"name": "tokenProgram",
"isMut": false,
"isSigner": false,
"docs": [
"SPL program for token transfers"
]
},
{
"name": "tokenProgram2022",
"isMut": false,
"isSigner": false,
"docs": [
"SPL program 2022 for token transfers"
]
},
{
"name": "memoProgram",
"isMut": false,
"isSigner": false
}
],
"args": [
{
"name": "amountIn",
"type": "u64"
},
{
"name": "amountOutMinimum",
"type": "u64"
}
]
}
],
"accounts": [
{
"name": "AmmConfig",
"docs": [
"Holds the current owner of the factory"
],
"type": {
"kind": "struct",
"fields": [
{
"name": "bump",
"docs": [
"Bump to identify PDA"
],
"type": "u8"
},
{
"name": "index",
"type": "u16"
},
{
"name": "owner",
"docs": [
"Address of the protocol owner"
],
"type": "publicKey"
},
{
"name": "protocolFeeRate",
"docs": [
"The protocol fee"
],
"type": "u32"
},
{
"name": "tradeFeeRate",
"docs": [
"The trade fee, denominated in hundredths of a bip (10^-6)"
],
"type": "u32"
},
{
"name": "tickSpacing",
"docs": [
"The tick spacing"
],
"type": "u16"
},
{
"name": "fundFeeRate",
"docs": [
"The fund fee, denominated in hundredths of a bip (10^-6)"
],
"type": "u32"
},
{
"name": "paddingU32",
"type": "u32"
},
{
"name": "fundOwner",
"type": "publicKey"
},
{
"name": "padding",
"type": {
"array": [
"u64",
3
]
}
}
]
}
},
{
"name": "OperationState",
"docs": [
"Holds the current owner of the factory"
],
"type": {
"kind": "struct",
"fields": [
{
"name": "bump",
"docs": [
"Bump to identify PDA"
],
"type": "u8"
},
{
"name": "operationOwners",
"docs": [
"Address of the operation owner"
],
"type": {
"array": [
"publicKey",
10
]
}
},
{
"name": "whitelistMints",
"docs": [
"The mint address of whitelist to emmit reward"
],
"type": {
"array": [
"publicKey",
100
]
}
}
]
}
},
{
"name": "ObservationState",
"type": {
"kind": "struct",
"fields": [
{
"name": "initialized",
"docs": [
"Whether the ObservationState is initialized"
],
"type": "bool"
},
{
"name": "recentEpoch",
"docs": [
"recent update epoch"
],
"type": "u64"
},
{
"name": "observationIndex",
"docs": [
"the most-recently updated index of the observations array"
],
"type": "u16"
},
{
"name": "poolId",
"docs": [
"belongs to which pool"
],
"type": "publicKey"
},
{
"name": "observations",
"docs": [
"observation array"
],
"type": {
"array": [
{
"defined": "Observation"
},
100
]
}
},
{
"name": "padding",
"docs": [
"padding for feature update"
],
"type": {
"array": [
"u64",
4
]
}
}
]
}
},
{
"name": "PersonalPositionState",
"type": {
"kind": "struct",
"fields": [
{
"name": "bump",
"docs": [
"Bump to identify PDA"
],
"type": {
"array": [
"u8",
1
]
}
},
{
"name": "nftMint",
"docs": [
"Mint address of the tokenized position"
],
"type": "publicKey"
},
{
"name": "poolId",
"docs": [
"The ID of the pool with which this token is connected"
],
"type": "publicKey"
},
{
"name": "tickLowerIndex",
"docs": [
"The lower bound tick of the position"
],
"type": "i32"
},
{
"name": "tickUpperIndex",
"docs": [
"The upper bound tick of the position"
],
"type": "i32"
},
{
"name": "liquidity",
"docs": [
"The amount of liquidity owned by this position"
],
"type": "u128"
},
{
"name": "feeGrowthInside0LastX64",
"docs": [
"The token_0 fee growth of the aggregate position as of the last action on the individual position"
],
"type": "u128"
},
{
"name": "feeGrowthInside1LastX64",
"docs": [
"The token_1 fee growth of the aggregate position as of the last action on the individual position"
],
"type": "u128"
},
{
"name": "tokenFeesOwed0",
"docs": [
"The fees owed to the position owner in token_0, as of the last computation"
],
"type": "u64"
},
{
"name": "tokenFeesOwed1",
"docs": [
"The fees owed to the position owner in token_1, as of the last computation"
],
"type": "u64"
},
{
"name": "rewardInfos",
"type": {
"array": [
{
"defined": "PositionRewardInfo"
},
3
]
}
},
{
"name": "recentEpoch",
"type": "u64"
},
{
"name": "padding",
"type": {
"array": [
"u64",
7
]
}
}
]
}
},
{
"name": "PoolState",
"docs": [
"The pool state",
"",
"PDA of `[POOL_SEED, config, token_mint_0, token_mint_1]`",
""
],
"type": {
"kind": "struct",
"fields": [
{
"name": "bump",
"docs": [
"Bump to identify PDA"
],
"type": {
"array": [
"u8",
1
]
}
},
{
"name": "ammConfig",
"type": "publicKey"
},
{
"name": "owner",
"type": "publicKey"
},
{
"name": "tokenMint0",
"docs": [
"Token pair of the pool, where token_mint_0 address < token_mint_1 address"
],
"type": "publicKey"
},
{
"name": "tokenMint1",
"type": "publicKey"
},
{
"name": "tokenVault0",
"docs": [
"Token pair vault"
],
"type": "publicKey"
},
{
"name": "tokenVault1",
"type": "publicKey"
},
{
"name": "observationKey",
"docs": [
"observation account key"
],
"type": "publicKey"
},
{
"name": "mintDecimals0",
"docs": [
"mint0 and mint1 decimals"
],
"type": "u8"
},
{
"name": "mintDecimals1",
"type": "u8"
},
{
"name": "tickSpacing",
"docs": [
"The minimum number of ticks between initialized ticks"
],
"type": "u16"
},
{
"name": "liquidity",
"docs": [
"The currently in range liquidity available to the pool."
],
"type": "u128"
},
{
"name": "sqrtPriceX64",
"docs": [
"The current price of the pool as a sqrt(token_1/token_0) Q64.64 value"
],
"type": "u128"
},
{
"name": "tickCurrent",
"docs": [
"The current tick of the pool, i.e. according to the last tick transition that was run."
],
"type": "i32"
},
{
"name": "padding3",
"type": "u16"
},
{
"name": "padding4",
"type": "u16"
},
{
"name": "feeGrowthGlobal0X64",
"docs": [
"The fee growth as a Q64.64 number, i.e. fees of token_0 and token_1 collected per",
"unit of liquidity for the entire life of the pool."
],
"type": "u128"
},
{
"name": "feeGrowthGlobal1X64",
"type": "u128"
},
{
"name": "protocolFeesToken0",
"docs": [
"The amounts of token_0 and token_1 that are owed to the protocol."
],
"type": "u64"
},
{
"name": "protocolFeesToken1",
"type": "u64"
},
{
"name": "swapInAmountToken0",
"docs": [
"The amounts in and out of swap token_0 and token_1"
],
"type": "u128"
},
{
"name": "swapOutAmountToken1",
"type": "u128"
},
{
"name": "swapInAmountToken1",
"type": "u128"
},
{
"name": "swapOutAmountToken0",
"type": "u128"
},
{
"name": "status",
"docs": [
"Bitwise representation of the state of the pool",
"bit0, 1: disable open position and increase liquidity, 0: normal",
"bit1, 1: disable decrease liquidity, 0: normal",
"bit2, 1: disable collect fee, 0: normal",
"bit3, 1: disable collect reward, 0: normal",
"bit4, 1: disable swap, 0: normal"
],
"type": "u8"
},
{
"name": "padding",
"docs": [
"Leave blank for future use"
],
"type": {
"array": [
"u8",
7
]
}
},
{
"name": "rewardInfos",
"type": {
"array": [
{
"defined": "RewardInfo"
},
3
]
}
},
{
"name": "tickArrayBitmap",
"docs": [
"Packed initialized tick array state"
],
"type": {
"array": [
"u64",
16
]
}
},
{
"name": "totalFeesToken0",
"docs": [
"except protocol_fee and fund_fee"
],
"type": "u64"
},
{
"name": "totalFeesClaimedToken0",
"docs": [
"except protocol_fee and fund_fee"
],
"type": "u64"
},
{
"name": "totalFeesToken1",
"type": "u64"
},
{
"name": "totalFeesClaimedToken1",
"type": "u64"
},
{
"name": "fundFeesToken0",
"type": "u64"
},
{
"name": "fundFeesToken1",
"type": "u64"
},
{
"name": "openTime",
"type": "u64"
},
{
"name": "recentEpoch",
"type": "u64"
},
{
"name": "padding1",
"type": {
"array": [
"u64",
24
]
}
},
{
"name": "padding2",
"type": {
"array": [
"u64",
32
]
}
}
]
}
},
{
"name": "ProtocolPositionState",
"docs": [
"Info stored for each user's position"
],
"type": {
"kind": "struct",
"fields": [
{
"name": "bump",
"docs": [
"Bump to identify PDA"
],
"type": "u8"
},
{
"name": "poolId",
"docs": [
"The ID of the pool with which this token is connected"
],
"type": "publicKey"
},
{
"name": "tickLowerIndex",
"docs": [
"The lower bound tick of the position"
],
"type": "i32"
},
{
"name": "tickUpperIndex",
"docs": [
"The upper bound tick of the position"
],
"type": "i32"
},
{
"name": "liquidity",
"docs": [
"The amount of liquidity owned by this position"
],
"type": "u128"
},
{
"name": "feeGrowthInside0LastX64",
"docs": [
"The token_0 fee growth per unit of liquidity as of the last update to liquidity or fees owed"
],
"type": "u128"
},
{
"name": "feeGrowthInside1LastX64",
"docs": [
"The token_1 fee growth per unit of liquidity as of the last update to liquidity or fees owed"
],
"type": "u128"
},
{
"name": "tokenFeesOwed0",
"docs": [
"The fees owed to the position owner in token_0"
],
"type": "u64"
},
{
"name": "tokenFeesOwed1",
"docs": [
"The fees owed to the position owner in token_1"
],
"type": "u64"
},
{
"name": "rewardGrowthInside",
"docs": [
"The reward growth per unit of liquidity as of the last update to liquidity"
],
"type": {
"array": [
"u128",
3
]
}
},
{
"name": "recentEpoch",
"type": "u64"
},
{
"name": "padding",
"type": {
"array": [
"u64",
7
]
}
}
]
}
},
{
"name": "TickArrayState",
"type": {
"kind": "struct",
"fields": [
{
"name": "poolId",
"type": "publicKey"
},
{
"name": "startTickIndex",
"type": "i32"
},
{
"name": "ticks",
"type": {
"array": [
{
"defined": "TickState"
},
60
]
}
},
{
"name": "initializedTickCount",
"type": "u8"
},
{
"name": "recentEpoch",
"type": "u64"
},
{
"name": "padding",
"type": {
"array": [
"u8",
107
]
}
}
]
}
},
{
"name": "TickArrayBitmapExtension",
"type": {
"kind": "struct",
"fields": [
{
"name": "poolId",
"type": "publicKey"
},
{
"name": "positiveTickArrayBitmap",
"docs": [
"Packed initialized tick array state for start_tick_index is positive"
],
"type": {
"array": [
{
"array": [
"u64",
8
]
},
14
]
}
},
{
"name": "negativeTickArrayBitmap",
"docs": [
"Packed initialized tick array state for start_tick_index is negitive"
],
"type": {
"array": [
{
"array": [
"u64",
8
]
},
14
]
}
}
]
}
}
],
"types": [
{
"name": "InitializeRewardParam",
"type": {
"kind": "struct",
"fields": [
{
"name": "openTime",
"docs": [
"Reward open time"
],
"type": "u64"
},
{
"name": "endTime",
"docs": [
"Reward end time"
],
"type": "u64"
},
{
"name": "emissionsPerSecondX64",
"docs": [
"Token reward per second are earned per unit of liquidity"
],
"type": "u128"
}
]
}
},
{
"name": "Observation",
"docs": [
"The element of observations in ObservationState"
],
"type": {
"kind": "struct",
"fields": [
{
"name": "blockTimestamp",
"docs": [
"The block timestamp of the observation"
],
"type": "u32"
},
{
"name": "tickCumulative",
"docs": [
"the cumulative of tick during the duration time"
],
"type": "i64"
},
{
"name": "padding",
"docs": [
"padding for feature update"
],
"type": {
"array": [
"u64",
4
]
}
}
]
}
},
{
"name": "PositionRewardInfo",
"type": {
"kind": "struct",
"fields": [
{
"name": "growthInsideLastX64",
"type": "u128"
},
{
"name": "rewardAmountOwed",
"type": "u64"
}
]
}
},
{
"name": "RewardInfo",
"type": {
"kind": "struct",
"fields": [
{
"name": "rewardState",
"docs": [
"Reward state"
],
"type": "u8"
},
{
"name": "openTime",
"docs": [
"Reward open time"
],
"type": "u64"
},
{
"name": "endTime",
"docs": [
"Reward end time"
],
"type": "u64"
},
{
"name": "lastUpdateTime",
"docs": [
"Reward last update time"
],
"type": "u64"
},
{
"name": "emissionsPerSecondX64",
"docs": [
"Q64.64 number indicates how many tokens per second are earned per unit of liquidity."
],
"type": "u128"
},
{
"name": "rewardTotalEmissioned",
"docs": [
"The total amount of reward emissioned"
],
"type": "u64"
},
{
"name": "rewardClaimed",
"docs": [
"The total amount of claimed reward"
],
"type": "u64"
},
{
"name": "tokenMint",
"docs": [
"Reward token mint."
],
"type": "publicKey"
},
{
"name": "tokenVault",
"docs": [
"Reward vault token account."
],
"type": "publicKey"
},
{
"name": "authority",
"docs": [
"The owner that has permission to set reward param"
],
"type": "publicKey"
},
{
"name": "rewardGrowthGlobalX64",
"docs": [
"Q64.64 number that tracks the total tokens earned per unit of liquidity since the reward",
"emissions were turned on."
],
"type": "u128"
}
]
}
},
{
"name": "TickState",
"type": {
"kind": "struct",
"fields": [
{
"name": "tick",
"type": "i32"
},
{
"name": "liquidityNet",
"docs": [
"Amount of net liquidity added (subtracted) when tick is crossed from left to right (right to left)"
],
"type": "i128"
},
{
"name": "liquidityGross",
"docs": [
"The total position liquidity that references this tick"
],
"type": "u128"
},
{
"name": "feeGrowthOutside0X64",
"docs": [
"Fee growth per unit of liquidity on the _other_ side of this tick (relative to the current tick)",
"only has relative meaning, not absolute — the value depends on when the tick is initialized"
],
"type": "u128"
},
{
"name": "feeGrowthOutside1X64",
"type": "u128"
},
{
"name": "rewardGrowthsOutsideX64",
"type": {
"array": [
"u128",
3
]
}
},
{
"name": "padding",
"type": {
"array": [
"u32",
13
]
}
}
]
}
},
{
"name": "PoolStatusBitIndex",
"type": {
"kind": "enum",
"variants": [
{
"name": "OpenPositionOrIncreaseLiquidity"
},
{
"name": "DecreaseLiquidity"
},
{
"name": "CollectFee"
},
{
"name": "CollectReward"
},
{
"name": "Swap"
}
]
}
},
{
"name": "PoolStatusBitFlag",
"type": {
"kind": "enum",
"variants": [
{
"name": "Enable"
},
{
"name": "Disable"
}
]
}
},
{
"name": "RewardState",
"docs": [
"State of reward"
],
"type": {
"kind": "enum",
"variants": [
{
"name": "Uninitialized"
},
{
"name": "Initialized"
},
{
"name": "Opening"
},
{
"name": "Ended"
}
]
}
},
{
"name": "TickArryBitmap",
"type": {
"kind": "alias",
"value": {
"array": [
"u64",
8
]
}
}
}
],
"events": [
{
"name": "ConfigChangeEvent",
"fields": [
{
"name": "index",
"type": "u16",
"index": false
},
{
"name": "owner",
"type": "publicKey",
"index": true
},
{
"name": "protocolFeeRate",
"type": "u32",
"index": false
},
{
"name": "tradeFeeRate",
"type": "u32",
"index": false
},
{
"name": "tickSpacing",
"type": "u16",
"index": false
},
{
"name": "fundFeeRate",
"type": "u32",
"index": false
},
{
"name": "fundOwner",
"type": "publicKey",
"index": false
}
]
},
{
"name": "CreatePersonalPositionEvent",
"fields": [
{
"name": "poolState",
"type": "publicKey",
"index": false
},
{
"name": "minter",
"type": "publicKey",
"index": false
},
{
"name": "nftOwner",
"type": "publicKey",
"index": false
},
{
"name": "tickLowerIndex",
"type": "i32",
"index": false
},
{
"name": "tickUpperIndex",
"type": "i32",
"index": false
},
{
"name": "liquidity",
"type": "u128",
"index": false
},
{
"name": "depositAmount0",
"type": "u64",
"index": false
},
{
"name": "depositAmount1",
"type": "u64",
"index": false
},
{
"name": "depositAmount0TransferFee",
"type": "u64",
"index": false
},
{
"name": "depositAmount1TransferFee",
"type": "u64",
"index": false
}
]
},
{
"name": "IncreaseLiquidityEvent",
"fields": [
{
"name": "positionNftMint",
"type": "publicKey",
"index": false
},
{
"name": "liquidity",
"type": "u128",
"index": false
},
{
"name": "amount0",
"type": "u64",
"index": false
},
{
"name": "amount1",
"type": "u64",
"index": false
},
{
"name": "amount0TransferFee",
"type": "u64",
"index": false
},
{
"name": "amount1TransferFee",
"type": "u64",
"index": false
}
]
},
{
"name": "DecreaseLiquidityEvent",
"fields": [
{
"name": "positionNftMint",
"type": "publicKey",
"index": false
},
{
"name": "liquidity",
"type": "u128",
"index": false
},
{
"name": "decreaseAmount0",
"type": "u64",
"index": false
},
{
"name": "decreaseAmount1",
"type": "u64",
"index": false
},
{
"name": "feeAmount0",
"type": "u64",
"index": false
},
{
"name": "feeAmount1",
"type": "u64",
"index": false
},
{
"name": "rewardAmounts",
"type": {
"array": [
"u64",
3
]
},
"index": false
},
{
"name": "transferFee0",
"type": "u64",
"index": false
},
{
"name": "transferFee1",
"type": "u64",
"index": false
}
]
},
{
"name": "LiquidityCalculateEvent",
"fields": [
{
"name": "poolLiquidity",
"type": "u128",
"index": false
},
{
"name": "poolSqrtPriceX64",
"type": "u128",
"index": false
},
{
"name": "poolTick",
"type": "i32",
"index": false
},
{
"name": "calcAmount0",
"type": "u64",
"index": false
},
{
"name": "calcAmount1",
"type": "u64",
"index": false
},
{
"name": "tradeFeeOwed0",
"type": "u64",
"index": false
},
{
"name": "tradeFeeOwed1",
"type": "u64",
"index": false
},
{
"name": "transferFee0",
"type": "u64",
"index": false
},
{
"name": "transferFee1",
"type": "u64",
"index": false
}
]
},
{
"name": "CollectPersonalFeeEvent",
"fields": [
{
"name": "positionNftMint",
"type": "publicKey",
"index": false
},
{
"name": "recipientTokenAccount0",
"type": "publicKey",
"index": false
},
{
"name": "recipientTokenAccount1",
"type": "publicKey",
"index": false
},
{
"name": "amount0",
"type": "u64",
"index": false
},
{
"name": "amount1",
"type": "u64",
"index": false
}
]
},
{
"name": "UpdateRewardInfosEvent",
"fields": [
{
"name": "rewardGrowthGlobalX64",
"type": {
"array": [
"u128",
3
]
},
"index": false
}
]
},
{
"name": "PoolCreatedEvent",
"fields": [
{
"name": "tokenMint0",
"type": "publicKey",
"index": false
},
{
"name": "tokenMint1",
"type": "publicKey",
"index": false
},
{
"name": "tickSpacing",
"type": "u16",
"index": false
},
{
"name": "poolState",
"type": "publicKey",
"index": false
},
{
"name": "sqrtPriceX64",
"type": "u128",
"index": false
},
{
"name": "tick",
"type": "i32",
"index": false
},
{
"name": "tokenVault0",
"type": "publicKey",
"index": false
},
{
"name": "tokenVault1",
"type": "publicKey",
"index": false
}
]
},
{
"name": "CollectProtocolFeeEvent",
"fields": [
{
"name": "poolState",
"type": "publicKey",
"index": false
},
{
"name": "recipientTokenAccount0",
"type": "publicKey",
"index": false
},
{
"name": "recipientTokenAccount1",
"type": "publicKey",
"index": false
},
{
"name": "amount0",
"type": "u64",
"index": false
},
{
"name": "amount1",
"type": "u64",
"index": false
}
]
},
{
"name": "SwapEvent",
"fields": [
{
"name": "poolState",
"type": "publicKey",
"index": false
},
{
"name": "sender",
"type": "publicKey",
"index": false
},
{
"name": "tokenAccount0",
"type": "publicKey",
"index": false
},
{
"name": "tokenAccount1",
"type": "publicKey",
"index": false
},
{
"name": "amount0",
"type": "u64",
"index": false
},
{
"name": "transferFee0",
"type": "u64",
"index": false
},
{
"name": "amount1",
"type": "u64",
"index": false
},
{
"name": "transferFee1",
"type": "u64",
"index": false
},
{
"name": "zeroForOne",
"type": "bool",
"index": false
},
{
"name": "sqrtPriceX64",
"type": "u128",
"index": false
},
{
"name": "liquidity",
"type": "u128",
"index": false
},
{
"name": "tick",
"type": "i32",
"index": false
}
]
},
{
"name": "LiquidityChangeEvent",
"fields": [
{
"name": "poolState",
"type": "publicKey",
"index": false
},
{
"name": "tick",
"type": "i32",
"index": false
},
{
"name": "tickLower",
"type": "i32",
"index": false
},
{
"name": "tickUpper",
"type": "i32",
"index": false
},
{
"name": "liquidityBefore",
"type": "u128",
"index": false
},
{
"name": "liquidityAfter",
"type": "u128",
"index": false
}
]
}
],
"errors": [
{
"code": 6000,
"name": "LOK",
"msg": "LOK"
},
{
"code": 6001,
"name": "NotApproved",
"msg": "Not approved"
},
{
"code": 6002,
"name": "InvalidUpdateConfigFlag",
"msg": "invalid update amm config flag"
},
{
"code": 6003,
"name": "AccountLack",
"msg": "Account lack"
},
{
"code": 6004,
"name": "ClosePositionErr",
"msg": "Remove liquitity, collect fees owed and reward then you can close position account"
},
{
"code": 6005,
"name": "ZeroMintAmount",
"msg": "Minting amount should be greater than 0"
},
{
"code": 6006,
"name": "InvaildTickIndex",
"msg": "Tick out of range"
},
{
"code": 6007,
"name": "TickInvaildOrder",
"msg": "The lower tick must be below the upper tick"
},
{
"code": 6008,
"name": "TickLowerOverflow",
"msg": "The tick must be greater, or equal to the minimum tick(-443636)"
},
{
"code": 6009,
"name": "TickUpperOverflow",
"msg": "The tick must be lesser than, or equal to the maximum tick(443636)"
},
{
"code": 6010,
"name": "TickAndSpacingNotMatch",
"msg": "tick % tick_spacing must be zero"
},
{
"code": 6011,
"name": "InvalidTickArray",
"msg": "Invaild tick array account"
},
{
"code": 6012,
"name": "InvalidTickArrayBoundary",
"msg": "Invaild tick array boundary"
},
{
"code": 6013,
"name": "SqrtPriceLimitOverflow",
"msg": "Square root price limit overflow"
},
{
"code": 6014,
"name": "SqrtPriceX64",
"msg": "sqrt_price_x64 out of range"
},
{
"code": 6015,
"name": "LiquiditySubValueErr",
"msg": "Liquidity sub delta L must be smaller than before"
},
{
"code": 6016,
"name": "LiquidityAddValueErr",
"msg": "Liquidity add delta L must be greater, or equal to before"
},
{
"code": 6017,
"name": "InvaildLiquidity",
"msg": "Invaild liquidity when update position"
},
{
"code": 6018,
"name": "ForbidBothZeroForSupplyLiquidity",
"msg": "Both token amount must not be zero while supply liquidity"
},
{
"code": 6019,
"name": "LiquidityInsufficient",
"msg": "Liquidity insufficient"
},
{
"code": 6020,
"name": "TransactionTooOld",
"msg": "Transaction too old"
},
{
"code": 6021,
"name": "PriceSlippageCheck",
"msg": "Price slippage check"
},
{
"code": 6022,
"name": "TooLittleOutputReceived",
"msg": "Too little output received"
},
{
"code": 6023,
"name": "TooMuchInputPaid",
"msg": "Too much input paid"
},
{
"code": 6024,
"name": "ZeroAmountSpecified",
"msg": "Swap special amount can not be zero"
},
{
"code": 6025,
"name": "InvalidInputPoolVault",
"msg": "Input pool vault is invalid"
},
{
"code": 6026,
"name": "TooSmallInputOrOutputAmount",
"msg": "Swap input or output amount is too small"
},
{
"code": 6027,
"name": "NotEnoughTickArrayAccount",
"msg": "Not enought tick array account"
},
{
"code": 6028,
"name": "InvalidFirstTickArrayAccount",
"msg": "Invaild first tick array account"
},
{
"code": 6029,
"name": "InvalidRewardIndex",
"msg": "Invalid reward index"
},
{
"code": 6030,
"name": "FullRewardInfo",
"msg": "The init reward token reach to the max"
},
{
"code": 6031,
"name": "RewardTokenAlreadyInUse",
"msg": "The init reward token already in use"
},
{
"code": 6032,
"name": "ExceptPoolVaultMint",
"msg": "The reward tokens must contain one of pool vault mint except the last reward"
},
{
"code": 6033,
"name": "InvalidRewardInitParam",
"msg": "Invalid reward init param"
},
{
"code": 6034,
"name": "InvalidRewardDesiredAmount",
"msg": "Invalid collect reward desired amount"
},
{
"code": 6035,
"name": "InvalidRewardInputAccountNumber",
"msg": "Invalid collect reward input account number"
},
{
"code": 6036,
"name": "InvalidRewardPeriod",
"msg": "Invalid reward period"
},
{
"code": 6037,
"name": "NotApproveUpdateRewardEmissiones",
"msg": "Modification of emissiones is allowed within 72 hours from the end of the previous cycle"
},
{
"code": 6038,
"name": "UnInitializedRewardInfo",
"msg": "uninitialized reward info"
},
{
"code": 6039,
"name": "NotSupportMint",
"msg": "Not support token_2022 mint extension"
},
{
"code": 6040,
"name": "MissingTickArrayBitmapExtensionAccount",
"msg": "Missing tickarray bitmap extension account"
},
{
"code": 6041,
"name": "InsufficientLiquidityForDirection",
"msg": "Insufficient liquidity for this direction"
},
{
"code": 6042,
"name": "MaxTokenOverflow",
"msg": "Max token overflow"
},
{
"code": 6043,
"name": "CalculateOverflow",
"msg": "calculate overflow"
}
]
}