skulk-fair-v1
Nobody picks the Seeker. You can check.
Every official round commits to a secret seed before entries open and reveals it when the hunt begins. With the seed and the frozen player list, your browser recomputes the Seeker, the spawn order and the overtime halt order. No trust in us.
01
Commit
Fingerprint published
Round announced
02
Enter
Players qualify
Entries open
03
Freeze
List locked + sorted
Entries close
04
Reveal
Seed published, Seeker derived
~60 s before start
05
Verify
Anyone recomputes
Forever
The exact algorithm
Isomorphic code: the match server and this website run the same functions. No Math.random anywhere in the draw.
- secretSeed
32 cryptographically random bytes, 0x + 64 hexGenerated when the round is created. Stored encrypted server-side, never shown before the reveal.
- seedCommit
0x + hex(SHA256(bytes(secretSeed)))Published on the round page the moment it's announced — before anyone can enter.
- ordered
participant ids sorted by UTF-16 code unit, duplicates rejectedThe qualified entrants plus AI seats, frozen when entries close. Never connection order.
- roundSeed
SHA256(utf8("skulk-fair-v1\n" + lower(secretSeed) + "\n" + roundId + "\n" + ordered.join("\n")))Mixes the secret with the exact list, so no seed can be chosen to favour anyone.
- seekerIndex
uint256(roundSeed) mod ordered.lengthThe Seeker is ordered[seekerIndex].
- HashDRBG
block_i = SHA256(bytes(roundSeed) ‖ utf8(label) ‖ u32be(i))Big-endian u32 words; integers in [0,n) by rejection sampling, no modulo bias. Labels: spawn, zones, map-variant.
- event chain
h[n] = SHA256(h[n-1] ‖ canonical(event[n])), h[-1] = 32 zero bytesEvery match event is hash-chained; the live server signs the final hash with Ed25519. Edit one event and the chain breaks.
✓ We can't pick the Seeker
The seed is fixed before entries open. Changing it breaks the published commitment.
✓ Players can't game it
The round seed depends on the whole frozen list. Joining late or reordering changes nothing you control.
✓ Results can't be rewritten
Events are hash-chained. The site rejects any result whose chain doesn't reproduce.
Verify a round
| Round | Commitment | Status | |
|---|---|---|---|
| #002 | 0xa9bb263e16…29a373 | Final | Recalculate → |
| #001 | 0xa069e79547…cfd84e | Canceled | View → |