⚠ Educational only — not an inducement to gamble. Gambling carries real financial risk & can be addictive. 18+/21+. Get help →
🎲 Provably Fair

How to Verify a Provably Fair Bet Yourself

A practical step-by-step guide to independently verifying a provably fair bet using seed pairs, nonces, and open-source tools — including common mistakes to avoid.

StakeRated Editorial· February 15, 2026· 9 min read· intermediate

Most players on provably fair casinos never verify a single bet. The verification interface is there; the seeds are published; the math checks out in principle — but the step between “could verify” and “did verify” remains uncleared. This guide is designed to close that gap. If you play on a provably fair platform, you should know how to actually run the check, not just know that the check is theoretically possible.

One important caveat before starting: verification confirms the casino did not tamper with the randomness after you committed to the bet. It does not confirm the game is profitable, that the house edge is fair, or that the payout rules are reasonable. Those are separate questions that verification cannot answer.

What You Need Before You Start

To verify any specific bet, you need three values, all of which should be available in your bet history or account settings on any legitimate provably fair platform:

  1. Server seed (revealed) — the original random value the casino generated, disclosed after the session ends or the seed pair is rotated.
  2. Client seed — the string you provided (or accepted as the default) during that session.
  3. Nonce — the incrementing counter value for the specific bet you want to verify.

You also need the server seed hash that was published before the session, so you can confirm the revealed seed matches the commitment.

Step 1 — Verify the Server Seed Hash

Before running any outcome calculation, confirm the casino did not swap its seed after you played. This is the foundational check.

# On any platform with SHA-256 support (command line, browser tool, etc.)
SHA256("a3f8c2d19e4b7f06a1c3e5d7b9f2a4c6e8d0b2a4c6e8d0b2a4c6e8d0b2a4c6e8")
# Must match the hash shown to you before the session began

On Linux/macOS this is straightforward:

echo -n "your_revealed_server_seed_here" | sha256sum

On Windows PowerShell:

$seed = "your_revealed_server_seed_here"
$bytes = [System.Text.Encoding]::UTF8.GetBytes($seed)
$hash = [System.Security.Cryptography.SHA256]::Create().ComputeHash($bytes)
[BitConverter]::ToString($hash).Replace("-","").ToLower()

If the output does not match the hash published before your session, the casino changed its server seed. That is detected fraud, and this is exactly what provably fair is designed to expose. If it matches, proceed.

Step 2 — Recompute the Raw HMAC Output

With a confirmed server seed, recompute the HMAC-SHA256 value for the specific bet:

import hmac, hashlib

server_seed = "a3f8c2d19e4b7f06a1c3e5d7b9f2a4c6..."
client_seed = "my_client_seed"
nonce       = 42

message = f"{client_seed}:{nonce}"

raw = hmac.new(
    key     = server_seed.encode("utf-8"),
    msg     = message.encode("utf-8"),
    digestmod = hashlib.sha256
).hexdigest()

print(raw)   # 64-character hex string

This 64-character hex string is the raw entropy for your bet. Every bet in the same session with the same seed pair produces a unique string because the nonce differs.

Step 3 — Convert to a Game Outcome

This step is game-specific. The raw hex must be converted to the outcome format the game uses. For a simple dice game producing a result in [0, 100):

# Extract first 4 bytes as unsigned 32-bit integer
hex_chunk  = raw[0:8]
int_val    = int(hex_chunk, 16)          # convert hex to integer
float_val  = int_val / (2**32)           # normalize to [0, 1)
dice_roll  = float_val * 100             # scale to [0, 100)

print(f"Dice result: {dice_roll:.4f}")

For games with more complex outcome mappings (crash multiplier, card draws, roulette outcomes), the casino should publish the exact conversion formula in its fairness documentation. If it does not, that is itself a red flag.

Step 4 — Compare Against the Reported Result

The recomputed result should exactly match what the casino reported in your bet history. If it does not match, the casino either applied a different formula than it documented, or reported a false result — both are detectable problems.

casino_reported = 10.2364   # from your bet history

if abs(dice_roll - casino_reported) < 0.0001:
    print("PASS: result matches")
else:
    print("FAIL: result does not match — investigate")

Allow for minor floating-point rounding if the casino rounds displayed results; compare to the full precision values if available.

Using Browser-Based Verifiers

Most provably fair casinos include a built-in verifier in their fairness or help section. You paste in the server seed, client seed, and nonce; the tool performs all the above steps in your browser and displays the recomputed result. These tools are convenient and usually accurate — but you are trusting the casino’s own JavaScript to verify the casino’s own results.

For stronger assurance, use an independent third-party verifier or run the computation yourself using the pseudocode above. Several open-source command-line tools are available for common game types. When using any verifier, confirm it:

  • Uses HMAC-SHA256 (not simple SHA-256 concatenation)
  • Applies the correct byte-extraction and normalization method for the specific game type
  • Matches the casino’s documented conversion formula

Common Mistakes

Verifying the outcome without checking the hash first. If you skip step 1, you’re confirming the math works but not confirming the seed wasn’t swapped. Both checks are required.

Using the wrong nonce. Each bet has a unique nonce. Verifying nonce 41 when you meant nonce 42 produces a completely different (also valid) result that doesn’t correspond to your bet.

Assuming the casino’s verifier is independent. Built-in verifiers are useful but not independent. A dishonest operator could build a verifier that always reports “PASS” while the game engine uses different logic.

Not checking the conversion formula. Different games and different casinos use different methods to convert the raw HMAC output to an outcome. A dice verifier won’t correctly verify a crash game.

Concluding that verification means the game is fair overall. A successfully verified bet confirms only that the randomness for that specific bet was not manipulated. It says nothing about the house edge, whether the payout is reasonable, or whether the operator is trustworthy in other ways.

What Verification Cannot Tell You

Even a perfect, fully independent verification process has limits:

  • Game rules and house edge are not verified. The operator sets payout ratios independently of the randomness mechanism.
  • Third-party games (slots, live dealer) are not part of the casino’s provably fair system. Their randomness is managed by the game provider’s own RNG.
  • Pattern analysis is not meaningful. Verifying 100 bets and finding they “look random” is expected. Provably fair doesn’t let you predict future outcomes; it only lets you audit past ones.
  • Rotation timing is your responsibility. When you rotate your client seed, the current server seed is revealed. If you never rotate, you accumulate unverifiable bets. Some platforms enforce periodic rotation.

For a broader understanding of what the provably fair system fundamentally cannot guarantee, see limits and myths of provably fair. For context on how this compares to traditional RNG auditing, see provably fair vs. RNG certification.

Verification is a right you have as a player on these platforms. Using it is the only way it provides any protection. Given the irreversibility of blockchain transactions and the significant house edges typical of crypto gambling, treating verification as optional rather than routine means you are extending trust you were never required to extend.

#provably-fair#verification#cryptography#HMAC#SHA-256#tools