carbon_wavebreak_decoder/instructions/
create_launch.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 = "0x29")]
9pub struct CreateLaunch {
10    pub name: String,
11    pub symbol: String,
12    pub uri: String,
13    pub start_price: Option<u128>,
14    pub end_price: Option<u128>,
15    pub control_points: Option<[u16; 4]>,
16    pub graduation_target: Option<u64>,
17    pub graduation_methods: Option<[GraduationMethod; 8]>,
18    pub launch_slot: Option<u64>,
19    pub graduation_slot: Option<u64>,
20    pub base_allocation_bps: Option<u16>,
21}
22
23#[derive(Debug, PartialEq, Eq, Clone, Hash, serde::Serialize, serde::Deserialize)]
24pub struct CreateLaunchInstructionAccounts {
25    pub creator: solana_pubkey::Pubkey,
26    pub bonding_curve: solana_pubkey::Pubkey,
27    pub base_mint: solana_pubkey::Pubkey,
28    pub quote_mint: solana_pubkey::Pubkey,
29    pub quote_vault: solana_pubkey::Pubkey,
30    pub mint_config: solana_pubkey::Pubkey,
31    pub metadata: solana_pubkey::Pubkey,
32    pub system_program: solana_pubkey::Pubkey,
33    pub base_token_program: solana_pubkey::Pubkey,
34    pub quote_token_program: solana_pubkey::Pubkey,
35    pub ata_program: solana_pubkey::Pubkey,
36    pub metaplex_program: solana_pubkey::Pubkey,
37}
38
39impl carbon_core::deserialize::ArrangeAccounts for CreateLaunch {
40    type ArrangedAccounts = CreateLaunchInstructionAccounts;
41
42    fn arrange_accounts(
43        accounts: &[solana_instruction::AccountMeta],
44    ) -> Option<Self::ArrangedAccounts> {
45        let mut iter = accounts.iter();
46        let creator = next_account(&mut iter)?;
47        let bonding_curve = next_account(&mut iter)?;
48        let base_mint = next_account(&mut iter)?;
49        let quote_mint = next_account(&mut iter)?;
50        let quote_vault = next_account(&mut iter)?;
51        let mint_config = next_account(&mut iter)?;
52        let metadata = next_account(&mut iter)?;
53        let system_program = next_account(&mut iter)?;
54        let base_token_program = next_account(&mut iter)?;
55        let quote_token_program = next_account(&mut iter)?;
56        let ata_program = next_account(&mut iter)?;
57        let metaplex_program = next_account(&mut iter)?;
58
59        Some(CreateLaunchInstructionAccounts {
60            creator,
61            bonding_curve,
62            base_mint,
63            quote_mint,
64            quote_vault,
65            mint_config,
66            metadata,
67            system_program,
68            base_token_program,
69            quote_token_program,
70            ata_program,
71            metaplex_program,
72        })
73    }
74}