Fair draws
How our draws are made
We cannot pick the winner, and neither can anyone else. Every draw can be checked by anyone, from any competition's Entrants list tab, without trusting us.
1. The entry list is frozen when entries close
The moment a competition closes, every ticket that can win (paid tickets and accepted postal entries) is listed in number order and given a fingerprint: the SHA-256 of the numbers joined by commas. The list and the fingerprint are published on the competition page. Nothing can be added after that.
2. The random number is named before it exists
The randomness comes from drand, a public beacon run by the League of Entropy (Cloudflare, EPFL, Kudelski Security and others). It publishes a new signed random value every 3 seconds that no single organisation can predict or influence; a round's value does not exist until its moment arrives. When the draw starts, we name the round that drand will publish a few seconds later, record it, and note which round drand had published by then. A competition's round can be named only once and the draw must use it, so nobody, including us, can know or choose the value.
3. The winner is simple arithmetic
When the round is published, our database works out the winner from it: the SHA-256 of “randomness:competition id:1”, taking the first 8 bytes as a whole number, divided by the number of entries, leaves a remainder: that is the position in the sorted list. For a second winner the same is done with “:2”, skipping any ticket already drawn. The result, the round, its signature and the randomness are recorded, and the draw can never be run again.
4. Check it yourself
On the competition page, the Entrants list tab has a Verify this draw button. Your own browser downloads the entry list, recomputes the fingerprint, fetches the round straight from drand's servers, redoes the arithmetic and shows the ticket it gets. You can also download the list and the round and do it with any SHA-256 tool.
The details, for the technically minded
- Beacon: drand
quicknet, chain hash52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971, scheme bls-unchained-g1-rfc9380, a round every 3 s from unix time 1692803367. - Naming: with L the newest round drand had published when the draw started, the draw uses round L + 2 or the first round at least 3 s ahead by our clock, whichever is later, so it is published 3 to 6 s after naming. Round r is published at genesis + (r − 1) × period.
- Randomness of a round: SHA-256 of the round's signature bytes (as drand defines it).
- Entry list fingerprint: SHA-256 of the ticket numbers in ascending order joined by commas, no spaces, as hex.
- Winner k: SHA-256 of the text “<randomness hex>:<competition id>:<k>”; the first 8 bytes as an unsigned big-endian integer, modulo the number of entries, is the 0-based index into the sorted list. Repeats are skipped and k increments.
