From 3e9f0f9384e9e2c3bb8ca47a76113277728e8a41 Mon Sep 17 00:00:00 2001 From: jonesmarvin8 <83104039+jonesmarvin8@users.noreply.github.com> Date: Fri, 28 Nov 2025 08:11:04 -0500 Subject: [PATCH] fixed omitted vault checks Previous versions mistakenly used token_definition instead of vault account id to check for vaults. Functions and corresponding tests fixed. Minor error in arithmetic in state.rs for remove_liquidity fixed. --- nssa/program_methods/guest/src/bin/amm.rs | 113 ++++++++++------------ nssa/src/state.rs | 6 +- 2 files changed, 55 insertions(+), 64 deletions(-) diff --git a/nssa/program_methods/guest/src/bin/amm.rs b/nssa/program_methods/guest/src/bin/amm.rs index 39f11fa..534ef2b 100644 --- a/nssa/program_methods/guest/src/bin/amm.rs +++ b/nssa/program_methods/guest/src/bin/amm.rs @@ -335,20 +335,18 @@ fn swap( // Verify vaults are in fact vaults let pool_def_data = PoolDefinition::parse(&pool.account.data).unwrap(); - let vault1_data = TokenHolding::parse(&vault1.account.data).unwrap(); - let vault2_data = TokenHolding::parse(&vault2.account.data).unwrap(); - let vault_a = if vault1_data.definition_id == pool_def_data.definition_token_a_id { + let vault_a = if vault1.account_id == pool_def_data.vault_a_addr { vault1.clone() - } else if vault2_data.definition_id == pool_def_data.definition_token_a_id { + } else if vault2.account_id == pool_def_data.vault_a_addr { vault2.clone() } else { panic!("Vault A was not provided"); }; - let vault_b = if vault1_data.definition_id == pool_def_data.definition_token_b_id { + let vault_b = if vault1.account_id == pool_def_data.vault_b_addr { vault1.clone() - } else if vault2_data.definition_id == pool_def_data.definition_token_b_id { + } else if vault2.account_id == pool_def_data.vault_b_addr { vault2.clone() } else { panic!("Vault B was not provided"); @@ -485,29 +483,24 @@ fn add_liquidity(pre_states: &[AccountWithMetadata], let user_b = &pre_states[5]; let user_lp = &pre_states[6]; - let mut vault_a = AccountWithMetadata::default(); - let mut vault_b = AccountWithMetadata::default(); - + // Verify vaults are in fact vaults let pool_def_data = PoolDefinition::parse(&pool.account.data).unwrap(); - let vault1_data = TokenHolding::parse(&vault1.account.data).unwrap(); - let vault2_data = TokenHolding::parse(&vault2.account.data).unwrap(); - - if vault1_data.definition_id == pool_def_data.definition_token_a_id { - vault_a = vault1.clone(); - } else if vault2_data.definition_id == pool_def_data.definition_token_a_id { - vault_a = vault2.clone(); - } else { - panic!("Vault A was not provided"); - } + let vault_a = if vault1.account_id == pool_def_data.vault_a_addr { + vault1.clone() + } else if vault2.account_id == pool_def_data.vault_a_addr { + vault2.clone() + } else { + panic!("Vault A was not provided"); + }; - if vault1_data.definition_id == pool_def_data.definition_token_b_id { - vault_b = vault1.clone(); - } else if vault2_data.definition_id == pool_def_data.definition_token_b_id { - vault_b = vault2.clone(); + let vault_b = if vault1.account_id == pool_def_data.vault_b_addr { + vault1.clone() + } else if vault2.account_id == pool_def_data.vault_b_addr { + vault2.clone() } else { panic!("Vault B was not provided"); - } + }; if max_balance_in.len() != 2 { panic!("Invalid number of input balances"); @@ -647,29 +640,25 @@ fn remove_liquidity(pre_states: &[AccountWithMetadata]) -> (Vec, Vec