Our draws are fair, and you can check
Our live draws are picked with Google’s random number generator, live on the stream, and can be watched as they happen.
Our instant wins and automatic draws are picked by the transparent and fair method below.
The digital lock
We use a digital lock system so you can prove to yourself that our draws are fair. Here is how it works.
Before the draw: we post a unique, unchangeable digital code (a fingerprint) that locks in the list of players and the random winning code before the winner is chosen.
After the draw: we reveal the key that unlocks that code.
The proof: because the code was posted before the draw, we cannot alter the result or pick a favourite. Anyone can plug the key into our checker and see that the winner came out of the locked draw, not out of a choice.
That is the whole idea. The rest of this page is the same thing in more detail, for anyone who wants to run the check or see exactly what is locked in when.
The main draw
When entries close we lock the entry list and publish its fingerprint, before the draw runs. That is the digital lock doing its work: the list of entries in the draw cannot be changed afterwards without breaking the fingerprint. What happens next depends on how the draw is run.
An automatic draw takes its winner from two things together. The first is a secret random seed, locked in when entries close and revealed after the draw. The second is a random number that we do not produce and cannot influence: a round of drand, the public randomness published every few seconds by the League of Entropy, a group of independent universities and companies. When entries close we name, in the published fingerprint, the exact round we will use, and it is always a round that has not been published yet. So nobody, us included, can know the winner until drand publishes that round, and by then the seed is already locked and cannot be chosen to suit it.
Every drand round carries a signature that anyone can check against the League of Entropy’s public key. We check it before we use the round, and the checker below checks it again, so a made up number cannot be passed off as drand’s. If the round cannot be fetched or its signature does not check out, the draw waits until it can. It never goes ahead on the seed alone. Anyone can recompute the winner from the published numbers once the draw has run.
A live draw takes its winning number from a random number generator operated live on the stream, in front of whoever wants to watch. We record the number the generator produced and publish it. The entry list was locked before the stream started, so the number cannot be pointed at somebody who was never in the draw, and anyone can check the recorded number against the locked list. A seed is revealed when the result is recorded, and for one job only: it opens the lock on the entry list, proving the list is the one fixed at close. It does not pick the number.
Instant wins
These work the same way, one step earlier. Before a competition goes on sale we fix which ticket numbers win a prize, and publish a fingerprint of the seed and the prize list together. Nobody chooses the numbers, and they cannot be changed afterwards without breaking that fingerprint. The seed stays private until the competition ends, because while it is on sale the seed would tell you exactly which tickets to buy.
What this does not prove
We would rather say this plainly than have you find it. For an automatic draw, the winner can be worked out by anyone holding the seed from the moment drand publishes the named round, and that includes us. Nobody can change it: the fingerprint was already published. When a competition reaches its closing time the draw runs by itself shortly after the round appears, usually within a minute or two. If we close a competition early by hand, for example to look into a problem, the draw waits for us, and that window lasts until we draw it or cancel it.
A competition could in principle be cancelled in that window, so a cancellation is never silent. Every cancellation is recorded and refunded in full, and if entries had already closed we publish the seed on the competition’s check page, so anyone can work out who the draw would have picked.
One more thing we cannot prove with mathematics alone. The round we name is chosen from our own clock when entries close, and the check page shows that time beside the round so you can see the round came after it. That time is our own record. What independently shows the round was still in the future is that the fingerprint naming it was published before drand published the round, which anyone who saw or saved the check page at close can confirm.
Competitions whose entries closed before 27/09/2026 were drawn from the seed alone, before we added drand. For those the seed existed from the moment entries closed, so we could have worked out the winner at any point before the draw. We could not have changed it, and the checker still verifies them exactly as before.
For a live draw, the mathematics proves that the entry list was fixed before the stream started and that the recorded winner was in it. It does not prove the on-stream draw itself: the number came from the generator on the stream, and the seed we reveal only opens the lock on the entry list, so no published value can recompute the number. That is exactly why the draw is streamed, so the draw can be watched rather than taken on trust.
For instant wins there is no such gap. The numbers are fixed before a single ticket goes on sale.
Doing the check
- Open the competition page and follow the link to check that draw, or go straight to /verify/ and the competition’s address.
- Download the raw numbers from the link on that page. It is a plain JSON file: the fingerprints, the seed once it is published, the entry list and the prize list. A very large entry list comes in pages, and the file tells you how to fetch the rest, or you can download the whole list in one go as described below. The usernames in the entry list are published for 30 days after entries close, so save a copy within that time if you want to be able to run the full check later.
- Download the checker from /verify.mjs. It is a single file, short enough to read in a sitting, and it shares no code with this site. For draws that use drand it can check the round’s signature itself if you install one widely used cryptography library next to it (npm install @noble/curves@1.9.7), and it also compares the round with drand’s own public server. Everything else it does with nothing but Node. It works the answer out from scratch, so it disagrees with us if our own version ever drifts from what is described here. Download a fresh copy rather than reusing an old one: since 22/10/2026, when a draw has fewer entries than winners every entry wins, and a copy saved before then reports those draws as impossible. Then run it:node verify.mjs https://this-site/api/verify/the-competition
- Compare its answer with ours. If they ever disagree, we would like to know before anybody else does.
What is in the entry list
The entry list has to be published in full, or its fingerprint proves nothing. It contains ticket numbers and usernames, which is the same public identity you see on the results pages, so you can look at the list and find your own entries in it. It does not contain real names, email addresses or postal addresses, and it never will. Someone who entered by post without an account appears as a reference rather than a name, because they have no public identity to show.
The list is frozen when entries close, so it always shows the username each entrant held at that moment. If a username is changed afterwards, the published list keeps the old one. That is deliberate: the fingerprint is a record of what was locked in, and rewriting it would be the one thing this whole scheme exists to prevent.
The usernames are published for 30 days after entries close and then withdrawn from public view, so that nobody’s entries stay on show for ever. The clock starts when entries close, not when the draw happens, so a draw that happens late, or never, does not keep them on show, and a list once withdrawn is not published again. The ticket numbers stay published. After that the seed still has to open its fingerprint, the drand round can still be checked, the winning numbers can still be worked out from the published fingerprint and ticket numbers, and the ticket numbers can still be matched to the shuffle key fixed before sales. What can no longer be checked is that the list matches its fingerprint, because the fingerprint covers the usernames, so the checker reports that part as not checked rather than as passed. It keeps its own copy of the 30-day rule, so a list withheld any earlier is reported as a failure, with a reminder to check your computer’s clock first. A copy saved within the 30 days can still be checked in full: name it as the second argument to the checker.
On our biggest draws the list is too long to fit on the competition’s own verify page in one go, so that page only shows it a few thousand rows at a time and cannot recompute the fingerprint from a partial list. Every closed or drawn competition also publishes its full list as one file, at /api/verify/the-competition/pool.ndjson, one entry per line as a ticket number and the entrant it belongs to. To check it by hand: put the lines in ticket-number order (they are already streamed in that order), join each line’s two fields with a colon, join the lines themselves with |, and take the SHA-256 hash of the result. That is the exact recipe the fingerprint on the competition’s verify page is checked against, so the two must match.