What you can check, and what you can't

Provably fair draws

In short

Get Hot Drop publishes a hash of a lot's seeds before the first seat is taken and reveals each round's seed right after its draw, so anyone can replay every spin. This proves a result wasn't changed afterwards. It doesn't prove the seed was random: we make the seeds, and nothing from outside is mixed in yet.

How it works

Commit, play, reveal.

Step 1

Commit

When a lot is created we fix a secret seed for every round and put their hash on the lot page. A hash is a fingerprint: it can't be turned back into the seed, and no other seed matches it.

Step 2

Play

Players take seats and boost. The seats and their slices are public, and the formula that turns a seed into a spin is fixed.

Step 3

Reveal

Right after each round we publish its seed. Anyone can hash it, compare it with the fingerprint and work the spin out again.

If a revealed seed doesn't hash to the fingerprint, or the formula gives a different winner, the draw was tampered with, and anyone can see it.

Check a finished lotThe lot page replays every spin in your browser.

What it proves, and what it doesn't

You can check

  • The result wasn't changedThe seed was fixed first, and its hash was public before the first seat.
  • The wheel you watched is the drawThe replay rebuilds the spin from the seed and the public slices.
  • The slices were the players' ownAfter a draw every seat, slice and weight of the round is public.

You can't, yet

  • That the seed was randomWe make the seeds and hold them until the reveal, so the check can't rule out our knowing a result before a round.
  • An outside auditThe method is public, but no outside lab certifies the draws.

The usual fix for the first gap is a public randomness beacon: a number nobody controls, mixed into the seed after entries close. Mixing in the drand beacon is planned and not built yet.

A worked example

A made-up final of three players. Seat 11 bought a boost, so its slice is wider.

Seat 4plain
Seat 11one boost unit
Seat 23plain
The wheel is 35,000 units, laid out flat in seat order. Seat 4 holds 0 to 9,999, Seat 11 holds 10,000 to 24,999, Seat 23 holds 25,000 to 34,999. The roll is 15,574, so seat 11 wins.

Check the roll. Hash the final's revealed seed with the round and the spin number, keep the first 13 hex digits, and take the remainder:

printf '%s' "acce7f7c8f2d6b60c5ddc40ff70dd8e212c0390700d2c4b7954afec9b1b6e49b:3:1" | shasum -a 256 | cut -c1-13
# 631753ae94886

python3 -c 'print(int("631753ae94886", 16) % 35000)'
# 15574

Check the seed. Hash the round 3 seed three times. The last line must be the seed hash the lot page showed before the first seat:

s3=acce7f7c8f2d6b60c5ddc40ff70dd8e212c0390700d2c4b7954afec9b1b6e49b
s2=$(printf '%s' "$s3" | shasum -a 256 | cut -d' ' -f1)
s1=$(printf '%s' "$s2" | shasum -a 256 | cut -d' ' -f1)
printf '%s' "$s1" | shasum -a 256 | cut -d' ' -f1
# 05dd3dba3100c9e1aaa8719f07a2cb2253a3392b0634072269adbd244cafbc33

A seed is hashed as the text you see, with no line break after it. On Linux, sha256sum does the job of shasum -a 256. A real lot is checked the same way with the seeds from its page.

The formula

seed_k     = sha256(seed_k+1)          one seed a round, chained backwards
seed hash  = sha256(seed_1)            on the lot page before the first seat
roll(s, n) = int(first 13 hex of sha256(seed_k + ":" + k + ":" + s)) mod n

Slices lie in seat order, each as wide as its weight. In a cut round the wheel stops under a window that starts at roll(2, total) and is min + roll(1, max − min + 1) units long; every slice it touches goes through. In the final the slice holding roll(1, total) wins.

Revealing round 1's seed tells you nothing about round 2's, because a hash can't be run backwards.

Five questions for any "provably fair" site

  1. Is the commitment public before you pay? A hash published after entries close proves nothing.
  2. Is the list of entries public? A fair roll over a list you can't see doesn't tell you your chance.
  3. Can you replay the result without the site's own tool? The formula should be written down and run anywhere.
  4. What does the proof cover? It shows the roll wasn't changed, not that the odds or the prices are fair.
  5. Who chose the seed, and is anything outside mixed in? A beacon, a player's own input or an auditor each close a different gap.

Our answers: yes, on the lot page; yes, after each draw; yes, the formula is on this page; the draw only, not whether a seat is worth its price (that is on the odds page); we choose the seed, and nothing outside is mixed in yet.

Questions

What does provably fair mean?
The operator of a draw commits to its random input before anyone enters, usually by publishing a hash of a secret seed, and reveals the seed afterwards, so anyone can work the result out again and see that it wasn't changed.
Can Get Hot Drop know who will win before a round?
The check can't rule it out: we hold the seeds until each one is revealed. What the commitment guarantees is that we can't swap a seed once seats and boosts are in.
Do I need to be a programmer to check a draw?
No. Open a finished lot and press "Check the draw": the page replays every spin in your browser and marks what matched.
Pick a lot

Every lot shows its seats, its rounds and the seat price before you join

Browse lots