Enhance transaction detail extraction in LamassuTransactionProcessor: implement None-safe defaults for transaction fields and add validation checks for required fields, improving error handling and logging for missing data.

This commit is contained in:
padreug 2025-06-20 00:16:33 +02:00
parent 3a03efde20
commit c38a20b6da

View file

@ -503,11 +503,25 @@ class LamassuTransactionProcessor:
logger.info("No Flow Mode clients found - skipping distribution") logger.info("No Flow Mode clients found - skipping distribution")
return {} return {}
# Extract transaction details # Extract transaction details with None-safe defaults
crypto_atoms = transaction["crypto_amount"] # Total sats with commission baked in crypto_atoms = transaction.get("crypto_amount") # Total sats with commission baked in
fiat_amount = transaction["fiat_amount"] # Actual fiat dispensed (principal only) fiat_amount = transaction.get("fiat_amount") # Actual fiat dispensed (principal only)
commission_percentage = transaction["commission_percentage"] # Already stored as decimal (e.g., 0.045) commission_percentage = transaction.get("commission_percentage") # Already stored as decimal (e.g., 0.045)
discount = transaction.get("discount", 0.0) # Discount percentage discount = transaction.get("discount") # Discount percentage
# Validate required fields
if crypto_atoms is None:
logger.error(f"Missing crypto_amount in transaction: {transaction}")
return {}
if fiat_amount is None:
logger.error(f"Missing fiat_amount in transaction: {transaction}")
return {}
if commission_percentage is None:
logger.warning(f"Missing commission_percentage in transaction: {transaction}, defaulting to 0")
commission_percentage = 0.0
if discount is None:
logger.info(f"Missing discount in transaction: {transaction}, defaulting to 0")
discount = 0.0
# Calculate effective commission percentage after discount (following the reference logic) # Calculate effective commission percentage after discount (following the reference logic)
if commission_percentage > 0: if commission_percentage > 0:
@ -813,11 +827,11 @@ class LamassuTransactionProcessor:
return return
# Calculate commission amount for sending to commission wallet # Calculate commission amount for sending to commission wallet
crypto_atoms = transaction["crypto_amount"] crypto_atoms = transaction.get("crypto_amount", 0)
commission_percentage = transaction["commission_percentage"] commission_percentage = transaction.get("commission_percentage") or 0.0
discount = transaction.get("discount", 0.0) discount = transaction.get("discount") or 0.0
if commission_percentage > 0: if commission_percentage and commission_percentage > 0:
effective_commission = commission_percentage * (100 - discount) / 100 effective_commission = commission_percentage * (100 - discount) / 100
base_crypto_atoms = int(crypto_atoms / (1 + effective_commission)) base_crypto_atoms = int(crypto_atoms / (1 + effective_commission))
commission_amount_sats = crypto_atoms - base_crypto_atoms commission_amount_sats = crypto_atoms - base_crypto_atoms