Wallet token debit
What the code does
WalletListener.handleOrderConfirmed catches the error, logs Failed to deduct token…, and rethrows.
What the comment says
The order is already committed, log the failure, and do not rethrow. The order stays confirmed regardless of balance.
Which one runs
The throw. The outbox retries the debit. The order is already confirmed either way, because the debit is not inside the confirm transaction.
Idempotency
Unknown. If deductToken commits the ledger row and then throws, the retry can insert a second debit unless a unique key rejects it. That unique key was not proven.
What a token is
Unknown. The method name is deductToken. The repository does not state a price, a refund rule, or whether this is a platform fee versus a prepaid balance. It is not, by itself, a Razorpay charge. Razorpay is used for payment intents and WhatsApp checkout.