{ "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 negative" ], "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": "InvalidTickIndex", "msg": "Tick out of range" }, { "code": 6007, "name": "TickInvalidOrder", "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": "Invalid tick array account" }, { "code": 6012, "name": "InvalidTickArrayBoundary", "msg": "Invalid 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": "InvalidLiquidity", "msg": "Invalid 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": "Invalid 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" } ], "metadata": { "address": "CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK" } }