How competition draws work

Perfect Prizes uses commit–reveal randomness you can check yourself — no trust required. There are two related flows:

  1. Main prize draw — which ticket wins the competition’s main prize(s) after entries close.
  2. Instant-win ticket allocation — which pool ticket numbers your purchase receives (revealed in-game after checkout).

Main prize draw

Every prize draw competition (and the optional main draw on some instant-win comps) uses a competition-wide seed.

Step by step

  1. Seed commit — before the draw, we generate a secret seed and publish only its SHA-256 hash.
  2. Entries close — ticket purchases stop at the competition close time.
  3. Seed reveal — at draw time the original seed is published.
  4. Winning ticket(s) — we hash the revealed seed and map it to ticket number(s) between 1 and total tickets sold.
  5. Winners — the holder of each winning ticket number wins the prize for that rank.

Tickets are numbered 1 … N in the order they are sold. The draw only picks which position wins — it does not reshuffle who owns which number.

The formula

random seed  →  SHA-256  →  H (64 hex characters, public)
                            ↓
                  treat H as huge integer R
                            ↓
               winning ticket = (R % N) + 1

For multiple prize ranks we run a deterministic Fisher–Yates shuffle from the same seed (SHA-256(seed|perm|i)) so each rank gets a unique winning ticket.

What you can verify

  • The seed hash was published before the draw.
  • The revealed seed matches SHA-256(revealed) === H.
  • The winning ticket calculation matches the formula above.
  • The winner corresponds to the ticket ownership record.

Example — 10 tickets

If N = 10 and the hash interprets to integer 94231:

(94231 % 10) + 1 = 2 → ticket #2 wins.

On each competition page you will see the commitment log (seed hash and, after draw, revealed seed and winning ticket numbers).


Instant-win ticket allocation

Instant-win competitions also use commit–reveal — but per order, when tickets are assigned from the prize pool.

Step by step

  1. Order seed commit — at checkout we generate a secret order seed and publish only its SHA-256 hash.
  2. Pool snapshot — before assigning that order, we freeze which ticket numbers are already taken.
  3. Pick each line — for line index 0, 1, 2… in the order:
    pickIndex = SHA-256(seed + ":" + lineIndex) mod remainingCount
    then take the Nth free slot in the pool.
  4. Seed reveal — when the order finishes assigning, the seed is revealed so the same picks can be replayed.
  5. Play / claim — you reveal prizes in the instant-win game; the math above is what chose your ticket numbers.

What you can verify

  • On a closed instant-win competition page: the public allocation proof (chronological orders + per-step pool map).
  • On your order (while signed in): the per-order assignment proof with the same formula.
  • Any main draw on that competition still uses the separate competition seed described above — not the order seeds.

Where to look on the site

  • Prize draw comps — seed proof panel on the competition page.
  • Instant-win comps (after close) — allocation proof section on the competition page.
  • Your purchases — order / purchase history links into play and proof details where available.