carbon_gavel_decoder/instructions/
initialize_pool.rs1use {
3 crate::types::InitializePoolIxParams,
4 carbon_core::{account_utils::next_account, deserialize::ArrangeAccounts},
5};
6#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
7#[derive(Debug, Clone, borsh::BorshSerialize, borsh::BorshDeserialize, PartialEq)]
8pub struct InitializePool {
9 pub params: InitializePoolIxParams,
10}
11
12#[derive(Debug, Clone, PartialEq)]
13#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
14pub struct InitializePoolInstructionAccounts {
15 pub plasma_program: solana_pubkey::Pubkey,
16 pub log_authority: solana_pubkey::Pubkey,
17 pub pool: solana_pubkey::Pubkey,
18 pub pool_creator: solana_pubkey::Pubkey,
19 pub base_mint: solana_pubkey::Pubkey,
20 pub quote_mint: solana_pubkey::Pubkey,
21 pub base_vault: solana_pubkey::Pubkey,
22 pub quote_vault: solana_pubkey::Pubkey,
23 pub system_program: solana_pubkey::Pubkey,
24 pub token_program: solana_pubkey::Pubkey,
25 pub remaining: Vec<solana_instruction::AccountMeta>,
26}
27
28impl InitializePool {
29 pub fn decode(data: &[u8]) -> Option<Self> {
30 if data.is_empty() {
31 return None;
32 }
33 let discriminator = &data[0..1];
34 if discriminator != [6] {
35 return None;
36 }
37
38 let mut data_slice = data;
39
40 data_slice = &data_slice[1..];
41
42 borsh::BorshDeserialize::deserialize(&mut data_slice).ok()
43 }
44}
45
46impl ArrangeAccounts for InitializePool {
47 type ArrangedAccounts = InitializePoolInstructionAccounts;
48
49 fn arrange_accounts(
50 accounts: &[solana_instruction::AccountMeta],
51 ) -> Option<Self::ArrangedAccounts> {
52 let mut iter = accounts.iter();
53
54 let plasma_program = next_account(&mut iter)?;
55 let log_authority = next_account(&mut iter)?;
56 let pool = next_account(&mut iter)?;
57 let pool_creator = next_account(&mut iter)?;
58 let base_mint = next_account(&mut iter)?;
59 let quote_mint = next_account(&mut iter)?;
60 let base_vault = next_account(&mut iter)?;
61 let quote_vault = next_account(&mut iter)?;
62 let system_program = next_account(&mut iter)?;
63 let token_program = next_account(&mut iter)?;
64
65 let remaining = iter.as_slice();
66
67 Some(InitializePoolInstructionAccounts {
68 plasma_program,
69 log_authority,
70 pool,
71 pool_creator,
72 base_mint,
73 quote_mint,
74 base_vault,
75 quote_vault,
76 system_program,
77 token_program,
78 remaining: remaining.to_vec(),
79 })
80 }
81}