Provably Fair Fantasy Draft Order

Commit → Reveal → Shuffle. This tool lets a commissioner pre‑commit to a secret Server Seed (by publishing its SHA‑256 hash), then later reveal the seed and generate a draft order using HMAC‑SHA256 with a public Client Seed + Nonce. Anyone can independently verify the result.

1) Commit (Pre‑announce the hash)

Hash = SHA‑256(ServerSeed). Share the hash before the draw. After the draw, reveal the seed; anyone can check that SHA-256(revealed) equals this hash.

2) Generate Draft Order (Reveal stage)

Chosen publicly (e.g., a timestamp, league name, or oracle). It mixes with the Server Seed so the commissioner can’t target an outcome.
Use 0 for the first draw; increment for re‑rolls.
Entries hash: — Using RNG: HMAC‑SHA256(ServerSeed, `${ClientSeed}:${Nonce}:${i}`)

Draft Order

No results yet. Enter seeds and teams, then click Generate Order.

3) Verify / Audit Checker

Anyone can validate the fairness by pasting the revealed Server Seed, the public Client Seed, the Nonce, and the exact team list. The checker will recompute the order deterministically.

No verification yet.

How the Provably Fair Shuffle Works

  1. Commit: The commissioner creates a secret Server Seed and publishes its SHA‑256 hash (not the seed itself). This prevents the seed from being changed later without detection.
  2. Client Seed: The league publicly agrees on a Client Seed (e.g., a UTC timestamp or phrase). This ensures the commissioner cannot target a specific outcome, because they can’t predict the client value at commit time.
  3. Reveal & Shuffle: After commit, the commissioner reveals the Server Seed. We generate random numbers using HMAC‑SHA256(ServerSeed, `${ClientSeed}:${Nonce}:${i}`) and perform a Fisher‑Yates shuffle. The result is deterministic given the inputs.
  4. Verify: Anyone can recompute the SHA‑256(ServerSeed) to match the published hash and re‑run the shuffle with the same parameters to confirm the order is identical.