diff --git a/src/instruction/meteora_damm_v2.rs b/src/instruction/meteora_damm_v2.rs index 70c3641..5ef86c9 100644 --- a/src/instruction/meteora_damm_v2.rs +++ b/src/instruction/meteora_damm_v2.rs @@ -87,7 +87,11 @@ impl InstructionBuilder for MeteoraDammV2InstructionBuilder { ¶ms.payer.pubkey(), ¶ms.payer.pubkey(), ¶ms.output_mint, - &crate::constants::TOKEN_PROGRAM, + if is_a_in { + &protocol_params.token_b_program + } else { + &protocol_params.token_a_program + }, params.open_seed_optimize, ), ); diff --git a/src/trading/core/params.rs b/src/trading/core/params.rs index 611bb46..348faae 100755 --- a/src/trading/core/params.rs +++ b/src/trading/core/params.rs @@ -2,7 +2,6 @@ use crate::common::bonding_curve::BondingCurveAccount; use crate::common::nonce_cache::DurableNonceInfo; use crate::common::spl_associated_token_account::get_associated_token_address_with_program_id; use crate::common::{GasFeeStrategy, SolanaRpcClient}; -use crate::constants::TOKEN_PROGRAM; use core_affinity::CoreId; use crate::instruction::utils::pumpfun::is_mayhem_fee_recipient; @@ -854,14 +853,27 @@ impl MeteoraDammV2Params { ) -> Result { let pool_data = crate::instruction::utils::meteora_damm_v2::fetch_pool(rpc, pool_address).await?; + let mint_accounts = rpc + .get_multiple_accounts(&[pool_data.token_a_mint, pool_data.token_b_mint]) + .await?; + let token_a_program = mint_accounts + .get(0) + .and_then(|a| a.as_ref()) + .map(|a| a.owner) + .ok_or_else(|| anyhow::anyhow!("Token A mint account not found"))?; + let token_b_program = mint_accounts + .get(1) + .and_then(|a| a.as_ref()) + .map(|a| a.owner) + .ok_or_else(|| anyhow::anyhow!("Token B mint account not found"))?; Ok(Self { pool: *pool_address, token_a_vault: pool_data.token_a_vault, token_b_vault: pool_data.token_b_vault, token_a_mint: pool_data.token_a_mint, token_b_mint: pool_data.token_b_mint, - token_a_program: TOKEN_PROGRAM, - token_b_program: TOKEN_PROGRAM, + token_a_program, + token_b_program, }) } }