
HOW IT DRAWS
Four steps. Every fifteen minutes. Forever.
Buy $BBALL
Pick up your ticket on Uniswap or Matcha. Any amount counts toward your stack.
Hold ≥ 0.1% supply
100,000,000 BBALL gets you in the draw. More tokens = more tickets, no upper limit.
Every swap fuels the jackpot
5% of every trade routes straight into the on-chain prize pool. No team take, no rug.
Every 15 min — someone wins it all
Pyth Entropy picks a random eligible holder. 100% of the prize pool gets paid out. Then the next round begins.
RECENT DRAWS
Last 25 winners — every payout verifiable on Base.
BUY $BBALL
Three places. Same token. Same draw. Pick whatever you trust.
TOKENOMICS & FAQ
+How do I know the draw is fair?
Two parts. The random number comes from Pyth Entropy via a commit-reveal protocol — neither the contract nor the entropy provider can predict it. And the holder snapshot is committed as a Merkle root on-chain before randomness is requested; the winning leaf is then proved against that root at payout. Anyone can replay the indexer against the committed snapshot block to verify the root is honest.
+What if I sell my BBALL right after I'm in the snapshot?
You're still eligible for that draw. The snapshot at commit time is your lottery ticket. The contract pays in ETH, not BBALL — there's no lock-in.
+Where do the swap fees actually go?
Straight to the LotteryTreasury contract via Clanker V4's FeeLocker. The keeper sweeps any accrued fees into the contract at the start of each draw — verifiable on BaseScan. There's no admin wallet that can divert them.
+What if there are no eligible holders?
The draw is postponed and the prize rolls into the next 15-minute cycle. No-op for that round, prize accumulates, next draw still fires on schedule.
+Can the contract be paused or upgraded?
There's a pause lever controlled by a 2-of-3 multisig — used only in true emergencies (a critical bug). It cannot redirect funds, only halt draws. The contract is not upgradeable; a replacement would require a fresh deploy and explicit token-holder migration.
+What if a draw gets stuck?
If Pyth's callback never arrives (unusual but possible), emergencyResetDraw() lets the owner void the in-flight draw after 1 hour. The prize pool stays in the contract and rolls into the next round — funds are never lost.