carbon_wavebreak_decoder/instructions/
create_presale.rs1use 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}