From a5ed1254cd976f967d40824babbc8ef3773b2207 Mon Sep 17 00:00:00 2001 From: PastaClaw Date: Sun, 22 Feb 2026 11:15:03 -0600 Subject: [PATCH] fix(ui): replace f64 round-trip with integer arithmetic in max amount calculations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace floating-point round-trip (u64→f64→u64) with integer saturating_sub for fee reservation in Max button calculations. This eliminates precision loss that could cause incorrect max amounts in transfer and withdraw screens. - transfer_screen: 0.0002 DASH = 20_000_000 credits - withdraw_screen: 0.005 DASH = 500_000_000 credits --- src/ui/identities/transfer_screen.rs | 4 ++-- src/ui/identities/withdraw_screen.rs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/ui/identities/transfer_screen.rs b/src/ui/identities/transfer_screen.rs index 4a45c1713..eb9a45696 100644 --- a/src/ui/identities/transfer_screen.rs +++ b/src/ui/identities/transfer_screen.rs @@ -134,8 +134,8 @@ impl TransferScreen { ui.add_space(5.0); // Calculate max amount minus fee for the "Max" button - let max_amount_minus_fee = (self.max_amount as f64 / 100_000_000_000.0 - 0.0002).max(0.0); - let max_amount_credits = (max_amount_minus_fee * 100_000_000_000.0) as u64; + // 0.0002 DASH = 20_000_000 credits (1 DASH = 100_000_000_000 credits) + let max_amount_credits = self.max_amount.saturating_sub(20_000_000); let amount_input = self.amount_input.get_or_insert_with(|| { AmountInput::new(Amount::new_dash(0.0)) diff --git a/src/ui/identities/withdraw_screen.rs b/src/ui/identities/withdraw_screen.rs index b3de54760..319fd1108 100644 --- a/src/ui/identities/withdraw_screen.rs +++ b/src/ui/identities/withdraw_screen.rs @@ -107,8 +107,8 @@ impl WithdrawalScreen { } fn render_amount_input(&mut self, ui: &mut Ui) { - let max_amount_minus_fee = (self.max_amount as f64 / 100_000_000_000.0 - 0.005).max(0.0); - let max_amount_credits = (max_amount_minus_fee * 100_000_000_000.0) as u64; + // 0.005 DASH = 500_000_000 credits (1 DASH = 100_000_000_000 credits) + let max_amount_credits = self.max_amount.saturating_sub(500_000_000); // Lazy initialization with basic configuration let amount_input = self.withdrawal_amount_input.get_or_insert_with(|| {