everyone wants something for nothing. so we built the machine that gives it to them — every 30 minutes, one wallet gets paid.
HOLD THE BAG.
THE VAULT PICKS ONE.
ONE WALLET GETS PAID.
$SFN is a memecoin on Robinhood Chain with an automatic lottery built in. Every 30 minutes a bot snapshots every holder, hands out tickets in proportion to how much you hold, and draws one winner — who is paid ETH straight to their wallet. More $SFN = more tickets = better odds. You must be holding to be entered; sell your bag and you’re out of the draw. Every winner is picked from a public block-hash seed, so anyone can verify the draw wasn’t rigged. That’s the whole game: hold the token, stay in, win the pot.
EVERY TICKET IS A BALANCE.
MORE $SFN = MORE TICKETS.
A ROBOT PICKS ONE. IT DOES NOT SLEEP.
(that is the whole business model. it fits on a receipt.)
| round | winner wallet | won | transaction | snapshot | verify |
|---|
Pick a round. Your browser recomputes the winner from the published seed — nothing trusted, the math runs locally. The output links the seed’s source block and the snapshot file so you can check them independently.
Don’t trust our data? Paste a round’s snapshot JSON (the round-N.json file — it contains the seed, totalTickets, entries and winner). Or paste {"seed":"0x…","totalTickets":123} for just the ticket math.
The snapshot still comes from us. To trust nothing, rebuild the holder→ticket map from public chain data and confirm it matches the published round-N.json. The rules are fixed and public — same inputs, same ranges:
GET https://api.blockscout.com/4663/api/v2/tokens/<TOKEN>/holders (paginate via next_page_params). For an exact match, read balances as of the round’s snapshotBlock — call balanceOf(holder) at that block over RPC. Blockscout returns latest balances, which match if you check right after the round.excludedAddresses (LP, router, prize wallet, burn, zero).minBalanceToQualify.floor(balance / 10^decimals) × ticketsPerToken.Your totalTickets and every ticketStart/ticketEnd must equal the published snapshot. If they do, the ticket ranges weren’t rigged — and the verifier above already proves the seed picks the published winner from those ranges. (This is exactly what the bot’s tickets.ts does; the code is in the repo.)
Tickets. Every holder gets tickets proportional to their $SFN balance — more tokens, more tickets, higher odds. A minimum balance excludes dust; LP, router, prize wallet and burn addresses are excluded. The full holder→ticket map is frozen in a snapshot each round.
Seed. Before the snapshot block is even mined, the bot publishes which future block will be used (the commit block). Once mined, that block’s hash becomes the seed — a public, unpredictable value nobody could pre-compute or cherry-pick. You don’t have to trust our published seed: look up the commit block on the Blockscout explorer and read its hash yourself.
Draw. Winner = deterministic function of seed and snapshot: winningTicket = seed mod totalTickets, then walk the cumulative ticket ranges — the wallet owning that ticket wins. (If that winner had dumped by payout time, the next candidate is keccak(seed, n) mod totalTickets — also recomputable.)
Off-chain by design. Nothing on-chain except reading balances and sending the prize. The 5% token fee is handled by a separate app and is unrelated to this lottery.