Skip to main content

carbon_wavebreak_decoder/instructions/
create_presale.rs

1//! This code was AUTOGENERATED using the Codama library.
2use {
3    crate::types::GraduationMethod,
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 CreatePresale {
9    pub name: String,
10    pub symbol: String,
11    pub uri: String,
12    pub token_price: Option<u128>,
13    pub graduation_target: Option<u64>,
14    pub graduation_methods: Option<[GraduationMethod; 8]>,
15    pub launch_time: Option<i64>,
16    pub graduation_time: Option<i64>,
17    pub min_reserve_bps: Option<u16>,
18    pub base_allocation_bps: Option<u16>,
19}
20
21#[derive(Debug, Clone, PartialEq)]
22#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
23pub struct CreatePresaleInstructionAccounts {
24    pub creator: solana_pubkey::Pubkey,
25    pub bonding_curve: solana_pubkey::Pubkey,
26    pub base_mint: solana_pubkey::Pubkey,
27    pub quote_mint: solana_pubkey::Pubkey,
28    pub quote_vault: solana_pubkey::Pubkey,
29    pub mint_config: solana_pubkey::Pubkey,
30    pub metadata: solana_pubkey::Pubkey,
31    pub system_program: solana_pubkey::Pubkey,
32    pub base_token_program: solana_pubkey::Pubkey,
33    pub quote_token_program: solana_pubkey::Pubkey,
34    pub ata_program: solana_pubkey::Pubkey,
35    pub metaplex_program: solana_pubkey::Pubkey,
36    pub remaining: Vec<solana_instruction::AccountMeta>,
37}
38
39impl CreatePresale {
40    pub fn decode(data: &[u8]) -> Option<Self> {
41        if data.is_empty() {
42            return None;
43        }
44        let discriminator = &data[0..1];
45        if discriminator != [42] {
46            return None;
47        }
48
49        let mut data_slice = data;
50
51        data_slice = &data_slice[1..];
52
53        borsh::BorshDeserialize::deserialize(&mut data_slice).ok()
54    }
55}
56
57impl ArrangeAccounts for CreatePresale {
58    type ArrangedAccounts = CreatePresaleInstructionAccounts;
59
60    fn arrange_accounts(
61        accounts: &[solana_instruction::AccountMeta],
62    ) -> Option<Self::ArrangedAccounts> {
63        let mut iter = accounts.iter();
64
65        let creator = next_account(&mut iter)?;
66        let bonding_curve = next_account(&mut iter)?;
67        let base_mint = next_account(&mut iter)?;
68        let quote_mint = next_account(&mut iter)?;
69        let quote_vault = next_account(&mut iter)?;
70        let mint_config = next_account(&mut iter)?;
71        let metadata = next_account(&mut iter)?;
72        let system_program = next_account(&mut iter)?;
73        let base_token_program = next_account(&mut iter)?;
74        let quote_token_program = next_account(&mut iter)?;
75        let ata_program = next_account(&mut iter)?;
76        let metaplex_program = next_account(&mut iter)?;
77
78        let remaining = iter.as_slice();
79
80        Some(CreatePresaleInstructionAccounts {
81            creator,
82            bonding_curve,
83            base_mint,
84            quote_mint,
85            quote_vault,
86            mint_config,
87            metadata,
88            system_program,
89            base_token_program,
90            quote_token_program,
91            ata_program,
92            metaplex_program,
93            remaining: remaining.to_vec(),
94        })
95    }
96}