From 1037803a50ea5a03cb2f9a761ffd83cce699f414 Mon Sep 17 00:00:00 2001 From: Zentex Date: Tue, 3 Feb 2026 21:27:51 +0530 Subject: [PATCH] Fix invariant check to use pool_account_b instead of pool_account_a The invariant check at line 137 was incorrectly comparing against pool_account_a.amount * pool_account_a.amount when it should be pool_account_a.amount * pool_account_b.amount to properly verify the constant product invariant (x * y = k). Fixes #477 --- .../token-swap/src/instructions/swap_exact_tokens_for_tokens.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tokens/token-swap/anchor/programs/token-swap/src/instructions/swap_exact_tokens_for_tokens.rs b/tokens/token-swap/anchor/programs/token-swap/src/instructions/swap_exact_tokens_for_tokens.rs index fb99e65aa..edf88a00d 100644 --- a/tokens/token-swap/anchor/programs/token-swap/src/instructions/swap_exact_tokens_for_tokens.rs +++ b/tokens/token-swap/anchor/programs/token-swap/src/instructions/swap_exact_tokens_for_tokens.rs @@ -134,7 +134,7 @@ pub fn swap_exact_tokens_for_tokens( // We tolerate if the new invariant is higher because it means a rounding error for LPs ctx.accounts.pool_account_a.reload()?; ctx.accounts.pool_account_b.reload()?; - if invariant > ctx.accounts.pool_account_a.amount * ctx.accounts.pool_account_a.amount { + if invariant > ctx.accounts.pool_account_a.amount * ctx.accounts.pool_account_b.amount { return err!(TutorialError::InvariantViolated); }