carbon_pumpfun_decoder/instructions/
migrate_v2.rs1use carbon_core::{account_utils::next_account, deserialize::ArrangeAccounts};
3#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5#[derive(Debug, Clone, borsh::BorshSerialize, borsh::BorshDeserialize, PartialEq)]
6pub struct MigrateV2 {}
7
8#[derive(Debug, Clone, PartialEq)]
9#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
10pub struct MigrateV2InstructionAccounts {
11 pub global: solana_pubkey::Pubkey,
12 pub withdraw_authority: solana_pubkey::Pubkey,
13 pub base_mint: solana_pubkey::Pubkey,
14 pub quote_mint: solana_pubkey::Pubkey,
15 pub bonding_curve: solana_pubkey::Pubkey,
16 pub associated_base_bonding_curve: solana_pubkey::Pubkey,
17 pub associated_quote_bonding_curve: solana_pubkey::Pubkey,
18 pub user: solana_pubkey::Pubkey,
19 pub system_program: solana_pubkey::Pubkey,
20 pub pump_amm: solana_pubkey::Pubkey,
21 pub pool: solana_pubkey::Pubkey,
22 pub pool_authority: solana_pubkey::Pubkey,
23 pub pool_authority_mint_account: solana_pubkey::Pubkey,
24 pub pool_authority_quote_account: solana_pubkey::Pubkey,
25 pub amm_global_config: solana_pubkey::Pubkey,
26 pub lp_mint: solana_pubkey::Pubkey,
27 pub user_pool_token_account: solana_pubkey::Pubkey,
28 pub pool_base_token_account: solana_pubkey::Pubkey,
29 pub pool_quote_token_account: solana_pubkey::Pubkey,
30 pub base_token_program: solana_pubkey::Pubkey,
31 pub quote_token_program: solana_pubkey::Pubkey,
32 pub token2022_program: solana_pubkey::Pubkey,
33 pub associated_token_program: solana_pubkey::Pubkey,
34 pub pump_amm_event_authority: solana_pubkey::Pubkey,
35 pub rent: solana_pubkey::Pubkey,
36 pub event_authority: solana_pubkey::Pubkey,
37 pub program: solana_pubkey::Pubkey,
38 pub remaining: Vec<solana_instruction::AccountMeta>,
39}
40
41impl MigrateV2 {
42 pub fn decode(data: &[u8]) -> Option<Self> {
43 if data.len() < 8 {
44 return None;
45 }
46 let discriminator = &data[0..8];
47 if discriminator != [187, 203, 18, 31, 206, 237, 254, 41] {
48 return None;
49 }
50
51 let mut data_slice = data;
52
53 data_slice = &data_slice[8..];
54
55 borsh::BorshDeserialize::deserialize(&mut data_slice).ok()
56 }
57}
58
59impl ArrangeAccounts for MigrateV2 {
60 type ArrangedAccounts = MigrateV2InstructionAccounts;
61
62 fn arrange_accounts(
63 accounts: &[solana_instruction::AccountMeta],
64 ) -> Option<Self::ArrangedAccounts> {
65 let mut iter = accounts.iter();
66
67 let global = next_account(&mut iter)?;
68 let withdraw_authority = next_account(&mut iter)?;
69 let base_mint = next_account(&mut iter)?;
70 let quote_mint = next_account(&mut iter)?;
71 let bonding_curve = next_account(&mut iter)?;
72 let associated_base_bonding_curve = next_account(&mut iter)?;
73 let associated_quote_bonding_curve = next_account(&mut iter)?;
74 let user = next_account(&mut iter)?;
75 let system_program = next_account(&mut iter)?;
76 let pump_amm = next_account(&mut iter)?;
77 let pool = next_account(&mut iter)?;
78 let pool_authority = next_account(&mut iter)?;
79 let pool_authority_mint_account = next_account(&mut iter)?;
80 let pool_authority_quote_account = next_account(&mut iter)?;
81 let amm_global_config = next_account(&mut iter)?;
82 let lp_mint = next_account(&mut iter)?;
83 let user_pool_token_account = next_account(&mut iter)?;
84 let pool_base_token_account = next_account(&mut iter)?;
85 let pool_quote_token_account = next_account(&mut iter)?;
86 let base_token_program = next_account(&mut iter)?;
87 let quote_token_program = next_account(&mut iter)?;
88 let token2022_program = next_account(&mut iter)?;
89 let associated_token_program = next_account(&mut iter)?;
90 let pump_amm_event_authority = next_account(&mut iter)?;
91 let rent = next_account(&mut iter)?;
92 let event_authority = next_account(&mut iter)?;
93 let program = next_account(&mut iter)?;
94
95 let remaining = iter.as_slice();
96
97 Some(MigrateV2InstructionAccounts {
98 global,
99 withdraw_authority,
100 base_mint,
101 quote_mint,
102 bonding_curve,
103 associated_base_bonding_curve,
104 associated_quote_bonding_curve,
105 user,
106 system_program,
107 pump_amm,
108 pool,
109 pool_authority,
110 pool_authority_mint_account,
111 pool_authority_quote_account,
112 amm_global_config,
113 lp_mint,
114 user_pool_token_account,
115 pool_base_token_account,
116 pool_quote_token_account,
117 base_token_program,
118 quote_token_program,
119 token2022_program,
120 associated_token_program,
121 pump_amm_event_authority,
122 rent,
123 event_authority,
124 program,
125 remaining: remaining.to_vec(),
126 })
127 }
128}