Verifier · Provably fair

Provably fair verifier — check crash, Mines & Plinko rounds

Paste a server seed, client seed and nonce and recompute the round yourself with HMAC-SHA256 — no server round-trip, no account. Works with our documented reference scheme; see below for what that does and doesn't prove.

✓ Math checked · Updated · How we calculate
Leave blank if you only have the revealed seed.
1 to 32 rows.
Hash check
Match ✓
add850c92de9586e9c8be1cfeb1a9688779c8ed18a934f4376e5a88c00376f39
Crash bust
4.26×
nonce 0

HMAC message: hero:0:0

HMAC-SHA256(serverSeed, message), block 0, hex: —

First 13 hex chars (h, 52 bits): c5bb1831a70b8

bust = max(1, floor(100·(1−e)·2^52 / (2^52 − h)) / 100) = 4.26×

Reference scheme §6 — not a copy of any specific provider's algorithm · methodology

Crash bust for the next 10 nonces with the same seeds
NonceCrash bust

Commit, reveal, verify

Provably fair systems run in three steps. First, commit: before you play, the operator publishes the hash of a server seed it has already chosen but not revealed — usually SHA-256, recorded somewhere you (or anyone) can point back to later. Second, play: each round combines that hidden server seed with a client seed (yours, or one generated for you) and a nonce that counts up by one every round, producing the outcome through a fixed formula. Third, reveal and verify: later, typically when you rotate to a new server seed, the old one is published. Hashing it should reproduce the commitment from step one, and re-running the formula should reproduce every round you played.

A failed check — a computed hash or result that doesn't match — is a mismatch, not automatic proof of cheating: it can just as easily come from a typo in a seed, the wrong nonce, a hash that was never actually published in advance, or checking a round from a different scheme (wrong byte layout or formula) with this tool. Treat a mismatch as a reason to double-check your inputs and the scheme first, and as evidence of tampering only once those are ruled out — ideally against a commitment you (or an independent third party) can show was recorded before the round was played.

The server seed is the half only the operator knows until reveal — it is what keeps results from being predictable in advance. The client seed can stop the operator from quietly picking a server seed that favours the house for a specific player, but only under two conditions: the hash commitment has to be recorded somewhere verifiable before the round, and the client seed has to be chosen independently of that commitment (ideally by you, after the hash is already public) rather than supplied or overwritten by the operator afterwards. The nonce is a round counter: each new nonce feeds a different message into the HMAC step below, so it produces a separate result alongside the same two seeds — it doesn't make results unpredictable on its own, and reusing the same seeds and nonce will always reproduce the same result (that repeatability is expected, not a flaw).

What HMAC-SHA256 does

HMAC-SHA256 takes a secret key (the server seed) and a message (clientSeed:nonce:counter) and produces a 32-byte block that is deterministic but looks like noise unless you know the key. Our verifier builds that message with counter 0, computes the HMAC, and converts the bytes to hex for the step shown above. The block (and further blocks if a round needs more bytes, with the counter incremented) is then read as big-endian 32-bit integers and fed into the result formula — nothing here is hidden or randomised beyond the server seed itself.

cashoutodds reference scheme v1 (documented)

Because real providers rarely publish full specifications, this verifier implements and documents its own open scheme so every step is checkable:

  • Crash: take the first 13 hex characters of block 0 as a 52-bit integer h, then bust = max(1, floor(100·(1−e)·2^52 / (2^52 − h)) / 100), where e is the house edge — this verifier always uses e = 3% (0.03), the same value as our simulators. Larger h values push the bust higher; the formula is exact integer arithmetic, not floating point.
  • Mines: mine positions are drawn with rejection-sampling Fisher–Yates over the remaining tiles — each 32-bit integer from the stream is only accepted if it falls below the largest multiple of the tile count, so every remaining tile stays equally likely and there is no modulo bias.
  • Plinko: each row consumes one 32-bit integer and reads only its top bit — 1 means right, 0 means left — because a 32-bit range splits into two exactly equal halves, again with no bias.

Every one of these rules is reversible: given the revealed server seed, client seed and nonce, you (or anyone) can recompute the exact same bust, mine layout or Plinko path shown above — that's what this tool does, entirely in your browser. Seeds can be typed in directly or passed through the URL fragment (the part after #), which your browser never sends to a server — nothing is transmitted anywhere.

What verification proves — and what it doesn't

