carbon_boop_decoder/instructions/
create_meteora_pool.rs1use carbon_core::{account_utils::next_account, deserialize::ArrangeAccounts};
3#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4#[derive(Debug, Clone, borsh::BorshSerialize, borsh::BorshDeserialize, PartialEq)]
5pub struct CreateMeteoraPool {}
6
7#[derive(Debug, Clone, PartialEq)]
8#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
9pub struct CreateMeteoraPoolInstructionAccounts {
10 pub operator: solana_pubkey::Pubkey,
11 pub config: solana_pubkey::Pubkey,
12 pub vault_authority: solana_pubkey::Pubkey,
13 pub cp_amm_config: solana_pubkey::Pubkey,
14 pub pool_authority: solana_pubkey::Pubkey,
15 pub pool: solana_pubkey::Pubkey,
16 pub position: solana_pubkey::Pubkey,
17 pub position_nft_mint: solana_pubkey::Pubkey,
18 pub position_nft_account: solana_pubkey::Pubkey,
19 pub token_a_mint: solana_pubkey::Pubkey,
20 pub token_b_mint: solana_pubkey::Pubkey,
21 pub token_a_vault: solana_pubkey::Pubkey,
22 pub token_b_vault: solana_pubkey::Pubkey,
23 pub bonding_curve: solana_pubkey::Pubkey,
24 pub bonding_curve_vault: solana_pubkey::Pubkey,
25 pub bonding_curve_wsol_vault: solana_pubkey::Pubkey,
26 pub token_program: solana_pubkey::Pubkey,
27 pub token2022_program: solana_pubkey::Pubkey,
28 pub system_program: solana_pubkey::Pubkey,
29 pub event_authority: solana_pubkey::Pubkey,
30 pub cp_amm_program: solana_pubkey::Pubkey,
31 pub remaining: Vec<solana_instruction::AccountMeta>,
32}
33
34impl CreateMeteoraPool {
35 pub fn decode(data: &[u8]) -> Option<Self> {
36 if data.len() < 8 {
37 return None;
38 }
39 let discriminator = &data[0..8];
40 if discriminator != [246, 254, 33, 37, 225, 176, 41, 232] {
41 return None;
42 }
43
44 let mut data_slice = data;
45
46 data_slice = &data_slice[8..];
47
48 borsh::BorshDeserialize::deserialize(&mut data_slice).ok()
49 }
50}
51
52impl ArrangeAccounts for CreateMeteoraPool {
53 type ArrangedAccounts = CreateMeteoraPoolInstructionAccounts;
54
55 fn arrange_accounts(
56 accounts: &[solana_instruction::AccountMeta],
57 ) -> Option<Self::ArrangedAccounts> {
58 let mut iter = accounts.iter();
59
60 let operator = next_account(&mut iter)?;
61 let config = next_account(&mut iter)?;
62 let vault_authority = next_account(&mut iter)?;
63 let cp_amm_config = next_account(&mut iter)?;
64 let pool_authority = next_account(&mut iter)?;
65 let pool = next_account(&mut iter)?;
66 let position = next_account(&mut iter)?;
67 let position_nft_mint = next_account(&mut iter)?;
68 let position_nft_account = next_account(&mut iter)?;
69 let token_a_mint = next_account(&mut iter)?;
70 let token_b_mint = next_account(&mut iter)?;
71 let token_a_vault = next_account(&mut iter)?;
72 let token_b_vault = next_account(&mut iter)?;
73 let bonding_curve = next_account(&mut iter)?;
74 let bonding_curve_vault = next_account(&mut iter)?;
75 let bonding_curve_wsol_vault = next_account(&mut iter)?;
76 let token_program = next_account(&mut iter)?;
77 let token2022_program = next_account(&mut iter)?;
78 let system_program = next_account(&mut iter)?;
79 let event_authority = next_account(&mut iter)?;
80 let cp_amm_program = next_account(&mut iter)?;
81
82 let remaining = iter.as_slice();
83
84 Some(CreateMeteoraPoolInstructionAccounts {
85 operator,
86 config,
87 vault_authority,
88 cp_amm_config,
89 pool_authority,
90 pool,
91 position,
92 position_nft_mint,
93 position_nft_account,
94 token_a_mint,
95 token_b_mint,
96 token_a_vault,
97 token_b_vault,
98 bonding_curve,
99 bonding_curve_vault,
100 bonding_curve_wsol_vault,
101 token_program,
102 token2022_program,
103 system_program,
104 event_authority,
105 cp_amm_program,
106 remaining: remaining.to_vec(),
107 })
108 }
109}