carbon_system_program_decoder/instructions/
create_account_with_seed.rs1use carbon_core::{borsh, deserialize::U64PrefixString, CarbonDeserialize};
2
3#[derive(
4 CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize, PartialEq, Clone, Eq, Hash,
5)]
6#[carbon(discriminator = "0x03000000")]
7pub struct CreateAccountWithSeed {
8 pub base: solana_pubkey::Pubkey,
9 pub seed: U64PrefixString,
10 pub amount: u64,
11 pub space: u64,
12 pub program_address: solana_pubkey::Pubkey,
13}
14
15#[derive(Debug, PartialEq)]
16pub struct CreateAccountWithSeedInstructionAccounts {
17 pub payer: solana_pubkey::Pubkey,
18 pub new_account: solana_pubkey::Pubkey,
19 pub base_account: solana_pubkey::Pubkey,
20}
21
22impl carbon_core::deserialize::ArrangeAccounts for CreateAccountWithSeed {
23 type ArrangedAccounts = CreateAccountWithSeedInstructionAccounts;
24
25 fn arrange_accounts(
26 accounts: &[solana_instruction::AccountMeta],
27 ) -> Option<Self::ArrangedAccounts> {
28 let [payer, new_account, _remaining @ ..] = accounts else {
29 return None;
30 };
31
32 Some(CreateAccountWithSeedInstructionAccounts {
33 payer: payer.pubkey,
34 new_account: new_account.pubkey,
35 base_account: accounts.get(2).unwrap_or(payer).pubkey,
36 })
37 }
38}