From cac4c6d6df8f832a6bac970ee27856a8d2ee35ba Mon Sep 17 00:00:00 2001 From: MrBlackGhostt Date: Mon, 19 Jan 2026 22:52:52 +0530 Subject: [PATCH 1/2] fix: correct deposit liquidity ratio calculation The deposit_liquidity instruction was incorrectly multiplying pool amounts instead of dividing them to calculate the ratio between Pool Token A and Pool Token B. This caused incorrect LP token minting calculations for subsequent deposits. This change fixes the logic to use division: Ratio = Pool A / Pool B. --- .../programs/token-swap/src/instructions/deposit_liquidity.rs | 2 +- tokens/token-swap/anchor/programs/token-swap/src/lib.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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..047829532 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,7 +38,7 @@ 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 { ( 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 { From 7b974e67c19abdc7cec6490cacf6f3d465cb8fe5 Mon Sep 17 00:00:00 2001 From: MrBlackGhostt Date: Mon, 19 Jan 2026 22:55:45 +0530 Subject: [PATCH 2/2] fix: implement optimal amount calculation for deposits --- .../src/instructions/deposit_liquidity.rs | 29 +++++++++---------- 1 file changed, 14 insertions(+), 15 deletions(-) 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 047829532..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 @@ -40,22 +40,21 @@ pub fn deposit_liquidity( let ratio = I64F64::from_num(pool_a.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) } };