solana_exec/utilities/
get_min_amount_out.rs1use crate::types::swap_config::SwapConfig;
2use primitive_types::U512;
3use solana_central::PoolTrait;
4use solana_central::SwapDirection;
5use solana_sdk::native_token::LAMPORTS_PER_SOL;
6
7pub fn get_min_amount_out(swap_config: &SwapConfig, pool: &dyn PoolTrait) -> u64 {
14 if swap_config.slippage_lp == LAMPORTS_PER_SOL {
16 return 0;
17 }
18 let lamports = U512::from(LAMPORTS_PER_SOL);
19 let amount_in = U512::from(swap_config.amount_in);
20 let price = U512::from(if swap_config.direction == SwapDirection::AToB {
21 pool.price_b_over_a_lp()
22 } else {
23 pool.price_a_over_b_lp()
24 });
25 let slippage_lp = U512::from(swap_config.slippage_lp);
26 let min_amount_out = amount_in * price * (lamports - slippage_lp) / (lamports.pow(U512::from(2)));
27 min_amount_out.as_u64()
28}