Every round is a public paper trail: who entered, how the winner was picked, where the SOL went. Here’s how it works, and how to check it yourself.
Pre-mainnet preview · real devnet rounds, verifiable on-chain and recomputable in your browser.
01 · THE MECHANISM
Six steps. Every ten minutes.
01
Hold $BALL
Every 10,000 $BALL in your wallet is one ticket. Nothing to sign.
02
Snapshot
At a fixed slot, every eligible wallet and its ticket range is recorded.
03
Lock the list
A Merkle root fingerprints the list before any randomness exists.
04
Outside randomness
ORAO VRF supplies a random number nobody on the team can choose.
05
Anyone settles
The program checks the winning proof. Anyone can trigger it.
06
Paid in SOL
90% to the winner. 10% buys and burns $BALL. No team cut.
PROVABLY FAIR
What gets published.
Before every draw we publish two files anyone can download and audit: the eligible-holder snapshot and the ticket-range matrix. Pair them with the on-chain Merkle root and ORAO randomness and the whole draw is checkable end to end. No trust required.
One open-source script. It reads the chain and the published files, then recomputes every step. No trust required.
# 1. Get the public verifier
curl -O /proofs/verify_draw.mjs
npm i @solana/web3.js
# 2. Check any round against the chain
node verify_draw.mjs \
--rpc https://api.devnet.solana.com \
--program CBGRwadBhjMwswqYBe6788DFnHYTj1rCU4J994epwEZP \
--round 1 \
--data ./proofs/devnet
Example output · round 1 (not run here)✓ Merkle root matches on-chain round✓ Snapshot SHA-256 matches committed hash✓ Seed = sha256(roundId ‖ root ‖ slot)✓ Winning index 4 → AaqP…WoV○ ORAO account closed: source check skipped✓ Settle tx pays 0.09 SOL to winner✓ DRAW VERIFIED: 5 passed, 0 failed
The seed is committed before ORAO is asked. The ticket range that contains the index is the winning wallet.
Where the pot comes from
5% Meteora feeVault PDA
90% winner 10%
The 10% is swapped to $BALL via Jupiter and burned. No team cut, no rollover.
Every ten minutes
Draws run on 10-minute boundaries in America/New_York. Fulfillment and settlement can take a moment longer.
Guaranteed by the program*
Immutable program, no upgrade authority
Root locked before randomness
Deterministic winning index from VRF
Settlement rules & recorded payout
Operator-published, but checkable
Which wallets are excluded
Snapshot accuracy & ticket ranges
Snapshot timing & draw liveness
Files match the committed set
*Program-level guarantees apply once the upgrade authority is revoked at mainnet launch. The addresses below are the real deployed devnet instance, which stays upgradeable while we iterate. Open them on the explorer and check for yourself.