diff --git a/tokens/token-swap/anchor/programs/token-swap/src/instructions/deposit_liquidity.rs b/tokens/token-swap/anchor/programs/token-swap/src/instructions/deposit_liquidity.rs index 21c6f2af0..af1a2f3e3 100644 --- a/tokens/token-swap/anchor/programs/token-swap/src/instructions/deposit_liquidity.rs +++ b/tokens/token-swap/anchor/programs/token-swap/src/instructions/deposit_liquidity.rs @@ -38,24 +38,23 @@ pub fn deposit_liquidity( (amount_a, amount_b) } else { let ratio = I64F64::from_num(pool_a.amount) - .checked_mul(I64F64::from_num(pool_b.amount)) + .checked_div(I64F64::from_num(pool_b.amount)) .unwrap(); - if pool_a.amount > pool_b.amount { - ( - I64F64::from_num(amount_b) - .checked_mul(ratio) - .unwrap() - .to_num::(), - amount_b, - ) + + // Calculate the optimal amount of A needed for the given amount of B + let optimal_amount_a = I64F64::from_num(amount_b) + .checked_mul(ratio) + .unwrap() + .to_num::(); + + if optimal_amount_a <= amount_a { + (optimal_amount_a, amount_b) } else { - ( - amount_a, - I64F64::from_num(amount_a) - .checked_div(ratio) - .unwrap() - .to_num::(), - ) + let optimal_amount_b = I64F64::from_num(amount_a) + .checked_div(ratio) + .unwrap() + .to_num::(); + (amount_a, optimal_amount_b) } }; diff --git a/tokens/token-swap/anchor/programs/token-swap/src/lib.rs b/tokens/token-swap/anchor/programs/token-swap/src/lib.rs index d14e89724..6bef0d63a 100644 --- a/tokens/token-swap/anchor/programs/token-swap/src/lib.rs +++ b/tokens/token-swap/anchor/programs/token-swap/src/lib.rs @@ -6,7 +6,7 @@ mod instructions; mod state; // Set the correct key here -declare_id!("AsGVFxWqEn8icRBFQApxJe68x3r9zvfSbmiEzYFATGYn"); +declare_id!("Bb8CYNtpoqQUR4t2JaoMH8uwVCmjBWiVbBVqeXBcSM93"); #[program] pub mod swap_example {