carbon_pumpfun_decoder/instructions/
create.rs

1use alloc::string::String;
2use carbon_core::{borsh, CarbonDeserialize};
3
4#[derive(
5    CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Clone, Hash,
6)]
7#[carbon(discriminator = "0x181ec828051c0777")]
8pub struct Create {
9    pub name: String,
10    pub symbol: String,
11    pub uri: String,
12    pub creator: solana_pubkey::Pubkey,
13}
14
15#[derive(Debug, PartialEq)]
16pub struct CreateInstructionAccounts {
17    pub mint: solana_pubkey::Pubkey,
18    pub mint_authority: solana_pubkey::Pubkey,
19    pub bonding_curve: solana_pubkey::Pubkey,
20    pub associated_bonding_curve: solana_pubkey::Pubkey,
21    pub global: solana_pubkey::Pubkey,
22    pub mpl_token_metadata: solana_pubkey::Pubkey,
23    pub metadata: solana_pubkey::Pubkey,
24    pub user: solana_pubkey::Pubkey,
25    pub system_program: solana_pubkey::Pubkey,
26    pub token_program: solana_pubkey::Pubkey,
27    pub associated_token_program: solana_pubkey::Pubkey,
28    pub rent: solana_pubkey::Pubkey,
29    pub event_authority: solana_pubkey::Pubkey,
30    pub program: solana_pubkey::Pubkey,
31}
32
33impl carbon_core::deserialize::ArrangeAccounts for Create {
34    type ArrangedAccounts = CreateInstructionAccounts;
35
36    fn arrange_accounts(
37        accounts: &[solana_instruction::AccountMeta],
38    ) -> Option<Self::ArrangedAccounts> {
39        let [mint, mint_authority, bonding_curve, associated_bonding_curve, global, mpl_token_metadata, metadata, user, system_program, token_program, associated_token_program, rent, event_authority, program, _remaining @ ..] =
40            accounts
41        else {
42            return None;
43        };
44
45        Some(CreateInstructionAccounts {
46            mint: mint.pubkey,
47            mint_authority: mint_authority.pubkey,
48            bonding_curve: bonding_curve.pubkey,
49            associated_bonding_curve: associated_bonding_curve.pubkey,
50            global: global.pubkey,
51            mpl_token_metadata: mpl_token_metadata.pubkey,
52            metadata: metadata.pubkey,
53            user: user.pubkey,
54            system_program: system_program.pubkey,
55            token_program: token_program.pubkey,
56            associated_token_program: associated_token_program.pubkey,
57            rent: rent.pubkey,
58            event_authority: event_authority.pubkey,
59            program: program.pubkey,
60        })
61    }
62}