carbon_wavebreak_decoder/instructions/
token_sell_exact_out.rs

1use carbon_core::{account_utils::next_account, borsh, CarbonDeserialize};
2
3#[derive(
4    CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Clone, Hash,
5)]
6#[carbon(discriminator = "0x0b")]
7pub struct TokenSellExactOut {
8    pub amount_out: u64,
9    pub allow_partial_fill: bool,
10    pub price_threshold: Option<(u64, u64)>,
11}
12
13#[derive(Debug, PartialEq, Eq, Clone, Hash, serde::Serialize, serde::Deserialize)]
14pub struct TokenSellExactOutInstructionAccounts {
15    pub seller: solana_pubkey::Pubkey,
16    pub bonding_curve: solana_pubkey::Pubkey,
17    pub base_mint: solana_pubkey::Pubkey,
18    pub base_ata: solana_pubkey::Pubkey,
19    pub quote_mint: solana_pubkey::Pubkey,
20    pub quote_vault: solana_pubkey::Pubkey,
21    pub quote_ata: solana_pubkey::Pubkey,
22    pub system_program: solana_pubkey::Pubkey,
23    pub ata_program: solana_pubkey::Pubkey,
24    pub base_token_program: solana_pubkey::Pubkey,
25    pub quote_token_program: solana_pubkey::Pubkey,
26}
27
28impl carbon_core::deserialize::ArrangeAccounts for TokenSellExactOut {
29    type ArrangedAccounts = TokenSellExactOutInstructionAccounts;
30
31    fn arrange_accounts(
32        accounts: &[solana_instruction::AccountMeta],
33    ) -> Option<Self::ArrangedAccounts> {
34        let mut iter = accounts.iter();
35        let seller = next_account(&mut iter)?;
36        let bonding_curve = next_account(&mut iter)?;
37        let base_mint = next_account(&mut iter)?;
38        let base_ata = next_account(&mut iter)?;
39        let quote_mint = next_account(&mut iter)?;
40        let quote_vault = next_account(&mut iter)?;
41        let quote_ata = next_account(&mut iter)?;
42        let system_program = next_account(&mut iter)?;
43        let ata_program = next_account(&mut iter)?;
44        let base_token_program = next_account(&mut iter)?;
45        let quote_token_program = next_account(&mut iter)?;
46
47        Some(TokenSellExactOutInstructionAccounts {
48            seller,
49            bonding_curve,
50            base_mint,
51            base_ata,
52            quote_mint,
53            quote_vault,
54            quote_ata,
55            system_program,
56            ata_program,
57            base_token_program,
58            quote_token_program,
59        })
60    }
61}