Skip to main content

carbon_virtuals_decoder/instructions/
launch.rs

1//! This code was AUTOGENERATED using the Codama library.
2use carbon_core::{account_utils::next_account, deserialize::ArrangeAccounts};
3/// This is where a user comes along and purchases a mint address and pool. The
4/// user will provide a name, symbol and URI containing offchain metadata. The
5/// contract will initialize a new onchain metadata account containing these
6/// values, then revoke the mint authority.
7#[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}