{
"address": "CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C",
"metadata": {
"name": "raydium_cp_swap",
"version": "0.2.0",
"spec": "0.1.0",
"description": "Raydium constant product AMM, supports Token2022 and without Openbook"
},
"instructions": [
{
"name": "close_permission_pda",
"docs": [
"Close a permission account",
"",
"# Arguments",
"",
"* `ctx`- The context of accounts",
""
],
"discriminator": [
156,
84,
32,
118,
69,
135,
70,
123
],
"accounts": [
{
"name": "owner",
"writable": true,
"signer": true,
"address": "GThUX1Atko4tqhN2NaiTazWSeFWMuiUvfFnyJyUghFMJ"
},
{
"name": "permission_authority"
},
{
"name": "permission",
"docs": [
"Initialize config state account to store protocol owner address and fee rates."
],
"writable": true,
"pda": {
"seeds": [
{
"kind": "const",
"value": [
112,
101,
114,
109,
105,
115,
115,
105,
111,
110
]
},
{
"kind": "account",
"path": "permission_authority"
}
]
}
},
{
"name": "system_program",
"address": "11111111111111111111111111111111"
}
],
"args": []
},
{
"name": "collect_creator_fee",
"docs": [
"Collect the creator fee",
"",
"# Arguments",
"",
"* `ctx` - The context of accounts",
""
],
"discriminator": [
20,
22,
86,
123,
198,
28,
219,
132
],
"accounts": [
{
"name": "creator",
"docs": [
"Only pool creator can collect fee"
],
"writable": true,
"signer": true
},
{
"name": "authority",
"pda": {
"seeds": [
{
"kind": "const",
"value": [
118,
97,
117,
108,
116,
95,
97,
110,
100,
95,
108,
112,
95,
109,
105,
110,
116,
95,
97,
117,
116,
104,
95,
115,
101,
101,
100
]
}
]
}
},
{
"name": "pool_state",
"docs": [
"Pool state stores accumulated protocol fee amount"
],
"writable": true
},
{
"name": "amm_config",
"docs": [
"Amm config account stores fund_owner"
]
},
{
"name": "token_0_vault",
"docs": [
"The address that holds pool tokens for token_0"
],
"writable": true
},
{
"name": "token_1_vault",
"docs": [
"The address that holds pool tokens for token_1"
],
"writable": true
},
{
"name": "vault_0_mint",
"docs": [
"The mint of token_0 vault"
]
},
{
"name": "vault_1_mint",
"docs": [
"The mint of token_1 vault"
]
},
{
"name": "creator_token_0",
"docs": [
"The address that receives the collected token_0 fund fees"
],
"writable": true,
"pda": {
"seeds": [
{
"kind": "account",
"path": "creator"
},
{
"kind": "account",
"path": "token_0_program"
},
{
"kind": "account",
"path": "vault_0_mint"
}
],
"program": {
"kind": "const",
"value": [
140,
151,
37,
143,
78,
36,
137,
241,
187,
61,
16,
41,
20,
142,
13,
131,
11,
90,
19,
153,
218,
255,
16,
132,
4,
142,
123,
216,
219,
233,
248,
89
]
}
}
},
{
"name": "creator_token_1",
"docs": [
"The address that receives the collected token_1 fund fees"
],
"writable": true,
"pda": {
"seeds": [
{
"kind": "account",
"path": "creator"
},
{
"kind": "account",
"path": "token_1_program"
},
{
"kind": "account",
"path": "vault_1_mint"
}
],
"program": {
"kind": "const",
"value": [
140,
151,
37,
143,
78,
36,
137,
241,
187,
61,
16,
41,
20,
142,
13,
131,
11,
90,
19,
153,
218,
255,
16,
132,
4,
142,
123,
216,
219,
233,
248,
89
]
}
}
},
{
"name": "token_0_program",
"docs": [
"Spl token program or token program 2022"
]
},
{
"name": "token_1_program",
"docs": [
"Spl token program or token program 2022"
]
},
{
"name": "associated_token_program",
"docs": [
"Program to create an ATA for receiving position NFT"
],
"address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"
},
{
"name": "system_program",
"docs": [
"To create a new program account"
],
"address": "11111111111111111111111111111111"
}
],
"args": []
},
{
"name": "collect_fund_fee",
"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",
""
],
"discriminator": [
167,
138,
78,
149,
223,
194,
6,
126
],
"accounts": [
{
"name": "owner",
"docs": [
"Only admin or fund_owner can collect fee now"
],
"signer": true
},
{
"name": "authority",
"pda": {
"seeds": [
{
"kind": "const",
"value": [
118,
97,
117,
108,
116,
95,
97,
110,
100,
95,
108,
112,
95,
109,
105,
110,
116,
95,
97,
117,
116,
104,
95,
115,
101,
101,
100
]
}
]
}
},
{
"name": "pool_state",
"docs": [
"Pool state stores accumulated protocol fee amount"
],
"writable": true
},
{
"name": "amm_config",
"docs": [
"Amm config account stores fund_owner"
]
},
{
"name": "token_0_vault",
"docs": [
"The address that holds pool tokens for token_0"
],
"writable": true
},
{
"name": "token_1_vault",
"docs": [
"The address that holds pool tokens for token_1"
],
"writable": true
},
{
"name": "vault_0_mint",
"docs": [
"The mint of token_0 vault"
]
},
{
"name": "vault_1_mint",
"docs": [
"The mint of token_1 vault"
]
},
{
"name": "recipient_token_0_account",
"docs": [
"The address that receives the collected token_0 fund fees"
],
"writable": true
},
{
"name": "recipient_token_1_account",
"docs": [
"The address that receives the collected token_1 fund fees"
],
"writable": true
},
{
"name": "token_program",
"docs": [
"The SPL program to perform token transfers"
],
"address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
},
{
"name": "token_program_2022",
"docs": [
"The SPL program 2022 to perform token transfers"
],
"address": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"
}
],
"args": [
{
"name": "amount_0_requested",
"type": "u64"
},
{
"name": "amount_1_requested",
"type": "u64"
}
]
},
{
"name": "collect_protocol_fee",
"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",
""
],
"discriminator": [
136,
136,
252,
221,
194,
66,
126,
89
],
"accounts": [
{
"name": "owner",
"docs": [
"Only admin or owner can collect fee now"
],
"signer": true
},
{
"name": "authority",
"pda": {
"seeds": [
{
"kind": "const",
"value": [
118,
97,
117,
108,
116,
95,
97,
110,
100,
95,
108,
112,
95,
109,
105,
110,
116,
95,
97,
117,
116,
104,
95,
115,
101,
101,
100
]
}
]
}
},
{
"name": "pool_state",
"docs": [
"Pool state stores accumulated protocol fee amount"
],
"writable": true
},
{
"name": "amm_config",
"docs": [
"Amm config account stores owner"
]
},
{
"name": "token_0_vault",
"docs": [
"The address that holds pool tokens for token_0"
],
"writable": true
},
{
"name": "token_1_vault",
"docs": [
"The address that holds pool tokens for token_1"
],
"writable": true
},
{
"name": "vault_0_mint",
"docs": [
"The mint of token_0 vault"
]
},
{
"name": "vault_1_mint",
"docs": [
"The mint of token_1 vault"
]
},
{
"name": "recipient_token_0_account",
"docs": [
"The address that receives the collected token_0 protocol fees"
],
"writable": true
},
{
"name": "recipient_token_1_account",
"docs": [
"The address that receives the collected token_1 protocol fees"
],
"writable": true
},
{
"name": "token_program",
"docs": [
"The SPL program to perform token transfers"
],
"address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
},
{
"name": "token_program_2022",
"docs": [
"The SPL program 2022 to perform token transfers"
],
"address": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"
}
],
"args": [
{
"name": "amount_0_requested",
"type": "u64"
},
{
"name": "amount_1_requested",
"type": "u64"
}
]
},
{
"name": "create_amm_config",
"docs": [
"# Arguments",
"",
"* `ctx`- The accounts needed by instruction.",
"* `index` - The index of amm config, there may be multiple config.",
"* `trade_fee_rate` - Trade fee rate, can be changed.",
"* `protocol_fee_rate` - The rate of protocol fee within trade fee.",
"* `fund_fee_rate` - The rate of fund fee within trade fee.",
""
],
"discriminator": [
137,
52,
237,
212,
215,
117,
108,
104
],
"accounts": [
{
"name": "owner",
"docs": [
"Address to be set as protocol owner."
],
"writable": true,
"signer": true,
"address": "GThUX1Atko4tqhN2NaiTazWSeFWMuiUvfFnyJyUghFMJ"
},
{
"name": "amm_config",
"docs": [
"Initialize config state account to store protocol owner address and fee rates."
],
"writable": true,
"pda": {
"seeds": [
{
"kind": "const",
"value": [
97,
109,
109,
95,
99,
111,
110,
102,
105,
103
]
},
{
"kind": "arg",
"path": "index"
}
]
}
},
{
"name": "system_program",
"address": "11111111111111111111111111111111"
}
],
"args": [
{
"name": "index",
"type": "u16"
},
{
"name": "trade_fee_rate",
"type": "u64"
},
{
"name": "protocol_fee_rate",
"type": "u64"
},
{
"name": "fund_fee_rate",
"type": "u64"
},
{
"name": "create_pool_fee",
"type": "u64"
},
{
"name": "creator_fee_rate",
"type": "u64"
}
]
},
{
"name": "create_permission_pda",
"docs": [
"Create a permission account",
"",
"# Arguments",
"",
"* `ctx`- The context of accounts",
""
],
"discriminator": [
135,
136,
2,
216,
137,
169,
181,
202
],
"accounts": [
{
"name": "owner",
"writable": true,
"signer": true,
"address": "GThUX1Atko4tqhN2NaiTazWSeFWMuiUvfFnyJyUghFMJ"
},
{
"name": "permission_authority"
},
{
"name": "permission",
"docs": [
"Initialize config state account to store protocol owner address and fee rates."
],
"writable": true,
"pda": {
"seeds": [
{
"kind": "const",
"value": [
112,
101,
114,
109,
105,
115,
115,
105,
111,
110
]
},
{
"kind": "account",
"path": "permission_authority"
}
]
}
},
{
"name": "system_program",
"address": "11111111111111111111111111111111"
}
],
"args": []
},
{
"name": "deposit",
"docs": [
"Deposit lp token to the pool",
"",
"# Arguments",
"",
"* `ctx`- The context of accounts",
"* `lp_token_amount` - Increased number of LPs",
"* `maximum_token_0_amount` - Maximum token 0 amount to deposit, prevents excessive slippage",
"* `maximum_token_1_amount` - Maximum token 1 amount to deposit, prevents excessive slippage",
""
],
"discriminator": [
242,
35,
198,
137,
82,
225,
242,
182
],
"accounts": [
{
"name": "owner",
"docs": [
"Pays to mint the position"
],
"signer": true
},
{
"name": "authority",
"pda": {
"seeds": [
{
"kind": "const",
"value": [
118,
97,
117,
108,
116,
95,
97,
110,
100,
95,
108,
112,
95,
109,
105,
110,
116,
95,
97,
117,
116,
104,
95,
115,
101,
101,
100
]
}
]
}
},
{
"name": "pool_state",
"writable": true
},
{
"name": "owner_lp_token",
"docs": [
"Owner lp token account"
],
"writable": true
},
{
"name": "token_0_account",
"docs": [
"The payer's token account for token_0"
],
"writable": true
},
{
"name": "token_1_account",
"docs": [
"The payer's token account for token_1"
],
"writable": true
},
{
"name": "token_0_vault",
"docs": [
"The address that holds pool tokens for token_0"
],
"writable": true
},
{
"name": "token_1_vault",
"docs": [
"The address that holds pool tokens for token_1"
],
"writable": true
},
{
"name": "token_program",
"docs": [
"token Program"
],
"address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
},
{
"name": "token_program_2022",
"docs": [
"Token program 2022"
],
"address": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"
},
{
"name": "vault_0_mint",
"docs": [
"The mint of token_0 vault"
]
},
{
"name": "vault_1_mint",
"docs": [
"The mint of token_1 vault"
]
},
{
"name": "lp_mint",
"docs": [
"Lp token mint"
],
"writable": true
}
],
"args": [
{
"name": "lp_token_amount",
"type": "u64"
},
{
"name": "maximum_token_0_amount",
"type": "u64"
},
{
"name": "maximum_token_1_amount",
"type": "u64"
}
]
},
{
"name": "initialize",
"docs": [
"Creates a pool for the given token pair and the initial price",
"",
"# Arguments",
"",
"* `ctx`- The context of accounts",
"* `init_amount_0` - the initial amount_0 to deposit",
"* `init_amount_1` - the initial amount_1 to deposit",
"* `open_time` - the timestamp allowed for swap",
""
],
"discriminator": [
175,
175,
109,
31,
13,
152,
155,
237
],
"accounts": [
{
"name": "creator",
"docs": [
"Address paying to create the pool. Can be anyone"
],
"writable": true,
"signer": true
},
{
"name": "amm_config",
"docs": [
"Which config the pool belongs to."
]
},
{
"name": "authority",
"docs": [
"pool vault and lp mint authority"
],
"pda": {
"seeds": [
{
"kind": "const",
"value": [
118,
97,
117,
108,
116,
95,
97,
110,
100,
95,
108,
112,
95,
109,
105,
110,
116,
95,
97,
117,
116,
104,
95,
115,
101,
101,
100
]
}
]
}
},
{
"name": "pool_state",
"docs": [
"PDA account:",
"seeds = [",
"POOL_SEED.as_bytes(),",
"amm_config.key().as_ref(),",
"token_0_mint.key().as_ref(),",
"token_1_mint.key().as_ref(),",
"],",
"",
"Or random account: must be signed by cli"
],
"writable": true
},
{
"name": "token_0_mint",
"docs": [
"Token_0 mint, the key must smaller than token_1 mint."
]
},
{
"name": "token_1_mint",
"docs": [
"Token_1 mint, the key must grater then token_0 mint."
]
},
{
"name": "lp_mint",
"docs": [
"pool lp mint"
],
"writable": true,
"pda": {
"seeds": [
{
"kind": "const",
"value": [
112,
111,
111,
108,
95,
108,
112,
95,
109,
105,
110,
116
]
},
{
"kind": "account",
"path": "pool_state"
}
]
}
},
{
"name": "creator_token_0",
"docs": [
"payer token0 account"
],
"writable": true
},
{
"name": "creator_token_1",
"docs": [
"creator token1 account"
],
"writable": true
},
{
"name": "creator_lp_token",
"docs": [
"creator lp token account"
],
"writable": true,
"pda": {
"seeds": [
{
"kind": "account",
"path": "creator"
},
{
"kind": "const",
"value": [
6,
221,
246,
225,
215,
101,
161,
147,
217,
203,
225,
70,
206,
235,
121,
172,
28,
180,
133,
237,
95,
91,
55,
145,
58,
140,
245,
133,
126,
255,
0,
169
]
},
{
"kind": "account",
"path": "lp_mint"
}
],
"program": {
"kind": "const",
"value": [
140,
151,
37,
143,
78,
36,
137,
241,
187,
61,
16,
41,
20,
142,
13,
131,
11,
90,
19,
153,
218,
255,
16,
132,
4,
142,
123,
216,
219,
233,
248,
89
]
}
}
},
{
"name": "token_0_vault",
"writable": true,
"pda": {
"seeds": [
{
"kind": "const",
"value": [
112,
111,
111,
108,
95,
118,
97,
117,
108,
116
]
},
{
"kind": "account",
"path": "pool_state"
},
{
"kind": "account",
"path": "token_0_mint"
}
]
}
},
{
"name": "token_1_vault",
"writable": true,
"pda": {
"seeds": [
{
"kind": "const",
"value": [
112,
111,
111,
108,
95,
118,
97,
117,
108,
116
]
},
{
"kind": "account",
"path": "pool_state"
},
{
"kind": "account",
"path": "token_1_mint"
}
]
}
},
{
"name": "create_pool_fee",
"docs": [
"create pool fee account"
],
"writable": true,
"address": "DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"
},
{
"name": "observation_state",
"docs": [
"an account to store oracle observations"
],
"writable": true,
"pda": {
"seeds": [
{
"kind": "const",
"value": [
111,
98,
115,
101,
114,
118,
97,
116,
105,
111,
110
]
},
{
"kind": "account",
"path": "pool_state"
}
]
}
},
{
"name": "token_program",
"docs": [
"Program to create mint account and mint tokens"
],
"address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
},
{
"name": "token_0_program",
"docs": [
"Spl token program or token program 2022"
]
},
{
"name": "token_1_program",
"docs": [
"Spl token program or token program 2022"
]
},
{
"name": "associated_token_program",
"docs": [
"Program to create an ATA for receiving position NFT"
],
"address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"
},
{
"name": "system_program",
"docs": [
"To create a new program account"
],
"address": "11111111111111111111111111111111"
},
{
"name": "rent",
"docs": [
"Sysvar for program account"
],
"address": "SysvarRent111111111111111111111111111111111"
}
],
"args": [
{
"name": "init_amount_0",
"type": "u64"
},
{
"name": "init_amount_1",
"type": "u64"
},
{
"name": "open_time",
"type": "u64"
}
]
},
{
"name": "initialize_with_permission",
"docs": [
"Create a pool with permission",
"",
"# Arguments",
"",
"* `ctx`- The context of accounts",
"* `init_amount_0` - the initial amount_0 to deposit",
"* `init_amount_1` - the initial amount_1 to deposit",
"* `open_time` - the timestamp allowed for swap",
"* `creator_fee_on` - creator fee model, 0:both token0 and token1 (depends on the input), 1: only token0, 2: only token1",
""
],
"discriminator": [
63,
55,
254,
65,
49,
178,
89,
121
],
"accounts": [
{
"name": "payer",
"docs": [
"Address paying to create the pool. Can be anyone"
],
"writable": true,
"signer": true
},
{
"name": "creator"
},
{
"name": "amm_config",
"docs": [
"Which config the pool belongs to."
]
},
{
"name": "authority",
"docs": [
"pool vault and lp mint authority"
],
"pda": {
"seeds": [
{
"kind": "const",
"value": [
118,
97,
117,
108,
116,
95,
97,
110,
100,
95,
108,
112,
95,
109,
105,
110,
116,
95,
97,
117,
116,
104,
95,
115,
101,
101,
100
]
}
]
}
},
{
"name": "pool_state",
"docs": [
"PDA account:",
"seeds = [",
"POOL_SEED.as_bytes(),",
"amm_config.key().as_ref(),",
"token_0_mint.key().as_ref(),",
"token_1_mint.key().as_ref(),",
"],",
"",
"Or random account: must be signed by cli"
],
"writable": true
},
{
"name": "token_0_mint",
"docs": [
"Token_0 mint, the key must smaller than token_1 mint."
]
},
{
"name": "token_1_mint",
"docs": [
"Token_1 mint, the key must grater then token_0 mint."
]
},
{
"name": "lp_mint",
"docs": [
"pool lp mint"
],
"writable": true,
"pda": {
"seeds": [
{
"kind": "const",
"value": [
112,
111,
111,
108,
95,
108,
112,
95,
109,
105,
110,
116
]
},
{
"kind": "account",
"path": "pool_state"
}
]
}
},
{
"name": "payer_token_0",
"docs": [
"payer token0 account"
],
"writable": true
},
{
"name": "payer_token_1",
"docs": [
"payer token1 account"
],
"writable": true
},
{
"name": "payer_lp_token",
"docs": [
"payer lp token account"
],
"writable": true,
"pda": {
"seeds": [
{
"kind": "account",
"path": "payer"
},
{
"kind": "const",
"value": [
6,
221,
246,
225,
215,
101,
161,
147,
217,
203,
225,
70,
206,
235,
121,
172,
28,
180,
133,
237,
95,
91,
55,
145,
58,
140,
245,
133,
126,
255,
0,
169
]
},
{
"kind": "account",
"path": "lp_mint"
}
],
"program": {
"kind": "const",
"value": [
140,
151,
37,
143,
78,
36,
137,
241,
187,
61,
16,
41,
20,
142,
13,
131,
11,
90,
19,
153,
218,
255,
16,
132,
4,
142,
123,
216,
219,
233,
248,
89
]
}
}
},
{
"name": "token_0_vault",
"writable": true,
"pda": {
"seeds": [
{
"kind": "const",
"value": [
112,
111,
111,
108,
95,
118,
97,
117,
108,
116
]
},
{
"kind": "account",
"path": "pool_state"
},
{
"kind": "account",
"path": "token_0_mint"
}
]
}
},
{
"name": "token_1_vault",
"writable": true,
"pda": {
"seeds": [
{
"kind": "const",
"value": [
112,
111,
111,
108,
95,
118,
97,
117,
108,
116
]
},
{
"kind": "account",
"path": "pool_state"
},
{
"kind": "account",
"path": "token_1_mint"
}
]
}
},
{
"name": "create_pool_fee",
"docs": [
"create pool fee account"
],
"writable": true,
"address": "DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"
},
{
"name": "observation_state",
"docs": [
"an account to store oracle observations"
],
"writable": true,
"pda": {
"seeds": [
{
"kind": "const",
"value": [
111,
98,
115,
101,
114,
118,
97,
116,
105,
111,
110
]
},
{
"kind": "account",
"path": "pool_state"
}
]
}
},
{
"name": "permission",
"pda": {
"seeds": [
{
"kind": "const",
"value": [
112,
101,
114,
109,
105,
115,
115,
105,
111,
110
]
},
{
"kind": "account",
"path": "payer"
}
]
}
},
{
"name": "token_program",
"docs": [
"Program to create mint account and mint tokens"
],
"address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
},
{
"name": "token_0_program",
"docs": [
"Spl token program or token program 2022"
]
},
{
"name": "token_1_program",
"docs": [
"Spl token program or token program 2022"
]
},
{
"name": "associated_token_program",
"docs": [
"Program to create an ATA for receiving position NFT"
],
"address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"
},
{
"name": "system_program",
"docs": [
"To create a new program account"
],
"address": "11111111111111111111111111111111"
}
],
"args": [
{
"name": "init_amount_0",
"type": "u64"
},
{
"name": "init_amount_1",
"type": "u64"
},
{
"name": "open_time",
"type": "u64"
},
{
"name": "creator_fee_on",
"type": {
"defined": {
"name": "CreatorFeeOn"
}
}
}
]
},
{
"name": "swap_base_input",
"docs": [
"Swap the tokens in the pool base input amount",
"",
"# Arguments",
"",
"* `ctx`- The context of accounts",
"* `amount_in` - input amount to transfer, output to DESTINATION is based on the exchange rate",
"* `minimum_amount_out` - Minimum amount of output token, prevents excessive slippage",
""
],
"discriminator": [
143,
190,
90,
218,
196,
30,
51,
222
],
"accounts": [
{
"name": "payer",
"docs": [
"The user performing the swap"
],
"signer": true
},
{
"name": "authority",
"pda": {
"seeds": [
{
"kind": "const",
"value": [
118,
97,
117,
108,
116,
95,
97,
110,
100,
95,
108,
112,
95,
109,
105,
110,
116,
95,
97,
117,
116,
104,
95,
115,
101,
101,
100
]
}
]
}
},
{
"name": "amm_config",
"docs": [
"The factory state to read protocol fees"
]
},
{
"name": "pool_state",
"docs": [
"The program account of the pool in which the swap will be performed"
],
"writable": true
},
{
"name": "input_token_account",
"docs": [
"The user token account for input token"
],
"writable": true
},
{
"name": "output_token_account",
"docs": [
"The user token account for output token"
],
"writable": true
},
{
"name": "input_vault",
"docs": [
"The vault token account for input token"
],
"writable": true
},
{
"name": "output_vault",
"docs": [
"The vault token account for output token"
],
"writable": true
},
{
"name": "input_token_program",
"docs": [
"SPL program for input token transfers"
]
},
{
"name": "output_token_program",
"docs": [
"SPL program for output token transfers"
]
},
{
"name": "input_token_mint",
"docs": [
"The mint of input token"
]
},
{
"name": "output_token_mint",
"docs": [
"The mint of output token"
]
},
{
"name": "observation_state",
"docs": [
"The program account for the most recent oracle observation"
],
"writable": true
}
],
"args": [
{
"name": "amount_in",
"type": "u64"
},
{
"name": "minimum_amount_out",
"type": "u64"
}
]
},
{
"name": "swap_base_output",
"docs": [
"Swap the tokens in the pool base output amount",
"",
"# Arguments",
"",
"* `ctx`- The context of accounts",
"* `max_amount_in` - input amount prevents excessive slippage",
"* `amount_out` - amount of output token",
""
],
"discriminator": [
55,
217,
98,
86,
163,
74,
180,
173
],
"accounts": [
{
"name": "payer",
"docs": [
"The user performing the swap"
],
"signer": true
},
{
"name": "authority",
"pda": {
"seeds": [
{
"kind": "const",
"value": [
118,
97,
117,
108,
116,
95,
97,
110,
100,
95,
108,
112,
95,
109,
105,
110,
116,
95,
97,
117,
116,
104,
95,
115,
101,
101,
100
]
}
]
}
},
{
"name": "amm_config",
"docs": [
"The factory state to read protocol fees"
]
},
{
"name": "pool_state",
"docs": [
"The program account of the pool in which the swap will be performed"
],
"writable": true
},
{
"name": "input_token_account",
"docs": [
"The user token account for input token"
],
"writable": true
},
{
"name": "output_token_account",
"docs": [
"The user token account for output token"
],
"writable": true
},
{
"name": "input_vault",
"docs": [
"The vault token account for input token"
],
"writable": true
},
{
"name": "output_vault",
"docs": [
"The vault token account for output token"
],
"writable": true
},
{
"name": "input_token_program",
"docs": [
"SPL program for input token transfers"
]
},
{
"name": "output_token_program",
"docs": [
"SPL program for output token transfers"
]
},
{
"name": "input_token_mint",
"docs": [
"The mint of input token"
]
},
{
"name": "output_token_mint",
"docs": [
"The mint of output token"
]
},
{
"name": "observation_state",
"docs": [
"The program account for the most recent oracle observation"
],
"writable": true
}
],
"args": [
{
"name": "max_amount_in",
"type": "u64"
},
{
"name": "amount_out",
"type": "u64"
}
]
},
{
"name": "update_amm_config",
"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 value can be 0 | 1 | 2 | 3 | 4, otherwise will report a error",
""
],
"discriminator": [
49,
60,
174,
136,
154,
28,
116,
200
],
"accounts": [
{
"name": "owner",
"docs": [
"The amm config owner or admin"
],
"signer": true,
"address": "GThUX1Atko4tqhN2NaiTazWSeFWMuiUvfFnyJyUghFMJ"
},
{
"name": "amm_config",
"docs": [
"Amm config account to be changed"
],
"writable": true
}
],
"args": [
{
"name": "param",
"type": "u8"
},
{
"name": "value",
"type": "u64"
}
]
},
{
"name": "update_pool_status",
"docs": [
"Update pool status for given value",
"",
"# Arguments",
"",
"* `ctx`- The context of accounts",
"* `status` - The value of status",
""
],
"discriminator": [
130,
87,
108,
6,
46,
224,
117,
123
],
"accounts": [
{
"name": "authority",
"signer": true,
"address": "GThUX1Atko4tqhN2NaiTazWSeFWMuiUvfFnyJyUghFMJ"
},
{
"name": "pool_state",
"writable": true
}
],
"args": [
{
"name": "status",
"type": "u8"
}
]
},
{
"name": "withdraw",
"docs": [
"Withdraw lp for token0 and token1",
"",
"# Arguments",
"",
"* `ctx`- The context of accounts",
"* `lp_token_amount` - Amount of pool tokens to burn. User receives an output of token a and b based on the percentage of the pool tokens that are returned.",
"* `minimum_token_0_amount` - Minimum amount of token 0 to receive, prevents excessive slippage",
"* `minimum_token_1_amount` - Minimum amount of token 1 to receive, prevents excessive slippage",
""
],
"discriminator": [
183,
18,
70,
156,
148,
109,
161,
34
],
"accounts": [
{
"name": "owner",
"docs": [
"Pays to mint the position"
],
"signer": true
},
{
"name": "authority",
"pda": {
"seeds": [
{
"kind": "const",
"value": [
118,
97,
117,
108,
116,
95,
97,
110,
100,
95,
108,
112,
95,
109,
105,
110,
116,
95,
97,
117,
116,
104,
95,
115,
101,
101,
100
]
}
]
}
},
{
"name": "pool_state",
"docs": [
"Pool state account"
],
"writable": true
},
{
"name": "owner_lp_token",
"docs": [
"Owner lp token account"
],
"writable": true
},
{
"name": "token_0_account",
"docs": [
"The token account for receive token_0,"
],
"writable": true
},
{
"name": "token_1_account",
"docs": [
"The token account for receive token_1"
],
"writable": true
},
{
"name": "token_0_vault",
"docs": [
"The address that holds pool tokens for token_0"
],
"writable": true
},
{
"name": "token_1_vault",
"docs": [
"The address that holds pool tokens for token_1"
],
"writable": true
},
{
"name": "token_program",
"docs": [
"token Program"
],
"address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
},
{
"name": "token_program_2022",
"docs": [
"Token program 2022"
],
"address": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"
},
{
"name": "vault_0_mint",
"docs": [
"The mint of token_0 vault"
]
},
{
"name": "vault_1_mint",
"docs": [
"The mint of token_1 vault"
]
},
{
"name": "lp_mint",
"docs": [
"Pool lp token mint"
],
"writable": true
},
{
"name": "memo_program",
"docs": [
"memo program"
],
"address": "MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"
}
],
"args": [
{
"name": "lp_token_amount",
"type": "u64"
},
{
"name": "minimum_token_0_amount",
"type": "u64"
},
{
"name": "minimum_token_1_amount",
"type": "u64"
}
]
}
],
"accounts": [
{
"name": "AmmConfig",
"discriminator": [
218,
244,
33,
104,
203,
203,
43,
111
]
},
{
"name": "ObservationState",
"discriminator": [
122,
174,
197,
53,
129,
9,
165,
132
]
},
{
"name": "Permission",
"discriminator": [
224,
83,
28,
79,
10,
253,
161,
28
]
},
{
"name": "PoolState",
"discriminator": [
247,
237,
227,
245,
215,
195,
222,
70
]
}
],
"events": [
{
"name": "LpChangeEvent",
"discriminator": [
121,
163,
205,
201,
57,
218,
117,
60
]
},
{
"name": "SwapEvent",
"discriminator": [
64,
198,
205,
232,
38,
8,
113,
226
]
}
],
"errors": [
{
"code": 6000,
"name": "NotApproved",
"msg": "Not approved"
},
{
"code": 6001,
"name": "InvalidOwner",
"msg": "Input account owner is not the program address"
},
{
"code": 6002,
"name": "EmptySupply",
"msg": "Input token account empty"
},
{
"code": 6003,
"name": "InvalidInput",
"msg": "InvalidInput"
},
{
"code": 6004,
"name": "IncorrectLpMint",
"msg": "Address of the provided lp token mint is incorrect"
},
{
"code": 6005,
"name": "ExceededSlippage",
"msg": "Exceeds desired slippage limit"
},
{
"code": 6006,
"name": "ZeroTradingTokens",
"msg": "Given pool token amount results in zero trading tokens"
},
{
"code": 6007,
"name": "NotSupportMint",
"msg": "Not support token_2022 mint extension"
},
{
"code": 6008,
"name": "InvalidVault",
"msg": "invaild vault"
},
{
"code": 6009,
"name": "InitLpAmountTooLess",
"msg": "Init lp amount is too less(Because 100 amount lp will be locked)"
},
{
"code": 6010,
"name": "TransferFeeCalculateNotMatch",
"msg": "TransferFee calculate not match"
},
{
"code": 6011,
"name": "MathOverflow",
"msg": "Math overflow"
},
{
"code": 6012,
"name": "InsufficientVault",
"msg": "Insufficient vault"
},
{
"code": 6013,
"name": "InvalidFeeModel",
"msg": "Invalid fee model"
},
{
"code": 6014,
"name": "NoFeeCollect",
"msg": "Fee is zero"
}
],
"types": [
{
"name": "AmmConfig",
"docs": [
"Holds the current owner of the factory"
],
"type": {
"kind": "struct",
"fields": [
{
"name": "bump",
"docs": [
"Bump to identify PDA"
],
"type": "u8"
},
{
"name": "disable_create_pool",
"docs": [
"Status to control if new pool can be create"
],
"type": "bool"
},
{
"name": "index",
"docs": [
"Config index"
],
"type": "u16"
},
{
"name": "trade_fee_rate",
"docs": [
"The trade fee, denominated in hundredths of a bip (10^-6)"
],
"type": "u64"
},
{
"name": "protocol_fee_rate",
"docs": [
"The protocol fee"
],
"type": "u64"
},
{
"name": "fund_fee_rate",
"docs": [
"The fund fee, denominated in hundredths of a bip (10^-6)"
],
"type": "u64"
},
{
"name": "create_pool_fee",
"docs": [
"Fee for create a new pool"
],
"type": "u64"
},
{
"name": "protocol_owner",
"docs": [
"Address of the protocol fee owner"
],
"type": "pubkey"
},
{
"name": "fund_owner",
"docs": [
"Address of the fund fee owner"
],
"type": "pubkey"
},
{
"name": "creator_fee_rate",
"docs": [
"The pool creator fee, denominated in hundredths of a bip (10^-6)"
],
"type": "u64"
},
{
"name": "padding",
"docs": [
"padding"
],
"type": {
"array": [
"u64",
15
]
}
}
]
}
},
{
"name": "CreatorFeeOn",
"type": {
"kind": "enum",
"variants": [
{
"name": "BothToken"
},
{
"name": "OnlyToken0"
},
{
"name": "OnlyToken1"
}
]
}
},
{
"name": "LpChangeEvent",
"docs": [
"Emitted when deposit and withdraw"
],
"type": {
"kind": "struct",
"fields": [
{
"name": "pool_id",
"type": "pubkey"
},
{
"name": "lp_amount_before",
"type": "u64"
},
{
"name": "token_0_vault_before",
"docs": [
"pool vault sub trade fees"
],
"type": "u64"
},
{
"name": "token_1_vault_before",
"docs": [
"pool vault sub trade fees"
],
"type": "u64"
},
{
"name": "token_0_amount",
"docs": [
"calculate result without transfer fee"
],
"type": "u64"
},
{
"name": "token_1_amount",
"docs": [
"calculate result without transfer fee"
],
"type": "u64"
},
{
"name": "token_0_transfer_fee",
"type": "u64"
},
{
"name": "token_1_transfer_fee",
"type": "u64"
},
{
"name": "change_type",
"type": "u8"
}
]
}
},
{
"name": "Observation",
"docs": [
"The element of observations in ObservationState"
],
"serialization": "bytemuckunsafe",
"repr": {
"kind": "c",
"packed": true
},
"type": {
"kind": "struct",
"fields": [
{
"name": "block_timestamp",
"docs": [
"The block timestamp of the observation"
],
"type": "u64"
},
{
"name": "cumulative_token_0_price_x32",
"docs": [
"the cumulative of token0 price during the duration time, Q32.32, the remaining 64 bit for overflow"
],
"type": "u128"
},
{
"name": "cumulative_token_1_price_x32",
"docs": [
"the cumulative of token1 price during the duration time, Q32.32, the remaining 64 bit for overflow"
],
"type": "u128"
}
]
}
},
{
"name": "ObservationState",
"serialization": "bytemuckunsafe",
"repr": {
"kind": "c",
"packed": true
},
"type": {
"kind": "struct",
"fields": [
{
"name": "initialized",
"docs": [
"Whether the ObservationState is initialized"
],
"type": "bool"
},
{
"name": "observation_index",
"docs": [
"the most-recently updated index of the observations array"
],
"type": "u16"
},
{
"name": "pool_id",
"type": "pubkey"
},
{
"name": "observations",
"docs": [
"observation array"
],
"type": {
"array": [
{
"defined": {
"name": "Observation"
}
},
100
]
}
},
{
"name": "padding",
"docs": [
"padding for feature update"
],
"type": {
"array": [
"u64",
4
]
}
}
]
}
},
{
"name": "Permission",
"docs": [
"Holds the current owner of the factory"
],
"type": {
"kind": "struct",
"fields": [
{
"name": "authority",
"docs": [
"authority"
],
"type": "pubkey"
},
{
"name": "padding",
"docs": [
"padding"
],
"type": {
"array": [
"u64",
30
]
}
}
]
}
},
{
"name": "PoolState",
"serialization": "bytemuckunsafe",
"repr": {
"kind": "c",
"packed": true
},
"type": {
"kind": "struct",
"fields": [
{
"name": "amm_config",
"docs": [
"Which config the pool belongs"
],
"type": "pubkey"
},
{
"name": "pool_creator",
"docs": [
"pool creator"
],
"type": "pubkey"
},
{
"name": "token_0_vault",
"docs": [
"Token A"
],
"type": "pubkey"
},
{
"name": "token_1_vault",
"docs": [
"Token B"
],
"type": "pubkey"
},
{
"name": "lp_mint",
"docs": [
"Pool tokens are issued when A or B tokens are deposited.",
"Pool tokens can be withdrawn back to the original A or B token."
],
"type": "pubkey"
},
{
"name": "token_0_mint",
"docs": [
"Mint information for token A"
],
"type": "pubkey"
},
{
"name": "token_1_mint",
"docs": [
"Mint information for token B"
],
"type": "pubkey"
},
{
"name": "token_0_program",
"docs": [
"token_0 program"
],
"type": "pubkey"
},
{
"name": "token_1_program",
"docs": [
"token_1 program"
],
"type": "pubkey"
},
{
"name": "observation_key",
"docs": [
"observation account to store oracle data"
],
"type": "pubkey"
},
{
"name": "auth_bump",
"type": "u8"
},
{
"name": "status",
"docs": [
"Bitwise representation of the state of the pool",
"bit0, 1: disable deposit(value is 1), 0: normal",
"bit1, 1: disable withdraw(value is 2), 0: normal",
"bit2, 1: disable swap(value is 4), 0: normal"
],
"type": "u8"
},
{
"name": "lp_mint_decimals",
"type": "u8"
},
{
"name": "mint_0_decimals",
"docs": [
"mint0 and mint1 decimals"
],
"type": "u8"
},
{
"name": "mint_1_decimals",
"type": "u8"
},
{
"name": "lp_supply",
"docs": [
"True circulating supply without burns and lock ups"
],
"type": "u64"
},
{
"name": "protocol_fees_token_0",
"docs": [
"The amounts of token_0 and token_1 that are owed to the liquidity provider."
],
"type": "u64"
},
{
"name": "protocol_fees_token_1",
"type": "u64"
},
{
"name": "fund_fees_token_0",
"type": "u64"
},
{
"name": "fund_fees_token_1",
"type": "u64"
},
{
"name": "open_time",
"docs": [
"The timestamp allowed for swap in the pool."
],
"type": "u64"
},
{
"name": "recent_epoch",
"docs": [
"recent epoch"
],
"type": "u64"
},
{
"name": "creator_fee_on",
"docs": [
"Creator fee collect mode",
"0: both token_0 and token_1 can be used as trade fees. It depends on what the input token is when swapping",
"1: only token_0 as trade fee",
"2: only token_1 as trade fee"
],
"type": "u8"
},
{
"name": "enable_creator_fee",
"type": "bool"
},
{
"name": "padding1",
"type": {
"array": [
"u8",
6
]
}
},
{
"name": "creator_fees_token_0",
"type": "u64"
},
{
"name": "creator_fees_token_1",
"type": "u64"
},
{
"name": "padding",
"docs": [
"padding for future updates"
],
"type": {
"array": [
"u64",
28
]
}
}
]
}
},
{
"name": "SwapEvent",
"docs": [
"Emitted when swap"
],
"type": {
"kind": "struct",
"fields": [
{
"name": "pool_id",
"type": "pubkey"
},
{
"name": "input_vault_before",
"docs": [
"pool vault sub trade fees"
],
"type": "u64"
},
{
"name": "output_vault_before",
"docs": [
"pool vault sub trade fees"
],
"type": "u64"
},
{
"name": "input_amount",
"docs": [
"calculate result without transfer fee"
],
"type": "u64"
},
{
"name": "output_amount",
"docs": [
"calculate result without transfer fee"
],
"type": "u64"
},
{
"name": "input_transfer_fee",
"type": "u64"
},
{
"name": "output_transfer_fee",
"type": "u64"
},
{
"name": "base_input",
"type": "bool"
},
{
"name": "input_mint",
"type": "pubkey"
},
{
"name": "output_mint",
"type": "pubkey"
},
{
"name": "trade_fee",
"type": "u64"
},
{
"name": "creator_fee",
"docs": [
"Amount of fee tokens going to creator"
],
"type": "u64"
},
{
"name": "creator_fee_on_input",
"type": "bool"
}
]
}
}
]
}