Every provably fair result is computed from three inputs: a server seed the site picks and keeps secret, a client seed you can set, and a nonce that counts your bets. The server seed is locked in with a published hash before you play, the client seed makes sure the site can't tailor that secret to you, and the nonce makes each bet in a session different. Change any one of them and the result changes completely.
Below, each input gets its own section, then a table shows them working together with real HMAC-SHA256 output. All seeds are examples made up for this guide; every hash was computed in Python and can be reproduced on our verifier.
The server seed: the site's secret
The server seed is a random string generated by the site. While it's active, you never see it. You see only its SHA-256 hash, called the commitment (sometimes "hashed server seed").
server seed (secret while active): 9f2c4e1a7b3d8e6f0a5c2b9d4e7f1a3c
commitment shown to you: a5e39de9361cb47dd6ccdf84bb0cbeff1e402575f217b91bb2e560cfe1ac582dWhy hide it? Because anyone holding the server seed, client seed and nonce can compute the result. If you saw the server seed in advance, you'd know every upcoming roll.
Why publish the hash? Because it pins the seed down. After you rotate seeds, the site reveals the old server seed; you hash it and compare. A match means it's the same seed that was active during your bets. This is the commitment step explained in what provably fair means.
The client seed: your contribution
The client seed is a string on your side. Sites usually generate one for you, but a well-built system lets you replace it with anything you like before you play.
It exists for one reason: without it, the site could choose a server seed after testing which ones produce outcomes it likes. Because your client seed goes into the formula and the server seed was committed before you set yours, the site can't pre-select a seed against inputs it didn't know.
Setting it yourself is the strongest version of this protection. A client seed the site picked and you never changed still works mechanically, but you're relying on the site not having planned around it.
The nonce: the bet counter
The nonce is a number that starts at 0 (some systems start at 1) and goes up by one with every bet made on the same seed pair. Without it, every bet with the same two seeds would produce the identical result.
Your bet history should show nonces in order with no gaps or repeats. A gap means a result you weren't shown; a repeat means a result was reused.
Who controls what, and when you see it
| Input | Set by | Visible during play | Revealed | Purpose |
|---|---|---|---|---|
| Server seed | Site | No — only its hash | After you rotate seeds | Unpredictable randomness |
| Server seed hash | Site (derived) | Yes, before your first bet | Already public | Locks the server seed in |
| Client seed | You (or default) | Yes | Already public | Stops tailored server seeds |
| Nonce | Counter | Yes, per bet | Already public | Makes each bet unique |
All three together: a computed table
Using the common method described in verify a roll step by step: message = client_seed:nonce, HMAC-SHA256 keyed with the server seed, first 8 hex characters turned into a number and scaled to 0.00–99.99.
Server seed for all rows: 9f2c4e1a7b3d8e6f0a5c2b9d4e7f1a3c.
| Client seed | Nonce | HMAC-SHA256 (first 16 hex) | First 8 hex → integer | Roll |
|---|---|---|---|---|
| lab-reader-01 | 0 | c6b1e6abfb75912f | 3,333,547,691 | 77.61 |
| lab-reader-01 | 1 | 2efadd180c35153b | 788,192,536 | 18.35 |
| lab-reader-01 | 2 | e0508dbe0442736f | 3,763,375,550 | 87.62 |
| lab-reader-01 | 3 | 94bc42e1b5718fb3 | 2,495,365,857 | 58.09 |
| lab-reader-01 | 4 | 3cbe05a04a5e73b2 | 1,019,086,240 | 23.72 |
| lab-reader-02 | 0 | 768a39e2ee834ea7 | 1,988,770,274 | 46.30 |
| lab-reader-02 | 1 | b2129c378447f586 | 2,987,564,087 | 69.55 |
| lab-reader-02 | 2 | 87716e397868a761 | 2,272,357,945 | 52.90 |
Three things to notice:
- Each nonce gives an unrelated result. 77.61, then 18.35, then 87.62. There's no trend to read into.
- Changing one character of the client seed reshuffles everything.
lab-reader-01andlab-reader-02produce completely different sequences from the same server seed. - The results are fully determined. Anyone with these three inputs gets exactly these numbers. That determinism is what makes checking possible.
Changing the server seed has the same effect. With a different example seed, 4b8e0d2f6a1c9e3b7d5f0a2c8e4b6d1f, client seed lab-reader-01 and nonce 0 give 5a2c10c6…, which scales to 35.22.
Seed rotation: how the reveal works
Most systems keep a seed pair active across many bets. When you choose to rotate (often a "change seed" button):
- The current server seed is revealed so you can verify past bets.
- A new server seed is generated and its hash is shown.
- You can set a new client seed.
- The nonce resets to its starting value.
You can only verify bets made with a server seed that has been revealed. If a site never lets you rotate, or rotates without ever revealing old seeds, you can't check anything.
A practical checklist
- Before playing, copy the server seed hash somewhere outside the site.
- Set your own client seed. Any string you choose works; it doesn't need to be secret.
- Keep a note of which nonces you want to check.
- After the session, rotate, then hash the revealed seed and compare it with your saved copy.
- Recompute a few results with the site's documented formula or our verifier.
- If the hash doesn't match, nonces are missing, or the formula isn't documented, stop and treat it as a red flag.
Common misunderstandings
"A lucky client seed improves my odds." It can't. Every client seed produces a different but equally random sequence. You can't know in advance which seed leads to what without the server seed.
"I can predict the next roll from past ones." No. Without the active server seed, upcoming HMAC outputs are unpredictable, and past results tell you nothing about the next nonce.
"The hash proves the seed was random." It proves the seed was fixed. How it was generated is outside what the commitment can show.
Knowing these three inputs gives you everything you need to check a result. It doesn't change the odds of any game, and checking a result is not a reason to keep playing.
FAQ
Why can't I see the server seed before I play?
If you could, you could compute every upcoming result in advance. You see its SHA-256 hash instead, which locks the seed in without revealing it. The seed is shown after you rotate to a new one.
Does changing my client seed improve my chances?
No. It changes which results you get, not the odds of any outcome. Its purpose is to make sure the site couldn't have chosen a server seed with your inputs in mind.
What happens if the nonce skips or repeats?
Repeating a nonce with the same seeds would repeat a result exactly, and skipping one hides a result. Either is worth querying with the site; your bet history should show consecutive nonces.
When should I rotate my seeds?
Whenever you want to verify past bets, because rotating is what reveals the old server seed. Many people rotate after a session and check a sample.