Proving a giveaway was fair, without asking anyone to trust you

· 4 min read
By Spin of luck team

A screenshot proves nothing. Here is how commit and reveal verification works, what a published draw record contains, and how an entrant can recompute the winner themselves.


Key Takeaways

  • A screenshot of a winning wheel is not evidence. It is an image, and images are easy to fake.
  • Commit and reveal fixes the order of operations: the seed is committed before entries close, and revealed only after the draw runs.
  • A published draw record contains the entry list, the odds, the seed, the algorithm and the winner, so anyone can recompute the result.
  • The certificate is a shareable summary of a draw. The verification link is where the numbers can actually be checked.
  • Verification proves the draw was not tampered with. It cannot prove the entry list was honest in the first place.

Every online giveaway ends the same way. The host posts a name, and a section of the audience quietly assumes it went to a friend. They are usually wrong, and they have no way to find out. The host has no way to show them either, because the usual evidence is a screenshot of a wheel, and a screenshot is a picture that anybody could have made in a minute.

This is a solvable problem, and it does not require anyone to trust the host. It requires publishing enough information, in the right order, that a sceptical entrant can rerun the draw themselves and land on the same winner.

Why the order matters more than the maths

The temptation is to publish everything at the end: here is the seed, here are the entries, here is the winner, go and check. That proves almost nothing. If the host picked the seed after seeing the entry list, they could have tried thousands of seeds until one produced the answer they wanted, then published that one. Everything would check out perfectly.

So the sequence is the whole mechanism. The host publishes a cryptographic hash of the seed while entries are still open. That hash is a commitment: it reveals nothing about the seed, but it makes the seed impossible to change later without the hash no longer matching. Entries then close and the entry list is frozen and hashed too. Only then is the seed revealed and the draw run.

What ends up on the record

A completed draw page publishes everything an independent checker needs, with nothing held back:

  • The complete entry list, exactly as it stood when entries closed.
  • Every entrant's odds, so weighted draws are visible rather than implied.
  • The commitment hash, published before entries closed.
  • The revealed seed, published only after the draw ran.
  • The exact algorithm, named and documented, so there is no ambiguity about how the seed becomes a winner.
  • The winner.

There is a button on the page that recomputes the winner inside your own browser and tells you whether it matches what was published. If you would rather not trust our button either, the whole record downloads as JSON and the algorithm needs nothing more exotic than a standard hash function to reproduce.

Check a draw for yourself

Paste a draw link and recompute the winner in your own browser.

Open the verifier →

The certificate, and what it is not

Every completed draw can be downloaded as a one page PDF certificate. It records the draw ID, the date and time, the number of entries, the winner, and the published hashes. It is genuinely useful: sponsors want something to file, prize claims want something to attach, and a link in an email is easy to ignore.

It is worth being blunt about what it is, though. A PDF is a document, and documents can be edited. The certificate is a convenient summary of a draw, not the proof of one. That is exactly why it carries the draw ID and the verification address on its face: a reader who does not want to take the document at its word can put it down and go and check the numbers at the source.

What this does not prove

Any fairness claim that does not state its limits is marketing. Here are the limits.

Verification proves that the draw over a given entry list was not tampered with. It does not prove the entry list was honest. A host who quietly adds their own second account before entries close ends up with a draw that verifies perfectly, because the dishonesty happened upstream of anything the cryptography can see. The defence there is social rather than mathematical: publish the entry list while entries are still open, so the people on it can check that the people on it are real.

It also does not hide the outcome from the host during the draw itself. If you need the result concealed until a reveal moment, that is a different mechanism with different tradeoffs, and it is worth knowing which one you are actually using.

A workable routine

  1. Announce the rules, the prize, the closing time and any weighting before you open entries. Weights that appear afterwards read as favouritism even when they are not.
  2. Publish the draw and its commitment hash while entries are still open, and share that link with entrants.
  3. Close entries at the announced time. The list is frozen and hashed at this point, so late additions are impossible rather than merely discouraged.
  4. Run the draw. The seed is revealed and the winner is computed from published values.
  5. Announce the winner with the verification link, not a screenshot. Attach the certificate if a sponsor needs a document.

The point of all this is not that your audience will check. Most of them never will. The point is that they could, and that you handed them the means to do it without being asked. That is what separates a draw people believe from a draw people merely accept.

Frequently asked questions

Why is a screenshot not enough proof?
Because a screenshot is a picture, and a picture can be edited in a minute by anyone. It also shows a single moment rather than a process, so it says nothing about how the entry list was built, whether names were added afterwards, or how many times the wheel was spun before a result the host liked came up.
What is commit and reveal?
The host publishes a cryptographic hash of the random seed before entries close. The seed itself stays secret until the draw runs. Afterwards the seed is revealed, and anyone can confirm that hashing it produces the value published earlier. Because the commitment was made before the entries were known, the host could not have chosen a seed to suit a favoured entrant.
What does the verification page actually show?
The full entry list, every entrant's odds, the commitment hash, the revealed seed, the exact algorithm used, and the winner. There is also a button that recomputes the winner inside your own browser and tells you whether it matches, plus a JSON download so you can check it with your own code.
What is the certificate for?
It is a one page PDF summary of a completed draw: the draw ID, the timestamp, the entry count, the winner, and the published hashes. It is convenient for sending to a sponsor or attaching to a prize claim. It is not the proof itself. A PDF is a document and documents can be edited, which is why the certificate carries the draw ID and the verification URL so a reader can leave it behind and check the source.
What does verification deliberately not prove?
That the entry list was honest. If a host quietly adds their own alt account before entries close, the draw over that list is still perfectly verifiable, and the fraud sits upstream of anything cryptography can see. Verification proves the draw was not rigged after the fact. Publishing the entry list before you close it is what covers the rest.
Do entrants have to be named publicly?
Only if you choose. In privacy mode the names are replaced with anonymous IDs before anything is stored or published. The odds and the result stay exactly as checkable, and only the host holds the mapping back to real people. This matters for school raffles and for any draw involving minors.