May 14, 2026
Sweep + tip errors now name the actual reason
When a transaction fails, the page used to say a generic 'All transactions failed to submit' — same string whether your wallet was out of SOL, a wallet quirk fired, or a real bug ran. The submit path now pre-simulates each transaction and, on the small set of definitively-deterministic Solana errors, surfaces a specific reason.
- ·If your wallet doesn't have enough SOL to pay the transaction fee, the error now says exactly that instead of the generic 'failed to submit' line. Same for a handful of other deterministic failures (signature invalid, fee account malformed, transaction already processed).
- ·Pre-simulation is conservative on purpose. Anything that could be a transient race (blockhash not seen yet, account in flight, RPC lag) still falls through to normal submission so a flaky RPC moment doesn't reject a perfectly good transaction.
- ·Belt-and-suspenders: our database-layer duplicate-signature guard (FORT-MNY-003 from the audit backlog) is now active in production. Two concurrent sweeps trying to claim the same on-chain signatures will fail loudly at the database, not silently double-record. App-layer dedup already prevented this, but a backstop never hurts on a real-money path.
- ·Test infrastructure: a real-Postgres integration test harness and a Playwright end-to-end suite landed alongside this. Neither runs against production data — but every future change to the sweep / scan / fee paths now has a place to pin its invariants before shipping.