What it is
WINNERBALL is a transparent, on-chain prize draw for holders of $WBALL on Solana. The token charges a 3% trade tax. That tax pools as SOL, and on a fixed timer one eligible holder is selected to receive the pot. Every result can be recomputed by anyone from public data.
The rules (all public, all equal)
- One winner per round.
- A round happens every 15 minutes.
- To be eligible you must hold ≥ 100,000 $WBALL at the moment of the snapshot.
- A round only pays out when the pot is ≥ 0.5 SOL. Below that, it rolls over and the SOL stays in the pot for next time.
- The winner is chosen by a formula seeded from a finalized Solana blockhash — nobody can pick or predict it.
Eligibility & the 100K minimum
The 100K floor exists to keep the draw meaningful: it stops dust wallets and one-token bot swarms from flooding the pool and diluting real holders. It is a single threshold applied identically to everyone — there is no upper cap, no tier, no weighting, and no secret list.
A small set of infrastructure addresses is excluded because they are not players, not people: the Meteora bonding-curve / liquidity pool, the token program, and the deployer / treasury wallet. These addresses are listed in every round's record and returned by the public API, so the exclusion is auditable.
The 15-minute cycle
- Claim. The server claims the accrued partner trading fees from the Meteora pool into the prize wallet.
- Check. Spendable pot = wallet balance − a small reserve kept for transaction fees. If the pot is under 0.5 SOL, the round is marked
SKIPPEDand rolls over. - Snapshot. If the pot clears the threshold, the server reads the current holder list and keeps every wallet at or above 100K $WBALL.
- Roll. It captures a finalized Solana blockhash and derives the winner (see below).
- Pay. The pot is sent on-chain to the winner, and the full round — including the blockhash and the eligible snapshot — is written to disk and published.
Provable fairness
The winner is a deterministic function of three public inputs: the round number, a finalized blockhash from the chain, and the snapshot of eligible wallets.
eligibleHash = sha256( JSON.stringify( sort(eligibleWallets) ) )
seed = sha256( roundId + ":" + blockhash + ":" + eligibleHash )
winnerIndex = int( seed[0..12] hex ) % eligibleWallets.length
winner = sortedEligible[ winnerIndex ]
The blockhash is the key trick: it is produced by the Solana network, not by us, and it is only known at draw time — so the operator cannot steer the result toward any wallet. Because the full eligible list is published with every round, anyone can rebuild eligibleHash and re-run the formula to the same winner.
How to verify a draw
- Open the VERIFY page and enter a round ID, then press Load round. The blockhash and the exact eligible snapshot are filled in for you.
- Press Recompute winner. The page runs the formula and compares against the stored winner.
- A green MATCH means the published winner is exactly what the public inputs produce. You can also paste your own list to confirm the snapshot is the real holder set.
Payouts
Payouts are automatic and on-chain. The winner does not need to claim anything — the SOL is sent directly to the winning wallet within the same round. The transaction signature is shown on the WINNERS page and links straight to Solscan.
FAQ
Do I have to do anything to enter?
No. Hold ≥100K $WBALL in your wallet. Every round automatically snapshots holders; if you qualify, you're in.
What if the pot is small?
If it's under 0.5 SOL the round rolls over and the SOL carries into the next pot, so it grows until it pays.
Can the team rig who wins?
No. The result depends on a chain-produced blockhash unknown until draw time, and the inputs are published so anyone can check. The team's own wallets are excluded.
Where is the data stored?
Round records persist on the server's disk and are exposed read-only through the public API powering the Winners and Verify pages.