carbon-heaven-decoder 2.0.0

Heaven program decoder
Documentation
//! This code was AUTOGENERATED using the Codama library.
use carbon_core::{account_utils::next_account, deserialize::ArrangeAccounts};
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Debug, Clone, borsh::BorshSerialize, borsh::BorshDeserialize, PartialEq)]
pub struct RemainingAccountsStub {}

#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct RemainingAccountsStubInstructionAccounts {
    pub protocol_lending_lookup_table: solana_pubkey::Pubkey,
    pub kamino_lending_user_metadata: solana_pubkey::Pubkey,
    pub kamino_lending_referrer_user_metadata: solana_pubkey::Pubkey,
    pub rent: solana_pubkey::Pubkey,
    pub kamino_lending_program: solana_pubkey::Pubkey,
    pub kamino_lending_obligation: solana_pubkey::Pubkey,
    pub kamino_lending_main_market: solana_pubkey::Pubkey,
    pub kamino_reserve_msol_state: solana_pubkey::Pubkey,
    pub kamino_reserve_sol_state: solana_pubkey::Pubkey,
    pub kamino_scope_prices: solana_pubkey::Pubkey,
    pub marinade_liquid_staking_state: solana_pubkey::Pubkey,
    pub msol_mint: solana_pubkey::Pubkey,
    pub marinade_sol_leg_account: solana_pubkey::Pubkey,
    pub marinade_msol_leg_account: solana_pubkey::Pubkey,
    pub marinade_msol_leg_authority: solana_pubkey::Pubkey,
    pub marinade_reserve_sol_pda: solana_pubkey::Pubkey,
    pub transfer_from: solana_pubkey::Pubkey,
    pub mint_to: solana_pubkey::Pubkey,
    pub marinade_msol_mint_authority: solana_pubkey::Pubkey,
    pub system_program: solana_pubkey::Pubkey,
    pub token_program: solana_pubkey::Pubkey,
    pub marinade_finance_program: solana_pubkey::Pubkey,
    pub referral_state: solana_pubkey::Pubkey,
    pub msol_token_partner_account: solana_pubkey::Pubkey,
    pub msol_staking_program: solana_pubkey::Pubkey,
    pub deposit_accounts_owner: solana_pubkey::Pubkey,
    pub deposit_accounts_obligation: solana_pubkey::Pubkey,
    pub deposit_accounts_lending_market: solana_pubkey::Pubkey,
    pub deposit_accounts_lending_market_authority: solana_pubkey::Pubkey,
    pub deposit_accounts_reserve: solana_pubkey::Pubkey,
    pub deposit_accounts_reserve_liquidity_mint: solana_pubkey::Pubkey,
    pub deposit_accounts_reserve_liquidity_supply: solana_pubkey::Pubkey,
    pub deposit_accounts_reserve_collateral_mint: solana_pubkey::Pubkey,
    pub deposit_accounts_reserve_destination_deposit_collateral: solana_pubkey::Pubkey,
    pub deposit_accounts_user_source_liquidity: solana_pubkey::Pubkey,
    pub deposit_accounts_placeholder_user_destination_collateral: solana_pubkey::Pubkey,
    pub deposit_accounts_collateral_token_program: solana_pubkey::Pubkey,
    pub deposit_accounts_liquidity_token_program: solana_pubkey::Pubkey,
    pub deposit_accounts_instruction_sysvar_account: solana_pubkey::Pubkey,
    pub farms_accounts_obligation_farm_user_state: solana_pubkey::Pubkey,
    pub farms_accounts_reserve_farm_state: solana_pubkey::Pubkey,
    pub farms_program: solana_pubkey::Pubkey,
    pub borrow_accounts_owner: solana_pubkey::Pubkey,
    pub borrow_accounts_obligation: solana_pubkey::Pubkey,
    pub borrow_accounts_lending_market: solana_pubkey::Pubkey,
    pub borrow_accounts_lending_market_authority: solana_pubkey::Pubkey,
    pub borrow_accounts_borrow_reserve: solana_pubkey::Pubkey,
    pub borrow_accounts_borrow_reserve_liquidity_mint: solana_pubkey::Pubkey,
    pub borrow_accounts_reserve_source_liquidity: solana_pubkey::Pubkey,
    pub borrow_accounts_borrow_reserve_liquidity_fee_receiver: solana_pubkey::Pubkey,
    pub borrow_accounts_user_destination_liquidity: solana_pubkey::Pubkey,
    pub borrow_accounts_referrer_token_state: solana_pubkey::Pubkey,
    pub borrow_accounts_token_program: solana_pubkey::Pubkey,
    pub borrow_accounts_instruction_sysvar_account: solana_pubkey::Pubkey,
    pub repay_accounts_owner: solana_pubkey::Pubkey,
    pub repay_accounts_obligation: solana_pubkey::Pubkey,
    pub repay_accounts_lending_market: solana_pubkey::Pubkey,
    pub repay_accounts_repay_reserve: solana_pubkey::Pubkey,
    pub repay_accounts_reserve_liquidity_mint: solana_pubkey::Pubkey,
    pub repay_accounts_reserve_destination_liquidity: solana_pubkey::Pubkey,
    pub repay_accounts_user_source_liquidity: solana_pubkey::Pubkey,
    pub repay_accounts_token_program: solana_pubkey::Pubkey,
    pub repay_accounts_instruction_sysvar_account: solana_pubkey::Pubkey,
    pub lending_market_authority: solana_pubkey::Pubkey,
    pub associated_token_program: solana_pubkey::Pubkey,
    pub temp_sol_holder: solana_pubkey::Pubkey,
    pub chainlink_program: solana_pubkey::Pubkey,
    pub chainlink_sol_usd_price_feed: solana_pubkey::Pubkey,
    pub clock: solana_pubkey::Pubkey,
    pub withdraw_accounts_owner: solana_pubkey::Pubkey,
    pub withdraw_accounts_obligation: solana_pubkey::Pubkey,
    pub withdraw_accounts_lending_market: solana_pubkey::Pubkey,
    pub withdraw_accounts_lending_market_authority: solana_pubkey::Pubkey,
    pub withdraw_accounts_withdraw_reserve: solana_pubkey::Pubkey,
    pub withdraw_accounts_reserve_liquidity_mint: solana_pubkey::Pubkey,
    pub withdraw_accounts_reserve_source_collateral: solana_pubkey::Pubkey,
    pub withdraw_accounts_reserve_collateral_mint: solana_pubkey::Pubkey,
    pub withdraw_accounts_reserve_liquidity_supply: solana_pubkey::Pubkey,
    pub withdraw_accounts_user_destination_liquidity: solana_pubkey::Pubkey,
    pub withdraw_accounts_placeholder_user_destination_collateral: solana_pubkey::Pubkey,
    pub withdraw_accounts_collateral_token_program: solana_pubkey::Pubkey,
    pub withdraw_accounts_liquidity_token_program: solana_pubkey::Pubkey,
    pub withdraw_accounts_instruction_sysvar_account: solana_pubkey::Pubkey,
    pub temp_sol_holder_msol_vault: solana_pubkey::Pubkey,
    pub owner: solana_pubkey::Pubkey,
    pub fee_payer: solana_pubkey::Pubkey,
    pub user_metadata: solana_pubkey::Pubkey,
    pub referrer_user_metadata: solana_pubkey::Pubkey,
    pub obligation_owner: solana_pubkey::Pubkey,
    pub obligation: solana_pubkey::Pubkey,
    pub lending_market: solana_pubkey::Pubkey,
    pub seed1_account: solana_pubkey::Pubkey,
    pub seed2_account: solana_pubkey::Pubkey,
    pub owner_user_metadata: solana_pubkey::Pubkey,
    pub reserve: solana_pubkey::Pubkey,
    pub pyth_oracle: solana_pubkey::Pubkey,
    pub switchboard_price_oracle: solana_pubkey::Pubkey,
    pub switchboard_twap_oracle: solana_pubkey::Pubkey,
    pub scope_prices: solana_pubkey::Pubkey,
    pub oracle_prices: solana_pubkey::Pubkey,
    pub oracle_mappings: solana_pubkey::Pubkey,
    pub oracle_twaps: solana_pubkey::Pubkey,
    pub instruction_sysvar_account_info: solana_pubkey::Pubkey,
    pub pythnet_custody_price_sol_account: solana_pubkey::Pubkey,
    pub marinade_liquid_staking_state2: solana_pubkey::Pubkey,
    pub pythnet_custody_price_sol_account2: solana_pubkey::Pubkey,
    pub burn_msol_from: solana_pubkey::Pubkey,
    pub burn_msol_authority: solana_pubkey::Pubkey,
    pub new_ticket_account: solana_pubkey::Pubkey,
    pub state: solana_pubkey::Pubkey,
    pub reserve_pda: solana_pubkey::Pubkey,
    pub ticket_account: solana_pubkey::Pubkey,
    pub transfer_sol_to: solana_pubkey::Pubkey,
    pub remaining: Vec<solana_instruction::AccountMeta>,
}

