carbon_wavebreak_decoder/instructions/
create_presale.rs

1use super::super::types::*;
2
3use carbon_core::{account_utils::next_account, borsh, CarbonDeserialize};
4
5#[derive(
6    CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Clone, Hash,
7)]
8#[carbon(discriminator = "0x2a")]
9pub struct CreatePresale {
10    pub name: String,
11    pub symbol: String,
12    pub uri: String,
13    pub token_price: Option<u128>,
14    pub graduation_target: Option<u64>,
15    pub graduation_methods: Option<[GraduationMethod; 8]>,
16    pub launch_slot: Option<u64>,
17    pub graduation_slot: Option<u64>,
18    pub min_reserve_bps: Option<u16>,
19    pub base_allocation_bps: Option<u16>,
20}
21
22#[derive(Debug, PartialEq, Eq, Clone, Hash, 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}
37
38impl carbon_core::deserialize::ArrangeAccounts for CreatePresale {
39    type ArrangedAccounts = CreatePresaleInstructionAccounts;
40
41    fn arrange_accounts(
42        accounts: &[solana_instruction::AccountMeta],
43    ) -> Option<Self::ArrangedAccounts> {
44        let mut iter = accounts.iter();
45        let creator = next_account(&mut iter)?;
46        let bonding_curve = next_account(&mut iter)?;
47        let base_mint = next_account(&mut iter)?;
48        let quote_mint = next_account(&mut iter)?;
49        let quote_vault = next_account(&mut iter)?;
50        let mint_config = next_account(&mut iter)?;
51        let metadata = next_account(&mut iter)?;
52        let system_program = next_account(&mut iter)?;
53        let base_token_program = next_account(&mut iter)?;
54        let quote_token_program = next_account(&mut iter)?;
55        let ata_program = next_account(&mut iter)?;
56        let metaplex_program = next_account(&mut iter)?;
57
58        Some(CreatePresaleInstructionAccounts {
59            creator,
60            bonding_curve,
61            base_mint,
62            quote_mint,
63            quote_vault,
64            mint_config,
65            metadata,
66            system_program,
67            base_token_program,
68            quote_token_program,
69            ata_program,
70            metaplex_program,
71        })
72    }
73}