carbon_virtuals_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 vpool: solana_pubkey::Pubkey,
11 pub meteora_deployer: solana_pubkey::Pubkey,
12 pub meteora_deployer_virtuals_ata: solana_pubkey::Pubkey,
13 pub meteora_deployer_token_ata: solana_pubkey::Pubkey,
14 pub vpool_virtuals_ata: solana_pubkey::Pubkey,
15 pub vpool_token_ata: solana_pubkey::Pubkey,
16 pub lock_escrow: solana_pubkey::Pubkey,
17 pub escrow_vault: solana_pubkey::Pubkey,
18 pub pool: solana_pubkey::Pubkey,
19 pub config: solana_pubkey::Pubkey,
20 pub lp_mint: solana_pubkey::Pubkey,
21 pub virtuals_mint: solana_pubkey::Pubkey,
22 pub token_mint: solana_pubkey::Pubkey,
23 pub virtuals_vault: solana_pubkey::Pubkey,
24 pub token_vault: solana_pubkey::Pubkey,
25 pub virtuals_token_vault: solana_pubkey::Pubkey,
26 pub token_token_vault: solana_pubkey::Pubkey,
27 pub virtuals_vault_lp_mint: solana_pubkey::Pubkey,
28 pub token_vault_lp_mint: solana_pubkey::Pubkey,
29 pub virtuals_vault_lp: solana_pubkey::Pubkey,
30 pub token_vault_lp: solana_pubkey::Pubkey,
31 pub pool_virtuals_ata: solana_pubkey::Pubkey,
32 pub pool_token_ata: solana_pubkey::Pubkey,
33 pub meteora_deployer_pool_lp: solana_pubkey::Pubkey,
34 pub protocol_virtuals_fee: solana_pubkey::Pubkey,
35 pub protocol_token_fee: solana_pubkey::Pubkey,
36 pub payer: solana_pubkey::Pubkey,
37 pub token_metadata: solana_pubkey::Pubkey,
38 pub rent: solana_pubkey::Pubkey,
39 pub mint_metadata: solana_pubkey::Pubkey,
40 pub metadata_program: solana_pubkey::Pubkey,
41 pub vault_program: solana_pubkey::Pubkey,
42 pub token_program: solana_pubkey::Pubkey,
43 pub associated_token_program: solana_pubkey::Pubkey,
44 pub system_program: solana_pubkey::Pubkey,
45 pub dynamic_amm_program: solana_pubkey::Pubkey,
46 pub remaining: Vec<solana_instruction::AccountMeta>,
47}
48
49impl CreateMeteoraPool {
50 pub fn decode(data: &[u8]) -> Option<Self> {
51 if data.len() < 8 {
52 return None;
53 }
54 let discriminator = &data[0..8];
55 if discriminator != [246, 254, 33, 37, 225, 176, 41, 232] {
56 return None;
57 }
58
59 let mut data_slice = data;
60
61 data_slice = &data_slice[8..];
62
63 borsh::BorshDeserialize::deserialize(&mut data_slice).ok()
64 }
65}
66
67impl ArrangeAccounts for CreateMeteoraPool {
68 type ArrangedAccounts = CreateMeteoraPoolInstructionAccounts;
69
70 fn arrange_accounts(
71 accounts: &[solana_instruction::AccountMeta],
72 ) -> Option<Self::ArrangedAccounts> {
73 let mut iter = accounts.iter();
74
75 let vpool = next_account(&mut iter)?;
76 let meteora_deployer = next_account(&mut iter)?;
77 let meteora_deployer_virtuals_ata = next_account(&mut iter)?;
78 let meteora_deployer_token_ata = next_account(&mut iter)?;
79 let vpool_virtuals_ata = next_account(&mut iter)?;
80 let vpool_token_ata = next_account(&mut iter)?;
81 let lock_escrow = next_account(&mut iter)?;
82 let escrow_vault = next_account(&mut iter)?;
83 let pool = next_account(&mut iter)?;
84 let config = next_account(&mut iter)?;
85 let lp_mint = next_account(&mut iter)?;
86 let virtuals_mint = next_account(&mut iter)?;
87 let token_mint = next_account(&mut iter)?;
88 let virtuals_vault = next_account(&mut iter)?;
89 let token_vault = next_account(&mut iter)?;
90 let virtuals_token_vault = next_account(&mut iter)?;
91 let token_token_vault = next_account(&mut iter)?;
92 let virtuals_vault_lp_mint = next_account(&mut iter)?;
93 let token_vault_lp_mint = next_account(&mut iter)?;
94 let virtuals_vault_lp = next_account(&mut iter)?;
95 let token_vault_lp = next_account(&mut iter)?;
96 let pool_virtuals_ata = next_account(&mut iter)?;
97 let pool_token_ata = next_account(&mut iter)?;
98 let meteora_deployer_pool_lp = next_account(&mut iter)?;
99 let protocol_virtuals_fee = next_account(&mut iter)?;
100 let protocol_token_fee = next_account(&mut iter)?;
101 let payer = next_account(&mut iter)?;
102 let token_metadata = next_account(&mut iter)?;
103 let rent = next_account(&mut iter)?;
104 let mint_metadata = next_account(&mut iter)?;
105 let metadata_program = next_account(&mut iter)?;
106 let vault_program = next_account(&mut iter)?;
107 let token_program = next_account(&mut iter)?;
108 let associated_token_program = next_account(&mut iter)?;
109 let system_program = next_account(&mut iter)?;
110 let dynamic_amm_program = next_account(&mut iter)?;
111
112 let remaining = iter.as_slice();
113
114 Some(CreateMeteoraPoolInstructionAccounts {
115 vpool,
116 meteora_deployer,
117 meteora_deployer_virtuals_ata,
118 meteora_deployer_token_ata,
119 vpool_virtuals_ata,
120 vpool_token_ata,
121 lock_escrow,
122 escrow_vault,
123 pool,
124 config,
125 lp_mint,
126 virtuals_mint,
127 token_mint,
128 virtuals_vault,
129 token_vault,
130 virtuals_token_vault,
131 token_token_vault,
132 virtuals_vault_lp_mint,
133 token_vault_lp_mint,
134 virtuals_vault_lp,
135 token_vault_lp,
136 pool_virtuals_ata,
137 pool_token_ata,
138 meteora_deployer_pool_lp,
139 protocol_virtuals_fee,
140 protocol_token_fee,
141 payer,
142 token_metadata,
143 rent,
144 mint_metadata,
145 metadata_program,
146 vault_program,
147 token_program,
148 associated_token_program,
149 system_program,
150 dynamic_amm_program,
151 remaining: remaining.to_vec(),
152 })
153 }
154}