From 2e52d36948a9df1d99c49730f7b08e5d4e7a8207 Mon Sep 17 00:00:00 2001 From: jonesmarvin8 <83104039+jonesmarvin8@users.noreply.github.com> Date: Wed, 27 May 2026 17:33:01 -0400 Subject: [PATCH] fix keycard and lint --- wallet/src/account_manager.rs | 19 +++++++++++-------- wallet/src/cli/programs/amm.rs | 1 + wallet/src/program_facades/amm.rs | 11 ++++++++++- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/wallet/src/account_manager.rs b/wallet/src/account_manager.rs index 9a6e60e7..c3b23c34 100644 --- a/wallet/src/account_manager.rs +++ b/wallet/src/account_manager.rs @@ -274,14 +274,17 @@ impl AccountManager { } pub fn public_account_nonces(&self) -> Vec { - self.states - .iter() - .filter_map(|state| match state { - State::Public { account, sk } => sk.as_ref().map(|_| account.account.nonce), - State::PublicKeycard { account, .. } => Some(account.account.nonce), - State::Private(_) => None, - }) - .collect() + // Must match the signature order produced by sign_message(): local accounts first, + // keycard accounts second. + let local = self.states.iter().filter_map(|state| match state { + State::Public { account, sk } => sk.as_ref().map(|_| account.account.nonce), + State::PublicKeycard { .. } | State::Private(_) => None, + }); + let keycard = self.states.iter().filter_map(|state| match state { + State::PublicKeycard { account, .. } => Some(account.account.nonce), + State::Public { .. } | State::Private(_) => None, + }); + local.chain(keycard).collect() } pub fn private_account_keys(&self) -> Vec { diff --git a/wallet/src/cli/programs/amm.rs b/wallet/src/cli/programs/amm.rs index 6b1a657c..f2d546c6 100644 --- a/wallet/src/cli/programs/amm.rs +++ b/wallet/src/cli/programs/amm.rs @@ -259,6 +259,7 @@ impl WalletSubcommand for AmmProgramAgnosticSubcommand { max_amount_b, &user_holding_a, &user_holding_b, + &user_holding_lp, ) .await?; println!("Transaction hash is {tx_hash}"); diff --git a/wallet/src/program_facades/amm.rs b/wallet/src/program_facades/amm.rs index d60039a6..b47b8fdd 100644 --- a/wallet/src/program_facades/amm.rs +++ b/wallet/src/program_facades/amm.rs @@ -284,6 +284,7 @@ impl Amm<'_> { max_amount_to_add_token_b: u128, user_holding_a_mention: &CliAccountMention, user_holding_b_mention: &CliAccountMention, + user_holding_lp_mention: &CliAccountMention, ) -> Result { let user_holding_a_identity = user_holding_a_mention.key_path().map_or( AccountIdentity::Public(user_holding_a), @@ -301,6 +302,14 @@ impl Amm<'_> { }, ); + let user_holding_lp_identity = user_holding_lp_mention.key_path().map_or( + AccountIdentity::Public(user_holding_lp), + |key_path| AccountIdentity::PublicKeycard { + account_id: user_holding_lp, + key_path: key_path.to_owned(), + }, + ); + let program = Program::amm(); let amm_program_id = Program::amm().id(); let user_a_acc = self @@ -343,7 +352,7 @@ impl Amm<'_> { AccountIdentity::PublicNoSign(pool_lp), user_holding_a_identity, user_holding_b_identity, - AccountIdentity::PublicNoSign(user_holding_lp), + user_holding_lp_identity, ], instruction_data, &program.into(),