← Raffles

Provably fair

Every raffle draw can be recomputed by anyone from public data. Nothing here talks to our server: the maths below runs in your browser.

How it works

  1. Commitment. Before a raffle opens we generate a secret seed and publish sha256(seed) on the card. We can't change the seed later without breaking that hash.
  2. Frozen entries. At the draw, the list of qualifying bet ids is sorted and hashed: entries_hash = sha256(ids joined by newline). The list is public.
  3. Selection. For winner i (starting at 0), compute HMAC‑SHA256(seed, entries_hash + ":" + i), take the first 8 bytes as a big‑endian integer, and use it mod the number of entries still in the pool. Each pick is removed, so nobody wins twice with the same bet.
  4. Reveal. The seed is published with the result. Anyone can rerun steps 2–3 and get the same winners.

The seed is used as its 64‑character hex string (ASCII bytes), not decoded.

Weekly draws work the same way with tickets: each entry line is site/name:tickets in the frozen order, and the 8‑byte number is taken mod the tickets still in the pool (×1000, as integers) and walked along the cumulative tickets, so a player with 6 of 10 tickets has a 60% chance at the first prize. The winning ticket is then removed and the next prize is drawn from what is left — one player can win more than once. (Draws before 3 Sept 2026 removed the whole player instead; the verifier applies whichever rule the draw was made under.)

Verify a draw