impl RemainingAccountsStub {
    pub fn decode(data: &[u8]) -> Option<Self> {
        if data.len() < 8 {
            return None;
        }
        let discriminator = &data[0..8];
        if discriminator != [32, 143, 83, 94, 23, 34, 59, 239] {
            return None;
        }

        let mut data_slice = data;

        data_slice = &data_slice[8..];

        borsh::BorshDeserialize::deserialize(&mut data_slice).ok()
    }
}

impl ArrangeAccounts for RemainingAccountsStub {
    type ArrangedAccounts = RemainingAccountsStubInstructionAccounts;

    fn arrange_accounts(
        accounts: &[solana_instruction::AccountMeta],
    ) -> Option<Self::ArrangedAccounts> {
        let mut iter = accounts.iter();

        let protocol_lending_lookup_table = next_account(&mut iter)?;
        let kamino_lending_user_metadata = next_account(&mut iter)?;
        let kamino_lending_referrer_user_metadata = next_account(&mut iter)?;
        let rent = next_account(&mut iter)?;
        let kamino_lending_program = next_account(&mut iter)?;
        let kamino_lending_obligation = next_account(&mut iter)?;
        let kamino_lending_main_market = next_account(&mut iter)?;
        let kamino_reserve_msol_state = next_account(&mut iter)?;
        let kamino_reserve_sol_state = next_account(&mut iter)?;
        let kamino_scope_prices = next_account(&mut iter)?;
        let marinade_liquid_staking_state = next_account(&mut iter)?;
        let msol_mint = next_account(&mut iter)?;
        let marinade_sol_leg_account = next_account(&mut iter)?;
        let marinade_msol_leg_account = next_account(&mut iter)?;
        let marinade_msol_leg_authority = next_account(&mut iter)?;
        let marinade_reserve_sol_pda = next_account(&mut iter)?;
        let transfer_from = next_account(&mut iter)?;
        let mint_to = next_account(&mut iter)?;
        let marinade_msol_mint_authority = next_account(&mut iter)?;
        let system_program = next_account(&mut iter)?;
        let token_program = next_account(&mut iter)?;
        let marinade_finance_program = next_account(&mut iter)?;
        let referral_state = next_account(&mut iter)?;
        let msol_token_partner_account = next_account(&mut iter)?;
        let msol_staking_program = next_account(&mut iter)?;
        let deposit_accounts_owner = next_account(&mut iter)?;
        let deposit_accounts_obligation = next_account(&mut iter)?;
        let deposit_accounts_lending_market = next_account(&mut iter)?;
        let deposit_accounts_lending_market_authority = next_account(&mut iter)?;
        let deposit_accounts_reserve = next_account(&mut iter)?;
        let deposit_accounts_reserve_liquidity_mint = next_account(&mut iter)?;
        let deposit_accounts_reserve_liquidity_supply = next_account(&mut iter)?;
        let deposit_accounts_reserve_collateral_mint = next_account(&mut iter)?;
        let deposit_accounts_reserve_destination_deposit_collateral = next_account(&mut iter)?;
        let deposit_accounts_user_source_liquidity = next_account(&mut iter)?;
        let deposit_accounts_placeholder_user_destination_collateral = next_account(&mut iter)?;
        let deposit_accounts_collateral_token_program = next_account(&mut iter)?;
        let deposit_accounts_liquidity_token_program = next_account(&mut iter)?;
        let deposit_accounts_instruction_sysvar_account = next_account(&mut iter)?;
        let farms_accounts_obligation_farm_user_state = next_account(&mut iter)?;
        let farms_accounts_reserve_farm_state = next_account(&mut iter)?;
        let farms_program = next_account(&mut iter)?;
        let borrow_accounts_owner = next_account(&mut iter)?;
        let borrow_accounts_obligation = next_account(&mut iter)?;
        let borrow_accounts_lending_market = next_account(&mut iter)?;
        let borrow_accounts_lending_market_authority = next_account(&mut iter)?;
        let borrow_accounts_borrow_reserve = next_account(&mut iter)?;
        let borrow_accounts_borrow_reserve_liquidity_mint = next_account(&mut iter)?;
        let borrow_accounts_reserve_source_liquidity = next_account(&mut iter)?;
        let borrow_accounts_borrow_reserve_liquidity_fee_receiver = next_account(&mut iter)?;
        let borrow_accounts_user_destination_liquidity = next_account(&mut iter)?;
        let borrow_accounts_referrer_token_state = next_account(&mut iter)?;
        let borrow_accounts_token_program = next_account(&mut iter)?;
        let borrow_accounts_instruction_sysvar_account = next_account(&mut iter)?;
        let repay_accounts_owner = next_account(&mut iter)?;
        let repay_accounts_obligation = next_account(&mut iter)?;
        let repay_accounts_lending_market = next_account(&mut iter)?;
        let repay_accounts_repay_reserve = next_account(&mut iter)?;
        let repay_accounts_reserve_liquidity_mint = next_account(&mut iter)?;
        let repay_accounts_reserve_destination_liquidity = next_account(&mut iter)?;
        let repay_accounts_user_source_liquidity = next_account(&mut iter)?;
        let repay_accounts_token_program = next_account(&mut iter)?;
        let repay_accounts_instruction_sysvar_account = next_account(&mut iter)?;
        let lending_market_authority = next_account(&mut iter)?;
        let associated_token_program = next_account(&mut iter)?;
        let temp_sol_holder = next_account(&mut iter)?;
        let chainlink_program = next_account(&mut iter)?;
        let chainlink_sol_usd_price_feed = next_account(&mut iter)?;
        let clock = next_account(&mut iter)?;
        let withdraw_accounts_owner = next_account(&mut iter)?;
        let withdraw_accounts_obligation = next_account(&mut iter)?;
        let withdraw_accounts_lending_market = next_account(&mut iter)?;
        let withdraw_accounts_lending_market_authority = next_account(&mut iter)?;
        let withdraw_accounts_withdraw_reserve = next_account(&mut iter)?;
        let withdraw_accounts_reserve_liquidity_mint = next_account(&mut iter)?;
        let withdraw_accounts_reserve_source_collateral = next_account(&mut iter)?;
        let withdraw_accounts_reserve_collateral_mint = next_account(&mut iter)?;
        let withdraw_accounts_reserve_liquidity_supply = next_account(&mut iter)?;
        let withdraw_accounts_user_destination_liquidity = next_account(&mut iter)?;
        let withdraw_accounts_placeholder_user_destination_collateral = next_account(&mut iter)?;
        let withdraw_accounts_collateral_token_program = next_account(&mut iter)?;
        let withdraw_accounts_liquidity_token_program = next_account(&mut iter)?;
        let withdraw_accounts_instruction_sysvar_account = next_account(&mut iter)?;
        let temp_sol_holder_msol_vault = next_account(&mut iter)?;
        let owner = next_account(&mut iter)?;
        let fee_payer = next_account(&mut iter)?;
        let user_metadata = next_account(&mut iter)?;
        let referrer_user_metadata = next_account(&mut iter)?;
        let obligation_owner = next_account(&mut iter)?;
        let obligation = next_account(&mut iter)?;
        let lending_market = next_account(&mut iter)?;
        let seed1_account = next_account(&mut iter)?;
        let seed2_account = next_account(&mut iter)?;
        let owner_user_metadata = next_account(&mut iter)?;
        let reserve = next_account(&mut iter)?;
        let pyth_oracle = next_account(&mut iter)?;
        let switchboard_price_oracle = next_account(&mut iter)?;
        let switchboard_twap_oracle = next_account(&mut iter)?;
        let scope_prices = next_account(&mut iter)?;
        let oracle_prices = next_account(&mut iter)?;
        let oracle_mappings = next_account(&mut iter)?;
        let oracle_twaps = next_account(&mut iter)?;
        let instruction_sysvar_account_info = next_account(&mut iter)?;
        let pythnet_custody_price_sol_account = next_account(&mut iter)?;
        let marinade_liquid_staking_state2 = next_account(&mut iter)?;
        let pythnet_custody_price_sol_account2 = next_account(&mut iter)?;
        let burn_msol_from = next_account(&mut iter)?;
        let burn_msol_authority = next_account(&mut iter)?;
        let new_ticket_account = next_account(&mut iter)?;
        let state = next_account(&mut iter)?;
        let reserve_pda = next_account(&mut iter)?;
        let ticket_account = next_account(&mut iter)?;
        let transfer_sol_to = next_account(&mut iter)?;

        let remaining = iter.as_slice();

        Some(RemainingAccountsStubInstructionAccounts {
            protocol_lending_lookup_table,
            kamino_lending_user_metadata,
            kamino_lending_referrer_user_metadata,
            rent,
            kamino_lending_program,
            kamino_lending_obligation,
            kamino_lending_main_market,
            kamino_reserve_msol_state,
            kamino_reserve_sol_state,
            kamino_scope_prices,
            marinade_liquid_staking_state,
            msol_mint,
            marinade_sol_leg_account,
            marinade_msol_leg_account,
            marinade_msol_leg_authority,
            marinade_reserve_sol_pda,
            transfer_from,
            mint_to,
            marinade_msol_mint_authority,
            system_program,
            token_program,
            marinade_finance_program,
            referral_state,
            msol_token_partner_account,
            msol_staking_program,
            deposit_accounts_owner,
            deposit_accounts_obligation,
            deposit_accounts_lending_market,
            deposit_accounts_lending_market_authority,
            deposit_accounts_reserve,
            deposit_accounts_reserve_liquidity_mint,
            deposit_accounts_reserve_liquidity_supply,
            deposit_accounts_reserve_collateral_mint,
            deposit_accounts_reserve_destination_deposit_collateral,
            deposit_accounts_user_source_liquidity,
            deposit_accounts_placeholder_user_destination_collateral,
            deposit_accounts_collateral_token_program,
            deposit_accounts_liquidity_token_program,
            deposit_accounts_instruction_sysvar_account,
            farms_accounts_obligation_farm_user_state,
            farms_accounts_reserve_farm_state,
            farms_program,
            borrow_accounts_owner,
            borrow_accounts_obligation,
            borrow_accounts_lending_market,
            borrow_accounts_lending_market_authority,
            borrow_accounts_borrow_reserve,
            borrow_accounts_borrow_reserve_liquidity_mint,
            borrow_accounts_reserve_source_liquidity,
            borrow_accounts_borrow_reserve_liquidity_fee_receiver,
            borrow_accounts_user_destination_liquidity,
            borrow_accounts_referrer_token_state,
            borrow_accounts_token_program,
            borrow_accounts_instruction_sysvar_account,
            repay_accounts_owner,
            repay_accounts_obligation,
            repay_accounts_lending_market,
            repay_accounts_repay_reserve,
            repay_accounts_reserve_liquidity_mint,
            repay_accounts_reserve_destination_liquidity,
            repay_accounts_user_source_liquidity,
            repay_accounts_token_program,
            repay_accounts_instruction_sysvar_account,
            lending_market_authority,
            associated_token_program,
            temp_sol_holder,
            chainlink_program,
            chainlink_sol_usd_price_feed,
            clock,
            withdraw_accounts_owner,
            withdraw_accounts_obligation,
            withdraw_accounts_lending_market,
            withdraw_accounts_lending_market_authority,
            withdraw_accounts_withdraw_reserve,
            withdraw_accounts_reserve_liquidity_mint,
            withdraw_accounts_reserve_source_collateral,
            withdraw_accounts_reserve_collateral_mint,
            withdraw_accounts_reserve_liquidity_supply,
            withdraw_accounts_user_destination_liquidity,
            withdraw_accounts_placeholder_user_destination_collateral,
            withdraw_accounts_collateral_token_program,
            withdraw_accounts_liquidity_token_program,
            withdraw_accounts_instruction_sysvar_account,
            temp_sol_holder_msol_vault,
            owner,
            fee_payer,
            user_metadata,
            referrer_user_metadata,
            obligation_owner,
            obligation,
            lending_market,
            seed1_account,
            seed2_account,
            owner_user_metadata,
            reserve,
            pyth_oracle,
            switchboard_price_oracle,
            switchboard_twap_oracle,
            scope_prices,
            oracle_prices,
            oracle_mappings,
            oracle_twaps,
            instruction_sysvar_account_info,
            pythnet_custody_price_sol_account,
            marinade_liquid_staking_state2,
            pythnet_custody_price_sol_account2,
            burn_msol_from,
            burn_msol_authority,
            new_ticket_account,
            state,
            reserve_pda,
            ticket_account,
            transfer_sol_to,
            remaining: remaining.to_vec(),
        })
    }
}