carbon_pump_swap_decoder/instructions/
create_pool.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))]
8#[derive(Debug, Clone, borsh::BorshSerialize, borsh::BorshDeserialize, PartialEq)]
9pub struct CreatePool {
10 pub index: u16,
11 pub base_amount_in: u64,
12 pub quote_amount_in: u64,
13 pub coin_creator: Pubkey,
14 pub is_mayhem_mode: bool,
15 pub is_cashback_coin: OptionBool,
16}
17
18#[derive(Debug, Clone, PartialEq)]
19#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
20pub struct CreatePoolInstructionAccounts {
21 pub pool: solana_pubkey::Pubkey,
22 pub global_config: solana_pubkey::Pubkey,
23 pub creator: solana_pubkey::Pubkey,
24 pub base_mint: solana_pubkey::Pubkey,
25 pub quote_mint: solana_pubkey::Pubkey,
26 pub lp_mint: solana_pubkey::Pubkey,
27 pub user_base_token_account: solana_pubkey::Pubkey,
28 pub user_quote_token_account: solana_pubkey::Pubkey,
29 pub user_pool_token_account: solana_pubkey::Pubkey,
30 pub pool_base_token_account: solana_pubkey::Pubkey,
31 pub pool_quote_token_account: solana_pubkey::Pubkey,
32 pub system_program: solana_pubkey::Pubkey,
33 pub token2022_program: solana_pubkey::Pubkey,
34 pub base_token_program: solana_pubkey::Pubkey,
35 pub quote_token_program: solana_pubkey::Pubkey,
36 pub associated_token_program: solana_pubkey::Pubkey,
37 pub event_authority: solana_pubkey::Pubkey,
38 pub program: solana_pubkey::Pubkey,
39 pub remaining: Vec<solana_instruction::AccountMeta>,
40}
41
42impl CreatePool {
43 pub fn decode(data: &[u8]) -> Option<Self> {
44 if data.len() < 8 {
45 return None;
46 }
47 let discriminator = &data[0..8];
48 if discriminator != [233, 146, 209, 142, 207, 104, 64, 188] {
49 return None;
50 }
51
52 let mut data_slice = data;
53
54 data_slice = &data_slice[8..];
55
56 borsh::BorshDeserialize::deserialize(&mut data_slice).ok()
57 }
58}
59
60impl ArrangeAccounts for CreatePool {
61 type ArrangedAccounts = CreatePoolInstructionAccounts;
62
63 fn arrange_accounts(
64 accounts: &[solana_instruction::AccountMeta],
65 ) -> Option<Self::ArrangedAccounts> {
66 let mut iter = accounts.iter();
67
68 let pool = next_account(&mut iter)?;
69 let global_config = next_account(&mut iter)?;
70 let creator = next_account(&mut iter)?;
71 let base_mint = next_account(&mut iter)?;
72 let quote_mint = next_account(&mut iter)?;
73 let lp_mint = next_account(&mut iter)?;
74 let user_base_token_account = next_account(&mut iter)?;
75 let user_quote_token_account = next_account(&mut iter)?;
76 let user_pool_token_account = next_account(&mut iter)?;
77 let pool_base_token_account = next_account(&mut iter)?;
78 let pool_quote_token_account = next_account(&mut iter)?;
79 let system_program = next_account(&mut iter)?;
80 let token2022_program = next_account(&mut iter)?;
81 let base_token_program = next_account(&mut iter)?;
82 let quote_token_program = next_account(&mut iter)?;
83 let associated_token_program = next_account(&mut iter)?;
84 let event_authority = next_account(&mut iter)?;
85 let program = next_account(&mut iter)?;
86
87 let remaining = iter.as_slice();
88
89 Some(CreatePoolInstructionAccounts {
90 pool,
91 global_config,
92 creator,
93 base_mint,
94 quote_mint,
95 lp_mint,
96 user_base_token_account,
97 user_quote_token_account,
98 user_pool_token_account,
99 pool_base_token_account,
100 pool_quote_token_account,
101 system_program,
102 token2022_program,
103 base_token_program,
104 quote_token_program,
105 associated_token_program,
106 event_authority,
107 program,
108 remaining: remaining.to_vec(),
109 })
110 }
111}