Provably Fair Verifier.
Reproduce any settled prediction-game's outcome from its committed seeds and confirm the revealed server seed matches the hash that was published before play began. This page never talks to FiftyFifty's servers — paste the audit data, press verify, and watch the math resolve in your own machine.
Inputs
From a settled game in the FiftyFifty app, open the Provably Fair panel and copy each value here. Or follow a "Verify this game" link to prefill these fields automatically.
Specification
Every FiftyFifty prediction game commits a 32-byte server seed at creation. The SHA-256 of that seed is published immediately so the server can't change the seed afterwards. Both players also contribute a 64-character hex client seed. The game outcome is then derived deterministically from these inputs:
1HMAC_SHA256(
2 key = serverSeed,
3 data = `${fairnessVersion}|${gameId}|${creatorSeed}|${opponentSeed}|${purposeTag}:${counter}`
4)
The counter starts at 0 and increments per 32-byte block. Bytes from the stream are read big-endian and reduced to uniform integers via mask-and-reject sampling — no modulo bias. Each game type uses a distinct purpose tag so streams never collide:
At settlement, the server seed is revealed — the same 32 bytes whose hash was published before play began. Anyone can then re-run the algorithm and confirm the outcome wasn't altered after the fact.
Trust Model
Don't trust this page. The whole point is that you don't have to.
-
A
Read the source. View Source on this page, or open
verify.jsin the repo. Around 100 lines wrapcrypto.subtle— the rest is form handling. -
B
Re-implement the algorithm in your favorite language. HMAC-SHA256 plus mask-and-reject sampling is small enough to write in an afternoon. Run a settled game's seeds through your version.
-
C
Compare. If your independent derivation disagrees with what FiftyFifty stored for the game, that's a critical bug — please report with the Game ID.