18+ only · Roulette is gambling with real money · Play safely

PROVABLY FAIR

Provably fair roulette: from a hash to a pocket, and how to verify a spin

Provably fair roulette turns seeds and a nonce into a hash, then maps the hash to a pocket. A fully worked, fictional example you can recompute yourself.

Provably fair roulette works in three steps. The game commits to a secret server seed by publishing its hash; each spin combines that seed with your client seed and a nonce to produce a new hash; and a published formula turns that hash into a pocket number. Once the server seed is revealed, you can repeat the calculation for any spin and confirm the result.

This guide walks through one complete fictional spin on a 37-pocket wheel, with every intermediate value shown so you can recompute it.

The ingredients

ItemWho sets itVisible whenPurpose
Server seedGameAfter you rotate itMain source of randomness
Server seed hashGameBefore you playCommitment that locks the seed in
Client seedYou (or a default)AlwaysStops the game pre-picking results alone
NonceCounterAlwaysMakes each spin's hash different (0, 1, 2…)

The key idea is the commitment. A hash function like SHA-256 is one-way: easy to compute from the seed, practically impossible to reverse. Publishing the hash first means the game can't swap in a different seed later without the hash no longer matching.

Step 1: check the commitment

Our fictional values:

  • Server seed: fictional-server-seed-7f3a91c2
  • Client seed: wheeldesk
  • Nonce: 42

Before play, the game would have shown the SHA-256 hash of the server seed:

9f15e325f2d3328a64e90bf1fbc26146343ced9cce978b7ae1135c369d1003b1

After revealing the seed, you hash fictional-server-seed-7f3a91c2 yourself. If your result matches the hash shown earlier, the seed wasn't changed. If it doesn't match, stop there: nothing else about that seed can be trusted.

Step 2: compute the spin hash

A common approach is HMAC-SHA256, with the server seed as the key and client_seed:nonce as the message. For our example the message is wheeldesk:42, and the result is:

db01ef9ba6a4dbee490b3510c73681a3d96738816fde762fc58175df6d00d5a6

Different games use different message formats (some add a round number, some use colons, some use dashes). Use exactly the format the game documents, or you'll get a completely different hash.

Step 3: map the hash to a pocket

Our fictional game takes the first 8 hex characters, turns them into a number, scales it to a fraction between 0 and 1, and multiplies by 37:

StepValue
First 8 hex charactersdb01ef9b
As a decimal number3,674,337,179
Divide by 2^32 (4,294,967,296)0.85550…
Multiply by 3731.65…
Round down: pocket31

So spin 42 lands on 31. On a classic single-zero wheel, 31 is a black number, odd, and in the high half (19–36).

You can check the next two fictional spins the same way: nonce 43 gives first characters 6024677f and pocket 13; nonce 44 gives f4068db6 and pocket 35. The only thing that changes is the nonce, yet each hash, and each pocket, is completely different.

Why some games use a remainder instead

Another common formula takes the number and finds the remainder after dividing by 37 (3674337179 mod 37 = 9). That would give pocket 9 for the same hash. Neither formula is "right"; what matters is that the game publishes one and sticks to it. With 8 hex characters, both methods have a bias too tiny to matter (well under one part in a hundred million), but well-designed games document how they handle it.

How to verify a spin yourself

You can use any trusted SHA-256 / HMAC tool, or a short script. In Python:

import hmac, hashlib

h = hmac.new(b"fictional-server-seed-7f3a91c2", b"wheeldesk:42", hashlib.sha256).hexdigest()

print(int(int(h[:8], 16) / 2**32 * 37))

That prints 31. Swap in your own revealed server seed, client seed, nonce and the game's published formula to check a real spin.

Common reasons a check doesn't match

Most failed verifications are not cheating; they're small input mistakes. Before you conclude anything, go through these:

SymptomLikely causeWhat to try
Server seed hash doesn't matchComparing against the wrong seed pairCheck you noted the hash for the seed that was just revealed, not the new one
Spin hash looks completely differentWrong message format or key orderRe-read the game's docs: seed as key or message, separator, nonce position
Pocket off by a few numbersWrong mapping formulaCheck whether the game scales (divide by 2^32) or uses a remainder
Pocket matches the previous or next spinNonce off by oneSome games start counting at 0, others at 1
Nothing matches at allExtra spaces or hidden charactersCopy seeds as plain text and trim spaces

If you have ruled all of these out and the result still doesn't match, keep screenshots of the hash, seeds, nonce and result, and raise it with the site.

What provably fair does — and doesn't — prove

It does show:

  • The server seed was fixed before you bet.
  • Each result follows from the seeds and nonce by the published formula.
  • The game couldn't change a spin after seeing your bet.

It doesn't show:

  • That the payouts are fair. The edge comes from the pay table; see our odds and house edge guide and our guide to colour-wheel variants.
  • That the site will pay out withdrawals or treat you fairly in other ways.
  • That a verification page run by the site itself is honest. Checking with your own tool is stronger.

Verification checklist

  • Write down the server seed hash before you play.
  • Set your own client seed.
  • Note the nonce of any spin you want to check.
  • After rotating seeds, hash the revealed server seed and compare it with the hash you noted.
  • Recompute the spin hash using the game's exact message format.
  • Apply the game's published mapping formula and compare the pocket.
  • If anything doesn't match, keep screenshots and contact the site.

Provably fair verification is a tool for trust, not a way to predict or improve results. Each new spin is unknowable until the server seed is revealed, and the house edge applies to every bet. Roulette is gambling; play only with money you can afford to lose.

Questions readers ask

What does provably fair mean in roulette?

The game commits to a hidden server seed by publishing its hash before you play. After the seed is revealed, you can recompute each spin from the seeds and nonce and check the result matches what you saw.

Does provably fair mean better odds?

No. It shows results weren't changed after the fact. The house edge is set by the wheel and the payouts and still applies in full.

Do all games map a hash to a pocket the same way?

No. The message format, the number of hex characters used and the mapping formula differ between games. Always use the formula the game publishes; this guide shows one common style as a fictional example.

Why should I change my client seed?

Setting your own client seed means the game couldn't have pre-picked results using only its server seed. Rotating it also triggers a reveal of the old server seed so you can verify past spins.

18+. Roulette is gambling. Examples on this page are fictional and for explanation only; nothing here is a promise of any result. Set a limit before you play. Responsible gambling