carbon_virtuals_decoder/instructions/
launch.rs1use carbon_core::{account_utils::next_account, deserialize::ArrangeAccounts};
3#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
8#[derive(Debug, Clone, borsh::BorshSerialize, borsh::BorshDeserialize, PartialEq)]
9pub struct Launch {
10 pub symbol: String,
11 pub name: String,
12 pub uri: String,
13}
14
15#[derive(Debug, Clone, PartialEq)]
16#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
17pub struct LaunchInstructionAccounts {
18 pub creator: solana_pubkey::Pubkey,
19 pub creator_virtuals_ata: solana_pubkey::Pubkey,
20 pub token_mint: solana_pubkey::Pubkey,
21 pub platform_prototype: solana_pubkey::Pubkey,
22 pub platform_prototype_virtuals_ata: solana_pubkey::Pubkey,
23 pub vpool: solana_pubkey::Pubkey,
24 pub token_metadata: solana_pubkey::Pubkey,
25 pub metadata_program: solana_pubkey::Pubkey,
26 pub token_program: solana_pubkey::Pubkey,
27 pub associated_token_program: solana_pubkey::Pubkey,
28 pub system_program: solana_pubkey::Pubkey,
29 pub rent: solana_pubkey::Pubkey,
30 pub remaining: Vec<solana_instruction::AccountMeta>,
31}
32
33impl Launch {
34 pub fn decode(data: &[u8]) -> Option<Self> {
35 if data.len() < 8 {
36 return None;
37 }
38 let discriminator = &data[0..8];
39 if discriminator != [153, 241, 93, 225, 22, 69, 74, 61] {
40 return None;
41 }
42
43 let mut data_slice = data;
44
45 data_slice = &data_slice[8..];
46
47 borsh::BorshDeserialize::deserialize(&mut data_slice).ok()
48 }
49}
50
51impl ArrangeAccounts for Launch {
52 type ArrangedAccounts = LaunchInstructionAccounts;
53
54 fn arrange_accounts(
55 accounts: &[solana_instruction::AccountMeta],
56 ) -> Option<Self::ArrangedAccounts> {
57 let mut iter = accounts.iter();
58
59 let creator = next_account(&mut iter)?;
60 let creator_virtuals_ata = next_account(&mut iter)?;
61 let token_mint = next_account(&mut iter)?;
62 let platform_prototype = next_account(&mut iter)?;
63 let platform_prototype_virtuals_ata = next_account(&mut iter)?;
64 let vpool = next_account(&mut iter)?;
65 let token_metadata = next_account(&mut iter)?;
66 let metadata_program = next_account(&mut iter)?;
67 let token_program = next_account(&mut iter)?;
68 let associated_token_program = next_account(&mut iter)?;
69 let system_program = next_account(&mut iter)?;
70 let rent = next_account(&mut iter)?;
71
72 let remaining = iter.as_slice();
73
74 Some(LaunchInstructionAccounts {
75 creator,
76 creator_virtuals_ata,
77 token_mint,
78 platform_prototype,
79 platform_prototype_virtuals_ata,
80 vpool,
81 token_metadata,
82 metadata_program,
83 token_program,
84 associated_token_program,
85 system_program,
86 rent,
87 remaining: remaining.to_vec(),
88 })
89 }
90}