1 · Commit
2 · Roll
3 · Reveal
Draws
drawn4,080 tickets · 59 players · 3 prizesWinners
li***
nonce 1 · roll 907 → ticket #908 · $500
Cl***
nonce 4 · roll 2,042 → ticket #2,043 · $300
Ja***
nonce 5 · roll 4,060 → ticket #4,061 · $200
Names are masked the same way as on the leaderboard. The ticket list hash is SHA-256 of this exact list in this order, so it is verifiable without exposing accounts. Winners are contacted directly.
Manual calculator
Paste any seeds and recompute a single roll. Runs entirely in your browser with the Web Crypto API.
The exact algorithm
serverSeedHash = SHA256(serverSeed) // published before the draw ticketsHash = SHA256(JSON.stringify(tickets.map(t => [t.username, t.count]))) for nonce = 1, 2, 3, ...: digest = HMAC_SHA256(key = serverSeed, message = clientSeed + ":" + nonce) roll = parseInt(digest.slice(0, 13), 16) mod totalTickets // 0-based winner = holder of ticket (roll + 1), ranges follow list order skip the nonce if that holder (list position) already won; stop after all prizes are assigned
Same code runs on the server and on this page: src/lib/fair.ts.