Module 2: Giveaways and prizesLesson 4 of 95 min read
Running a provably fair giveaway
Every giveaway ends with the same comment: rigged. A screen recording of a wheel does not settle it, because viewers cannot see what happened before you pressed record. A provably fair draw is built so that the host cannot choose the winner, and anyone can check that afterwards with nothing but the published data.
Step 1: freeze the list with a fingerprint
When you press Lock list and draw, the giveaway picker turns the whole list, in order, into a SHA-256 fingerprint: a 64-character code. Change a single letter, add a name or swap two lines and the fingerprint becomes completely different. Posting the fingerprint is like sealing the list in an envelope everyone can see.
Try it in the demo below. Type a list, note the fingerprint, then change one letter.
Step 2: use randomness from the future
The host must not be able to pick a lucky moment. So at the instant you lock the list, the page chooses a drand round that has not been published yet, a few seconds ahead. drand is a public randomness beacon run by the League of Entropy, a group of independent organisations that includes Cloudflare, EPFL, Protocol Labs and several universities. Its quicknet chain publishes a new random value every 3 seconds.
Each value is made from a threshold signature: many members must combine their key shares, and fewer than the threshold cannot predict or bias the result. Two valid signatures for the same round are always identical, so there is exactly one possible value per round.
Step 3: the winner is a calculation, not a choice
When the round arrives, the winner is computed from three things: the round number, its random value and the list fingerprint. The picker hashes them together and turns the result into a ticket number. It throws away results that would make low ticket numbers slightly more likely, a subtle bias called modulo bias, so every ticket has the same chance.
Because the calculation is fixed, the same three inputs always give the same winner, on any computer.
Honest limits
The proof shows the winner follows from this exact list and that round. It cannot prove the list contained every real entrant, so post the verify link soon after the draw. The page checks that the random value matches the signature hash, but it does not run the full signature check in your browser.
Step 4: publish the verify link
Copy verify link creates a link that holds the list, the round and the number of winners. Anyone who opens it fetches the same public round and recomputes the result. If the host had swapped a name or redrawn, the result would not match.
Share the link in the giveaway post or the stream description. That is what turns 'trust me' into 'check it yourself'.
Try it: same list + same seed = same winner
Change one letter in the list or in the seed and watch the fingerprint and the winner change. Change it back and the old result returns. That is what makes a draw checkable.
- List fingerprint (SHA-256)
…- Winner
- …
Open the giveaway picker, paste a few names and run a draw with a public proof.
Run a fair drawQuick check
Three questions. Pick an answer to see why.
What is a randomness beacon like drand?
Show the answer
Answer: A public service that publishes unpredictable random values on a fixed schedule drand publishes a new verifiable value every round, and no small group of members can predict or bias it.
Why must the drand round be one that has not happened yet when the list is locked?
Show the answer
Answer: So the host cannot look at upcoming results and pick a lucky one If the randomness were already known, the host could try different lists or moments until a friend won.
You change one letter in a locked list. What happens to the fingerprint?
Show the answer
Answer: It becomes completely different SHA-256 changes unpredictably with any edit, so a swapped or edited name is easy to spot.
Sources
- drand – Cryptography specification
- drand blog – Quicknet is live (3-second rounds)
- drand – League of Entropy
Last checked October 25, 2026