How Verification Works
What a verified draw proves - and what it doesn't
In Plain English
Locking the Entries
When you prepare a draw, every ticket number in the competition is listed in order and a fingerprint of that list is published. Anyone can download the list straight away and check their tickets are on it. If a ticket is added or removed afterwards, the draw refuses to run.
The Secret Number
Yeti Live Draw also generates a long secret random number (the server seed) and publishes only its fingerprint - the commitment. The number can't be swapped later without the fingerprint changing.
Public Randomness
A future round of drand is fixed at the same time. drand is a public randomness beacon run by the League of Entropy - a group of independent organisations including Cloudflare, Protocol Labs and several universities - that publishes a new random value every 3 seconds. The value for your round doesn't exist until your draw time, so nobody knows it when the draw is prepared.
The Draw
At draw time, drand's value for that round becomes the live seed. It's mixed with the secret number using a standard cryptographic function (HMAC-SHA256) to pick each winner from the locked list, without bias.
The Reveal
The secret number is published. Anyone can check it matches the commitment, check the live seed with drand directly, and re-run the draw to get the same winners.
What a Verified Draw Proves
- The entries used were exactly the list fingerprinted and published when the draw was prepared.
- The secret seed was fixed before the draw and wasn't swapped afterwards.
- The live seed is drand's public randomness for the round published in advance - not a value anyone chose.
- Re-running the published algorithm on those inputs gives exactly the published winners.
Together this means that once a draw is prepared, the site operator can't predict the winners or choose inputs to produce a particular result. The operator can see the secret seed (it's stored on your server until the reveal), but the result also depends on drand's value, which doesn't exist yet.
What It Doesn't Prove
- That the entry list matches every ticket you sold. Verification covers the list that was locked in. Your YetiRaffles records, order history and the downloadable entry list let entrants check their own tickets are on it before the draw.
- That a draw was never cancelled. A draw that hasn't been run can be cancelled - for example after the randomness is published - and a new one prepared. Cancelled draws always stay on your public results page with the time they were cancelled, so this is visible to everyone.
- Draws using a typed-in live seed. If you choose "Typed in on camera", the operator supplies the live seed and also knows the secret seed, so the draw can't prove the operator didn't choose the seed to steer the result. These draws are labelled as organiser-supplied everywhere they're shown.
- That drand is honest. drand's randomness is produced jointly by many independent organisations and is publicly verifiable with drand's own tools. The verifier fetches it from drand's servers; it doesn't re-check drand's signatures itself.
The Technical Detail
- Entries fingerprint:
SHA-256of every ticket number in ascending order, joined with commas - computed and published when the draw is prepared - Server seed: 32 random bytes from PHP's
random_bytes(), shown as 64 hex characters. Commitment:SHA-256(server seed) - Live seed: the
randomnessvalue of drand quicknet (chain52db9ba7...e971) for a round at least 60 seconds after preparing, fetched fromapi.drand.sh(or its Cloudflare mirror) and checked to equalSHA-256of that round's signature - For winner k (from 0), attempt c (from 0):
HMAC-SHA256(key = server seed, message = "liveSeed:k:c") - The first 13 hex digits give a 52-bit number v. If v is at or above the largest multiple of the number of remaining entries below 252, try the next attempt (this removes modulo bias). Otherwise the winner is entry v mod n, which is then removed so no ticket wins twice.
The same algorithm runs in the browser verifier, which loads the draw from your site and the live seed from drand, so results are checked independently of your server.
Need Help?
If you have questions or need assistance, check out our Troubleshooting Guide or FAQ.