A provably fair draw

Transparency

How we pick winners — and how you can check us

Any prize draw has to answer one awkward question: how do you know it was fair? Most draws just ask you to trust them. We do not. You can check ours yourself.

1

Entries are sealed

When entries close, we take the complete list of every entry and lock it in a sealed box. We publish a tamper-proof sticker (a SHA-256 hash) on the outside. If anyone changed even one entry, the sticker would no longer match — and everyone would spot it instantly.

2

A public dice rolls

We don't pick the winning numbers ourselves. We use drand, a public random beacon run by universities and tech organisations. Think of it as a giant dice the whole world watches, that rolls a fresh number every 30 seconds, and that nobody — including us — can predict or control. We announce which roll we'll use before it happens.

3

The two are combined

We mix the sealed-box sticker with the public random number to produce winning positions, working down from the top prize through every tier. Nobody wins twice.

4

Everything is published

After the draw, we publish the full entry list, the exact random number, and the open recipe we followed. Anyone can re-run the draw themselves and get exactly the same winners. Not because they trust us — because they can prove it.

Why openness doesn't help cheaters

Fairness doesn't come from keeping the method secret. It comes from the fact that the winning number doesn't exist until the moment of the draw, and once it does, it's the same for everyone and already tied to the sealed entries. Knowing our method inside out doesn't help you — you still can't know the random number before it appears. Openness only lets you check us. It never lets anyone cheat.

For the technically curious

  • • Entry references follow SNF-YYYY-DDDD-NNNNNNNNNN. Numbers are sequential within a draw.
  • • Commitment = SHA-256(entries joined by newline), published before the drand round exists.
  • • Seed = SHA-256(commitment + drand randomness).
  • • Winners are drawn without replacement using a Fisher-Yates walk driven by the stream SHA-256(seed + ":" + counter), with rejection sampling to avoid modulo bias.
  • • Tiers are filled in order. Default: [1, 6, 25, 68, 324].
  • • No Math.random, no timestamps, no database IDs. The only randomness is the drand value.

Want to see it end-to-end? Watch a live draw run in the admin panel.