carbon_pumpfun_decoder/instructions/
create_v2.rs1use {
3 crate::types::OptionBool,
4 carbon_core::{account_utils::next_account, deserialize::ArrangeAccounts},
5 solana_pubkey::Pubkey,
6};
7#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
9#[derive(Debug, Clone, borsh::BorshSerialize, borsh::BorshDeserialize, PartialEq)]
10pub struct CreateV2 {
11 pub name: String,
12 pub symbol: String,
13 pub uri: String,
14 pub creator: Pubkey,
15 pub is_mayhem_mode: bool,
16 pub is_cashback_enabled: OptionBool,
17}
18
19#[derive(Debug, Clone, PartialEq)]
20#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
21pub struct CreateV2InstructionAccounts {
22 pub mint: solana_pubkey::Pubkey,
23 pub mint_authority: solana_pubkey::Pubkey,
24 pub bonding_curve: solana_pubkey::Pubkey,
25 pub associated_bonding_curve: solana_pubkey::Pubkey,
26 pub global: solana_pubkey::Pubkey,
27 pub user: solana_pubkey::Pubkey,
28 pub system_program: solana_pubkey::Pubkey,
29 pub token_program: solana_pubkey::Pubkey,
30 pub associated_token_program: solana_pubkey::Pubkey,
31 pub mayhem_program_id: solana_pubkey::Pubkey,
32 pub global_params: solana_pubkey::Pubkey,
33 pub sol_vault: solana_pubkey::Pubkey,
34 pub mayhem_state: solana_pubkey::Pubkey,
35 pub mayhem_token_vault: 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 CreateV2 {
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 != [214, 144, 76, 236, 95, 139, 49, 180] {
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 CreateV2 {
60 type ArrangedAccounts = CreateV2InstructionAccounts;
61
62 fn arrange_accounts(
63 accounts: &[solana_instruction::AccountMeta],
64 ) -> Option<Self::ArrangedAccounts> {
65 let mut iter = accounts.iter();
66
67 let mint = next_account(&mut iter)?;
68 let mint_authority = next_account(&mut iter)?;
69 let bonding_curve = next_account(&mut iter)?;
70 let associated_bonding_curve = next_account(&mut iter)?;
71 let global = next_account(&mut iter)?;
72 let user = next_account(&mut iter)?;
73 let system_program = next_account(&mut iter)?;
74 let token_program = next_account(&mut iter)?;
75 let associated_token_program = next_account(&mut iter)?;
76 let mayhem_program_id = next_account(&mut iter)?;
77 let global_params = next_account(&mut iter)?;
78 let sol_vault = next_account(&mut iter)?;
79 let mayhem_state = next_account(&mut iter)?;
80 let mayhem_token_vault = next_account(&mut iter)?;
81 let event_authority = next_account(&mut iter)?;
82 let program = next_account(&mut iter)?;
83
84 let remaining = iter.as_slice();
85
86 Some(CreateV2InstructionAccounts {
87 mint,
88 mint_authority,
89 bonding_curve,
90 associated_bonding_curve,
91 global,
92 user,
93 system_program,
94 token_program,
95 associated_token_program,
96 mayhem_program_id,
97 global_params,
98 sol_vault,
99 mayhem_state,
100 mayhem_token_vault,
101 event_authority,
102 program,
103 remaining: remaining.to_vec(),
104 })
105 }
106}