What provably fair means, and what it does not prove
“Provably fair” is a cryptographic commitment scheme. Before you bet, the casino commits to a secret value it cannot change later. After you bet, it reveals that value and you can recompute every result yourself. When it is implemented properly, it proves one specific thing: the casino did not pick the result of your round after seeing your bet. It does not prove much else, and the difference matters.
The three ingredients
- Server seed. A random secret generated by the casino. You are shown only its SHA-256 hash while it is in use.
- Client seed. A value you control. A good implementation lets you set it to anything you like.
- Nonce. A counter that increases by one with every bet you make on that seed pair, so each bet gets a different result from the same two seeds.
How the commitment works
- The casino generates a server seed and shows you
SHA-256(server seed). A hash is one-way: you cannot work out the seed from it, but any change to the seed would produce a completely different hash. - You set your client seed. Because the server seed is already fixed, the casino cannot tailor it to yours.
- For each bet, the result is computed from the server seed, client seed and nonce with a keyed hash function, HMAC-SHA256.
- When you rotate (change) the seed pair, the casino reveals the old server seed. You hash it yourself and check the hash matches the one shown earlier, then recompute any bet made with it.
From hash to game result (Stake-style)
The details vary by casino. The most widely copied scheme is the one published by Stake, and it is the one our fairness verifier implements. Other casinos may use a different message format or conversion, so treat the following as one well-documented example, not a universal standard.
bytes = HMAC_SHA256(key = serverSeed, message = clientSeed + ":" + nonce + ":" + round) float = b0/256 + b1/256^2 + b2/256^3 + b3/256^4 (4 bytes -> a number in [0, 1))
Each HMAC gives 32 bytes, enough for 8 floats. Games that need more (a Plinko ball crossing 16 rows, a Mines board with up to 24 mines) increase round to get further blocks of bytes. Each game then maps floats to outcomes with a published rule, for example:
- Dice:
floor(float × 10001) / 100, a roll from 0.00 to 100.00. - Limbo: a multiplier derived from the float with a 1% house edge applied, truncated to two decimals.
- Plinko: one float per row; below 0.5 the ball goes left, otherwise right. The slot is the number of right moves.
- Mines: floats pick tiles one by one from the remaining tiles (a Fisher-Yates style draw), so no tile is picked twice.
Because the mapping is public, the house edge of these games can be calculated exactly from the rules. That is a real advantage of in-house “originals” over opaque games. For more on the difference between house edge, RTP and volatility, see house edge vs RTP vs volatility.
What provably fair does prove
- The server seed was fixed before your bets, if you saw the hash beforehand.
- Each verified result follows deterministically from the seeds, nonce and published algorithm.
- The casino did not change a result after seeing your bet size or choice.
What it does not prove
- That third-party games are fair. Most slots and live dealer games are run by external providers. Their RNGs may be certified by testing labs, but you cannot recompute their rounds with seeds. A casino advertising itself as provably fair may only mean its own small set of originals.
- That the payout rules are what you think. Verification shows the outcome (a roll of 37.42, a slot index), not whether the payout table or multiplier you were paid matches the advertised rules. Check that separately against the game’s info screen.
- That the client seed was really yours. If you cannot set the client seed, or you never change the default, the casino could in principle have chosen a server seed that suits a known client seed. The commitment protects you fully only when you choose the client seed after seeing the hash.
- That every bet was recorded honestly. You verify the bets you check. Keep your own notes of nonces and results for the bets that matter.
- Anything about withdrawals. A perfectly fair game is worthless if winnings are not paid. That is measured differently: by requesting withdrawals and checking the on-chain transaction, as described in our methodology and in crypto casino withdrawal times.
Red flags in a fairness implementation
- No hashed server seed visible before play, or no way to reveal the seed afterwards.
- No option to set your own client seed.
- No public description of the algorithm, or a description that does not reproduce the results.
- A “verify” button that only works on the casino’s own site, with no way to check independently.
- Fairness claims applied loosely to games from external providers.
Try it yourself
The practical side, step by step, is in how to verify a casino round yourself. Our verifier runs entirely in your browser: the seeds you enter are not sent to us.
FAQ
Does provably fair mean the casino cannot win?
No. Provably fair games still have a house edge built into the payout rules. It means the casino cannot change a specific result after you bet, not that the game is favourable to you.
Are slots at crypto casinos provably fair?
Usually not in the seed-and-hash sense. Most slots come from third-party providers whose random number generators run on the provider’s servers and are certified by testing labs. You cannot recompute those rounds yourself.
Why does the client seed matter?
If the casino chooses both seeds, it could in principle search for a server seed that produces bad results for a known client seed before committing to it. Setting your own client seed after the server seed hash is shown removes that possibility.
Is the algorithm the same at every casino?
No. Many casinos follow the scheme popularised by Stake, but message formats, byte-to-number conversion and game rules differ. Always check the casino’s own fairness page for its exact algorithm.
Related guides
18+. Gambling involves risk of loss. Help and self-exclusion.