Every 60 minutes the contract picks one holder and sends them ETH. Here's the step-by-step of what happens inside that hour, and why the odds structure favors small bags and frequent play.
Draw clock resets. Pot carries 20% over from last round. Holders are already entered. Nothing for anyone to do.
Every buy or sell pays 10% in ETH. 8% goes to the pot contract. You can watch the pot grow live on BaseScan or on the home page here.
Three paths make this happen:
1. Any swap after T+60 triggers it inline.
2. Chainlink Automation calls the contract on the hour.
3. Anyone can call pokeDraw() and earn a 0.1% finder's fee.
The coordinator returns a verifiable random number within a few blocks. The contract checks the cryptographic proof onchain. If the proof fails, the number is rejected and the draw stays pending.
Contract walks its Fenwick tree, finds the holder at the random index, and transfers 80% of the pot to them as ETH. The remaining 20% stays in the pot for next hour.
BASEPOT isn't a raffle where you need a minimum. Any balance gets you proportional odds.
Assume the pot is at 0.5 ETH (~$1,700) with 500 holders and a total tree weight of 100M tokens. Three examples:
BASEPOT pays out 24 times a day. A 1% per-hour chance compounds into a 21.5% chance of winning at least once in 24 hours. A 0.1% per-hour chance compounds to 2.4% per day. The daily and weekly odds add up fast when you're entering every single hour.
The contract stores holders in a Fenwick tree. Standard data structure from competitive programming, used here for two things at O(log n) cost:
1. Update a holder's weight when their balance changes.
2. Find the holder at a given cumulative-weight index.
Every time BASEPOT moves between wallets, the tree updates in the same transaction. When VRF returns its number, the contract asks the tree: "who owns index R?" It gets an answer in about 16 steps for a 50,000-holder tree. That answer is the winner.
No offchain indexer. No merkle root to commit. No 30-minute challenge window. The data structure is live and the lookup is deterministic. The random number is the only external input.
Holding is baseline. Burn-tickets are for bigger one-off bets.
| Draws since burn | Multiplier | Effective weight on $100 burn |
|---|---|---|
| 0 to 3 | 5x | ~150M virtual |
| 4 to 7 | 3x | ~90M virtual |
| 8 to 11 | 1x | ~30M virtual |
| 12+ | 0 | expired |
Across the 12-draw window, total expected weight-draws from a $100 burn is about 4x what you'd get from buying and holding $100. You pay for that boost by losing your tokens (burned) and by committing to a 12-hour window.
Two reasons.
Frequency. 24 draws a day. Each one is a chance. The distribution of wins across many small holders is wider than across a few whales.
Pot composition. The 20% rollover means a quiet hour still pumps next hour's pot. Small holders can catch a pot that was accumulated mostly by earlier swap volume. You didn't have to be trading to benefit.