Check the draw yourself

You do not have to take anyone's word for who won, and that includes ours. The number that decides it comes from a public source we have no control over. This page fetches that number from the source in front of you and redoes the whole calculation inside your own browser.

How it works

  1. When the board opens, the app rolls a secret key and publishes a fingerprint of it (a SHA-256 hash). The key itself stays sealed.
  2. When selling stops, the roster is frozen. The exact list of paid squares is published with its own fingerprint, and the app names a future moment whose random value will decide the winner. That value does not exist yet. Not for us, not for anyone.
  3. At that moment the public beacon publishes its number. The app hashes the key, the frozen roster and that number together, and the result points at one square.
  4. Then the key is published. Hash it, and it has to match step 1. Fetch the beacon value from the source yourself, and it has to match. Redo step 3, and it has to land on the same square.

The middle step is the one that matters. The roster is locked before the deciding number exists, so there is no moment where anyone can see the number and still change who is in the hat.

Where the number comes from

The beacon is drand, run by the League of Entropy: a group of independent organisations including Cloudflare, Protocol Labs and several universities. It publishes a fresh random number every three seconds and every one of them stays public forever. No single member can choose the output, and none of them has heard of this waffle.

The app will not accept a round unless at least two independent mirrors return byte-identical values, and unless the random value is the SHA-256 of that round's signature, which is how drand defines it.

The event log

Every event on this site - a square claimed, a payment confirmed, the roster locked, the draw itself - is hashed together with the one before it. Editing or removing any of them breaks every hash that follows. Screenshot the head below and you have a checkpoint nobody can rewrite past.

Check it by hand

Paste any published draw and the maths runs locally in your browser. Nothing is sent anywhere.

Read the code

The draw is one small file, and it is the same file on the server and in this page. Nothing is hidden behind a build step.

/assets/js/fairdraw.js