mirror of
https://github.com/Such-Software/wowcheckout.git
synced 2026-10-17 05:51:45 +02:00
fix: Wownero atomic unit is 10^11, not 10^12
The codebase was forked from xmrcheckout and kept Monero's 10^12 atomic-unit constant everywhere. Wownero uses 11 decimal places, not 12. Effect: _xmr_to_atomic(amount) produced a required_atomic value 10× larger than what wallet-rpc actually reports for the subaddress. Invoices flagged total_paid_atomic correctly (that comes from the daemon) but is_paid = total_paid >= required was always false, so the reconciler never flipped status pending → payment_detected, webhook never fired, Medusa never saw the payment. Fix all four places: reconciler._xmr_to_atomic, btcpay_routes._xmr_to_atomic, btcpay_routes._atomic_to_xmr, btcpay_routes._format_xmr_fixed, routes.py invoice-status response. Extracted a WOW_ATOMIC_UNITS constant so this doesn't get lost again when we touch these files.
This commit is contained in:
+4
-2
@@ -302,8 +302,10 @@ def _public_invoice_status_response(
|
||||
metadata = invoice.metadata_json or {}
|
||||
update: dict[str, Any] = {}
|
||||
if invoice.total_paid_atomic is not None:
|
||||
total_paid = (Decimal(invoice.total_paid_atomic) / Decimal("1000000000000")).quantize(
|
||||
Decimal("0.000000000001"), rounding=ROUND_DOWN
|
||||
# Wownero uses 11 decimal places (10^11), NOT 12 like Monero. Using
|
||||
# 10^12 here under-reports amount_paid by a factor of 10.
|
||||
total_paid = (Decimal(invoice.total_paid_atomic) / Decimal("100000000000")).quantize(
|
||||
Decimal("0.00000000001"), rounding=ROUND_DOWN
|
||||
)
|
||||
update["amount_paid_xmr"] = format_xmr_amount(total_paid)
|
||||
btcpay_data = metadata.get("btcpay") if isinstance(metadata, dict) else None
|
||||
|
||||
Reference in New Issue
Block a user