A passing check means: the claimed result is consistent with the seed the operator committed to before the round, using the scheme this tool implements. It rules out the server silently swapping in a different, more favourable-to-the-house outcome after it already knew your bet — provided the commitment hash was actually recorded somewhere before the round (not just claimed afterwards) and the scheme matches. A failed check is a mismatch, not proof of manipulation by itself — a wrong input, a mistyped nonce, or checking a third-party round against the wrong scheme can all produce the same "no match" result that genuine tampering would. It does not remove the house edge, does not mean the payout table is generous, and is not a guarantee of winning — a game can be flawlessly provably fair and still return less than it takes in, by design. If you're asking whether a specific branded game is "rigged," the honest answer is: provably fair checking (when a provider implements it correctly, and when you're checking it against that provider's own scheme) answers the narrow question of result-vs-seed consistency, not the broader question of expected value, which you can estimate instead with our expected loss calculator or crash simulator.

Try the round shown by default — server seed cashoutodds-demo-v1, client seed hero, nonce 0 — it's the same first round used in the homepage demo. The hash above is checked live against the revealed seed, and the bust, mine layout or Plinko path recomputes from scratch in your browser.

Test vectors

Three fixed inputs and their outputs from the engine, so you can sanity-check an independent implementation against ours:

CheckFunctionInputsOutput
Crash bustcrashResultserverSeed "cashoutodds-demo-v1", clientSeed "hero", nonce 0, edge 3%bust 4.26× — h = c5bb1831a70b8
Mines placementminesResultsame seeds, tiles 25, mines 3mines at 2, 11, 22 · order 2→11→22 · 3 u32s drawn
Plinko dropplinkoResultsame seeds, rows 16slot 11 · path RRLRRLRLRRRRRLRL

More tools: crash simulator · Mines odds calculator · Plinko distribution · risk of ruin calculator · methodology.

FAQ

What does "provably fair" actually prove?

It proves that a published result is consistent with a seed the operator committed to before the round started — it cannot prove the game is fair in the sense of good odds. In our reference scheme, the operator reveals serverSeed "cashoutodds-demo-v1" matching a hash shown beforehand (match: yes here), and anyone can recompute HMAC-SHA256(serverSeed, clientSeed:nonce:0) to check the crash bust, mine positions or Plinko path. It says nothing about the house edge baked into the payout table.

Is Aviator rigged?

We cannot test Aviator or any specific branded game here — each provider publishes (or hides) its own seed scheme, and this tool only recomputes results for the cashoutodds reference scheme v1 documented below; matching field names (server seed, client seed, nonce) on a real-money site is not evidence it uses the same byte layout or formula — you would need that provider's own published verifier to check a real round. What provably fair checking can show, for any game that implements it correctly, is that a round's outcome matches the seed committed to in advance — ruling out the server changing results after the fact. It cannot show the payout table is generous, that the house edge is small, or that the game is "beatable". A game can be perfectly provably fair and still have a high house edge; the two questions are independent.

What are server seed, client seed and nonce?

The server seed is a secret value the operator commits to (usually by publishing its SHA-256 hash) before you play, then reveals later — often when you rotate seeds. The client seed is a value you can set, or one the site generates for you — but a client seed being "generated for you" is not on its own a guarantee against a server picking a favourable seed: that only holds if the client seed is chosen independently of the operator and fixed after the hash commitment is already public, and the commitment was actually recorded somewhere checkable in advance. The nonce is a counter that increases by one each round, feeding a different HMAC input into the formula each time — this changes the result in general, but outcomes are not guaranteed to be distinct, and reusing the same seeds and nonce will always reproduce the same result.

What does HMAC-SHA256 do here?

It combines the secret server seed with the public clientSeed:nonce:counter message into a 32-byte block that looks random but is fully determined by its inputs. Bytes from that block (and more blocks if needed) are read as big-endian 32-bit integers and fed into the crash, Mines or Plinko formula. The result depends on all of serverSeed, clientSeed and nonce together, plus the formula itself — changing any one of them changes the output, and the hash commitment only pins the server seed down. Changing the server seed after it was committed is detectable (it no longer matches the published hash), but the client seed alone does not stop someone who controls it from steering the result unless it was chosen independently of the operator and fixed after the commitment — and unless the inputs actually used in a round are recorded so they can be checked against what you played.

Do real crash, Mines or Plinko games use this exact formula?

No. Every provider designs its own byte layout, rejection-sampling rules and multiplier curve, and most do not publish the full specification. This verifier documents and recomputes one openly-specified scheme — "cashoutodds reference scheme v1" — so the math is fully auditable. Seeing matching field names (server seed, client seed, nonce) on a real-money site does not mean that site uses this scheme — the actual byte order, hashing steps and formula can differ even when the inputs look the same. It cannot check a round from a game that uses a different scheme; use it to understand the mechanism, not to re-verify a specific provider's round unless that provider publishes this exact scheme.

18+ · Play-money education only. cashoutodds is not a casino, takes no bets and does not recommend gambling. If gambling stops being fun, get help.