From 92cd56b10aa5e1baad1244020d170deb70550ebb Mon Sep 17 00:00:00 2001 From: Babalola Abiodun Ayomide <106444765+Biokes@users.noreply.github.com> Date: Thu, 25 Jun 2026 00:18:22 +0100 Subject: [PATCH] Refactor fee computation and validation functions --- contracts/src/fee.rs | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/contracts/src/fee.rs b/contracts/src/fee.rs index feb3bad..42b3d2c 100644 --- a/contracts/src/fee.rs +++ b/contracts/src/fee.rs @@ -1,15 +1,26 @@ use crate::errors::TrustFlowError; -pub const DEFAULT_FEE_BPS: u32 = 50; // 0.5% -pub const MAX_FEE_BPS: u32 = 1_000; // 10% +pub const DEFAULT_FEE_BPS: u32 = 50; +pub const MAX_FEE_BPS: u32 = 1_000; +pub const BASIS_POINTS: i128 = 10_000; -pub fn compute_fee(amount: i128, fee_bps: u32) -> Result<(i128, i128), TrustFlowError> { - let fee = amount.checked_mul(fee_bps as i128).ok_or(TrustFlowError::ArithmeticOverflow)? - .checked_div(10_000).ok_or(TrustFlowError::ArithmeticOverflow)?; - let payout = amount.checked_sub(fee).ok_or(TrustFlowError::ArithmeticOverflow)?; - Ok((fee, payout)) +pub fn validate_fee_bps(fee_bps: u32) -> Result<(), TrustFlowError> { + if fee_bps > MAX_FEE_BPS { + Err(TrustFlowError::InvalidAmount) + } else { + Ok(()) + } } -pub fn validate_fee_bps(fee_bps: u32) -> Result<(), TrustFlowError> { - if fee_bps > MAX_FEE_BPS { Err(TrustFlowError::InvalidAmount) } else { Ok(()) } +pub fn compute_fee(amount: i128, fee_bps: u32) -> Result<(i128, i128), TrustFlowError> { + let fee = amount + .checked_mul(fee_bps as i128) + .and_then(|v| v.checked_div(BASIS_POINTS)) + .ok_or(TrustFlowError::ArithmeticOverflow)?; + + let payout = amount + .checked_sub(fee) + .ok_or(TrustFlowError::ArithmeticOverflow)?; + + Ok((fee, payout)) }