Audit any draw yourself
Don't trust — verify
Every Cashout draw publishes the two files anyone needs to audit it. Pair them with the onchain ORAO VRF signature and the math is checkable end to end — no insider access required.
Download both files for the draw
Every draw — the 10-minute sessions and the hourly jackpot — publishes a snapshot.json and a tickets.json at /api/draws/<drawNo>/. Open the draw in Results and grab both.
Cross-check the two winners
Both files declare the same two winner addresses and the same two ticket indexes. If they disagree, the draw is not valid.
Walk the ticket ranges for winner 1
In tickets.json each holder owns a contiguous {owner, from, to} range. Walk `ranges` until you reach winners[0].ticketIndex — that range's owner must equal the first winner.
Walk the re-packed ranges for winner 2
The second winner is drawn from the same line with winner 1's tickets removed. `secondRoundRanges` is that re-packed line: walk it to winners[1].ticketIndex and you must land on the second winner. This is why one wallet can never take both prizes.
Re-hash the snapshot
Join the sorted `owner:tickets` lines from snapshot.json with newlines and hash with SHA-256. The result must equal snapshotHash — the commitment the bot published before it asked for any randomness.
Confirm the randomness onchain
Open vrfRequest on Solscan: that is the ORAO randomness account for this draw. Each ticket index is SHA-256(randomness ‖ slot number) mod (tickets remaining), taking the first 8 bytes as a big-endian integer.
What's in each file
snapshot.json
- winners[], snapshotSlot, snapshotHash, vrfRequest, payoutTx
- holders[] — every eligible wallet plus its ticket count, sorted by address
- snapshotHash — SHA-256 of the sorted `owner:tickets` lines
tickets.json
- winners[] (same values as snapshot.json — cross-check)
- ranges[] — {owner, tickets, from, to}, contiguous and half-open
- secondRoundRanges[] — the same line re-packed without winner 1
Randomness
The winning index comes from the ORAO VRF on Solana — unpredictable before it is drawn and verifiable after. Every ticket has exactly 1 / (total tickets) chance, and tickets are capped at 300 above 5,000,000 $CASH so no wallet can buy its way to certainty.
Snapshot integrity
The snapshot is committed at a chosen Solana slot. Anyone fetching that slot later sees exactly the same holders — change one byte of the sorted pairs and the SHA-256 snapshot hash breaks.
