carbon_system_program_decoder/instructions/
transfer_sol_with_seed.rs

1use carbon_core::{borsh, deserialize::U64PrefixString, CarbonDeserialize};
2
3#[derive(CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Clone)]
4#[carbon(discriminator = "0x0b000000")]
5pub struct TransferSolWithSeed {
6    pub amount: u64,
7    pub from_seed: U64PrefixString,
8    pub from_owner: solana_pubkey::Pubkey,
9}
10
11pub struct TransferSolWithSeedInstructionAccounts {
12    pub source: solana_pubkey::Pubkey,
13    pub base_account: solana_pubkey::Pubkey,
14    pub destination: solana_pubkey::Pubkey,
15}
16
17impl carbon_core::deserialize::ArrangeAccounts for TransferSolWithSeed {
18    type ArrangedAccounts = TransferSolWithSeedInstructionAccounts;
19
20    fn arrange_accounts(
21        accounts: &[solana_instruction::AccountMeta],
22    ) -> Option<Self::ArrangedAccounts> {
23        let [source, base_account, destination, _remaining @ ..] = accounts else {
24            return None;
25        };
26
27        Some(TransferSolWithSeedInstructionAccounts {
28            source: source.pubkey,
29            base_account: base_account.pubkey,
30            destination: destination.pubkey,
31        })
32    }
33}