carbon_raydium_launchpad_decoder/instructions/
initialize.rs1use {
3 crate::types::{CurveParams, MintParams, VestingParams},
4 carbon_core::{account_utils::next_account, deserialize::ArrangeAccounts},
5};
6#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
10#[derive(Debug, Clone, borsh::BorshSerialize, borsh::BorshDeserialize, PartialEq)]
11pub struct Initialize {
12 pub base_mint_param: MintParams,
13 pub curve_param: CurveParams,
14 pub vesting_param: VestingParams,
15}
16
17#[derive(Debug, Clone, PartialEq)]
18#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
19pub struct InitializeInstructionAccounts {
20 pub payer: solana_pubkey::Pubkey,
21 pub creator: solana_pubkey::Pubkey,
22 pub global_config: solana_pubkey::Pubkey,
23 pub platform_config: solana_pubkey::Pubkey,
24 pub authority: solana_pubkey::Pubkey,
25 pub pool_state: solana_pubkey::Pubkey,
26 pub base_mint: solana_pubkey::Pubkey,
27 pub quote_mint: solana_pubkey::Pubkey,
28 pub base_vault: solana_pubkey::Pubkey,
29 pub quote_vault: solana_pubkey::Pubkey,
30 pub metadata_account: solana_pubkey::Pubkey,
31 pub base_token_program: solana_pubkey::Pubkey,
32 pub quote_token_program: solana_pubkey::Pubkey,
33 pub metadata_program: solana_pubkey::Pubkey,
34 pub system_program: solana_pubkey::Pubkey,
35 pub rent_program: 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 Initialize {
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 != [175, 175, 109, 31, 13, 152, 155, 237] {
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 Initialize {
60 type ArrangedAccounts = InitializeInstructionAccounts;
61
62 fn arrange_accounts(
63 accounts: &[solana_instruction::AccountMeta],
64 ) -> Option<Self::ArrangedAccounts> {
65 let mut iter = accounts.iter();
66
67 let payer = next_account(&mut iter)?;
68 let creator = next_account(&mut iter)?;
69 let global_config = next_account(&mut iter)?;
70 let platform_config = next_account(&mut iter)?;
71 let authority = next_account(&mut iter)?;
72 let pool_state = next_account(&mut iter)?;
73 let base_mint = next_account(&mut iter)?;
74 let quote_mint = next_account(&mut iter)?;
75 let base_vault = next_account(&mut iter)?;
76 let quote_vault = next_account(&mut iter)?;
77 let metadata_account = next_account(&mut iter)?;
78 let base_token_program = next_account(&mut iter)?;
79 let quote_token_program = next_account(&mut iter)?;
80 let metadata_program = next_account(&mut iter)?;
81 let system_program = next_account(&mut iter)?;
82 let rent_program = next_account(&mut iter)?;
83 let event_authority = next_account(&mut iter)?;
84 let program = next_account(&mut iter)?;
85
86 let remaining = iter.as_slice();
87
88 Some(InitializeInstructionAccounts {
89 payer,
90 creator,
91 global_config,
92 platform_config,
93 authority,
94 pool_state,
95 base_mint,
96 quote_mint,
97 base_vault,
98 quote_vault,
99 metadata_account,
100 base_token_program,
101 quote_token_program,
102 metadata_program,
103 system_program,
104 rent_program,
105 event_authority,
106 program,
107 remaining: remaining.to_vec(),
108 })
109 }
110}