Provably Fair, Actually Explained — Verify Any Bet
How provably fair actually works: server seeds, client seeds, nonces and HMAC-SHA256, with the exact formulas each game uses — plus a free tool to independently verify any bet.
The problem provably fair solves
In a normal online casino you have to trust that the server generated a fair random number. You cannot see it, and nothing stops the operator from picking a result that suits the house. Provably fair replaces that trust with math: the outcome of every bet is committed in advance and can be independently re-computed afterwards by anyone.
Three ingredients
Every result comes from three values:
- Server seed — a secret random string the casino generates. Before you bet, you are shown only its hash (a fingerprint). The seed itself stays hidden until you rotate it, so the casino is locked in but can’t peek-and-adjust.
- Client seed — a string you control. Because you can change it at any time, the casino can’t have pre-computed favourable results.
- Nonce — a counter that increases by one with every bet on the same seed pair, so each bet produces a different result from the same seeds.
The one line of math
The three values are combined with HMAC-SHA256 — a standard cryptographic function that mixes a key and a message into a fixed 64-character hexadecimal hash:
hash = HMAC_SHA256( serverSeed , "clientSeed:nonce" ) That hash is deterministic: the same inputs always produce the same hash, and no one can run it backwards. Each game then reads numbers off the front of the hash.
How each game reads the hash
These are the actual formulas Lumenbet uses — the same code that runs in the verifier below.
Dice
Take the first 13 hex characters (52 bits), read them as an integer, and map into 0.00–99.99:
roll = ( int(hash[0..13]) mod 10000 ) / 100 Crash & Limbo
The first 8 hex characters become an integer h; the multiplier is derived with a fixed
3% house edge (minimum 1.00×, capped at 1000×):
result = max( 1 , min( (2³² / (h + 1)) × (1 − 0.03) , 1000 ) ) Coin flip
Even integer → Heads, odd → Tails:
side = int(hash[0..8]) mod 2 === 0 ? HEADS : TAILSVerify it yourself in three steps
- Before betting, note the server-seed hash shown on your fairness settings . That is the commitment.
- Rotate your seed pair. This reveals the old server seed. Hash it yourself and confirm it matches the commitment you saw in step 1 — proof the seed wasn’t swapped.
- Reproduce any result by pasting the revealed server seed, your client seed and the bet’s nonce into the verifier above. It will match what you were paid on.
Provably fair is not the same as “no house edge”
A common misconception: provably fair proves a result wasn’t manipulated; it does not make a game even money. The house edge is a fixed, visible parameter (3% on Crash, 2% on Dice) baked right into the formula above. Fairness and edge are separate ideas — you can verify the first while the second stays exactly what the game states.
Frequently asked questions
What does “provably fair” mean?
It means the outcome of every bet is committed before you play and can be re-computed by anyone afterwards. The casino cannot change a result after the fact without the hash it published no longer matching.
Can the casino cheat a provably fair game?
Not without detection. The server seed is fixed and its hash is shown before you bet. Changing the server seed to alter your result would change that hash, which you already saw — so the tampering is visible.
How do I reveal the server seed to verify?
Rotate (change) your seed pair. Rotating reveals the old server seed, which you then hash yourself to confirm it matches the hash shown before your bets — and feed into the verifier to reproduce every result.
Does provably fair remove the house edge?
No. Provably fair proves the result was not manipulated; it does not make a game break-even. The house edge is a transparent, fixed parameter baked into the formula (3% on Crash, for example).