Provably fair in a provably fair crypto casino is a method to prove each result was generated from pre-committed randomness (server seed hash) plus your input (client seed) and a counter (nonce). You can do provably fair verification by re-running the published algorithm locally: if your computed outcome matches the casino's logged outcome, that round wasn't altered.
Core Principles of Provably Fair Systems
- Commit first, reveal later: the casino publishes a hash of the server seed before bets, then reveals the seed afterward so you can confirm the commitment.
- Player influence: a client seed (yours or user-changeable) ensures outcomes can't be fully controlled by the house.
- Deterministic replay: the same inputs (server seed, client seed, nonce) must always recreate the same result.
- Public algorithm: the RNG-to-game mapping is documented (often via HMAC-SHA256) so anyone can reproduce it.
- Per-bet uniqueness: a nonce (or round index) prevents reusing the same randomness across multiple bets.
- Verifiable logs: bet records expose all required inputs/identifiers to reproduce the result without trusting screenshots.
Technical Foundation: Hashing, Salting and HMAC Explained
This fits intermediate players who want to independently confirm the integrity of provably fair casino games (dice, crash, roulette-style, mines variants) without trusting a site's UI. Skip manual verification if you cannot access full round data (seeds/nonce) or if the game uses an undisclosed mapping from RNG bytes to outcomes.
- Hashing (e.g., SHA-256): one-way fingerprint. Casinos typically show server seed hash before play to lock in the secret seed.
- Salting: extra input added to a hash. In casino PF designs, the "salt" is often your client seed and/or nonce combined with the server seed through HMAC.
- HMAC (e.g., HMAC-SHA256): a keyed hash. Common pattern:
HMAC_SHA256(key=serverSeed, message=clientSeed:nonce). Key point for how does provably fair work: the casino can't change the server seed after committing to its hash, and you can recompute outputs once the seed is revealed.
Server Seed, Client Seed and Nonce: How Casino RNG Is Built

To verify a round safely and accurately, you need the exact inputs the casino used (not approximations). Most "provably fair" pages or bet details panels expose them.
What you need (inputs)
- Server seed hash (pre-bet): shown before you wager; used later to confirm the revealed server seed wasn't swapped.
- Revealed server seed (post-bet or after seed rotation): the secret value that matches the pre-bet hash.
- Client seed: your chosen seed (or the site-generated one if you didn't change it).
- Nonce / bet index: increments per bet (sometimes per game round). You must use the correct nonce for that specific bet.
- Game parameters: the game's rules for turning RNG output into a result (e.g., dice range, crash formula, number of reels/lines).
What you need (tools/access)

- Access to the casino's provably-fair page or API that displays seeds and nonce per bet.
- A local way to compute SHA-256 and HMAC-SHA256 (browser console, Python, Node.js, or an offline verifier).
- Bet ID / round ID so you can fetch the exact record.
Audit Flow: Tracing a Bet from Placement to Verified Outcome
- Collect all fields first: server seed hash (before), revealed server seed (after), client seed, nonce, game settings, and the displayed outcome.
- Work from the bet record (ID/round details), not from the animation or stream overlay.
- Verify commitment (hash match) before you verify the outcome math.
- Recompute using an offline tool when possible (reduces "site verifier" trust).
-
Capture the round inputs from the bet record
Open the bet details and copy: client seed, nonce, server seed hash, and the game outcome shown for that bet (e.g., dice roll, crash multiplier). Expected output: a complete input set with no missing fields.
- If the casino provides a "verification string" (e.g.,
clientSeed:nonce), copy it exactly including separators. - If there are multiple nonces (session nonce vs. game nonce), identify which one the game uses.
- If the casino provides a "verification string" (e.g.,
-
Confirm the commitment: server seed hash must match
After the server seed is revealed (immediately or after seed rotation), compute its SHA-256 (or stated hash) and compare to the pre-bet server seed hash. Expected output: exact match.
- If it doesn't match, stop: the round is not verifiable under the stated scheme.
- Make sure you didn't paste whitespace or hidden characters (common copy/paste issue).
-
Recompute the HMAC (or stated PRNG step)
Use the documented algorithm, typically HMAC-SHA256 with
key=serverSeedandmessage=clientSeed:nonce. Expected output: a deterministic hex digest for that bet.- If the site uses a different concatenation order (e.g.,
nonce:clientSeed), follow its documentation exactly. - Some games generate multiple chunks by appending a counter (e.g.,
:0,:1) to produce more bytes; replicate the same sequence.
- If the site uses a different concatenation order (e.g.,
-
Convert digest bytes into a uniform random number
Convert hex to bytes, then to an integer or fractional value per the casino's method (e.g., take the first 4-8 bytes as an integer, or scan for a value under a threshold to avoid modulo bias). Expected output: a reproducible intermediate RNG value.
- If the algorithm mentions "rejection sampling" (discarding out-of-range values), you must implement that exact discard rule.
- Modulo shortcuts can change results; use the site's specified approach.
-
Map the RNG value to the game outcome
Apply the game's mapping (dice range, crash curve, roulette wheel selection, card dealing order). Expected output: exactly the same result shown in the bet record.
- Confirm rounding rules (floor vs. round, decimal places, caps/mins).
- For multi-step games (e.g., mines/card deals), ensure you generate enough bytes in the correct order.
-
Document and retain evidence
Save the inputs, computed outputs, and the bet URL/ID. Expected output: a reproducible record you (or support) can re-check later.
- Prefer plain text logs or a small script file; screenshots alone are hard to audit.
Player Verification Checklist: Step‑by‑Step Replay and Hash Checks
- Input completeness: you have server seed hash (pre), revealed server seed (post), client seed, nonce, and the game's mapping rules.
- Hash check: computed hash(revealed server seed) equals the pre-bet server seed hash.
- Exact formatting: message string matches documentation (same separators, same order, no extra spaces/newlines).
- Correct nonce: nonce matches that bet's index for that specific game (not a session-wide counter unless documented).
- Correct algorithm: HMAC function and hash (e.g., HMAC-SHA256) match the casino's stated method.
- Correct byte usage: you use the same number of bytes/chunks and the same rejection/modulo rule.
- Correct mapping: you apply the same rounding/caps and any house edge rules exactly as described.
- Outcome match: your computed result equals the bet record result; if not, identify which stage diverges (hash, HMAC, conversion, mapping).
Red Flags and Edge Cases: What Indicates Possible Tampering
- No revealed server seed: a commitment hash without later reveal prevents independent verification.
- Algorithm not fully specified: "we use advanced RNG" without exact concatenation/mapping details blocks reproduction.
- Nonce ambiguity: nonce resets unexpectedly, isn't shown per bet, or differs between UI and bet record.
- Verifier-only workflow: you can verify only via the casino's own page, with no way to recompute offline.
- Hidden normalization rules: unclear rounding, caps, or rejection sampling details (small changes can flip outcomes).
- Seed rotation gaps: server seed hash changes without an explained rotation event, or old seeds are never revealed.
- Client seed locked: you cannot view or change the client seed, undermining the "player influence" claim.
- Mismatch only on certain games: dice verifies but crash doesn't (suggests inconsistent mapping or incomplete documentation).
Practical Tools and Scripts to Automate Verification
Automation matters if you regularly test best provably fair casinos claims across many rounds, or you want to audit multiple provably fair casino games without manual copy/paste.
Option 1: Browser console (quick checks, no installs)
- Use when you need a fast SHA-256/HMAC calculation and you trust your local browser environment.
- Best for single-bet triage: hash match first, then HMAC digest sanity check.
Option 2: Python script (repeatable, offline)
- Use when you want a reproducible audit trail and less reliance on web verifiers.
- Good for batch verification if you can export bet logs (IDs, seeds, nonces).
import hmac, hashlib
def sha256_hex(s: str) -> str:
return hashlib.sha256(s.encode("utf-8")).hexdigest()
def hmac_sha256_hex(server_seed: str, message: str) -> str:
return hmac.new(server_seed.encode("utf-8"), message.encode("utf-8"), hashlib.sha256).hexdigest()
# Example structure only (use the casino's exact message format)
server_seed = "REVEALED_SERVER_SEED"
client_seed = "YOUR_CLIENT_SEED"
nonce = 1
message = f"{client_seed}:{nonce}"
print("server_seed_hash =", sha256_hex(server_seed))
print("hmac =", hmac_sha256_hex(server_seed, message))
Option 3: Node.js script (fits web dev workflows)
- Use when you're comfortable with JavaScript and want to share a verifier with others.
- Good for integrating with APIs that return bet history JSON.
Option 4: Third-party verifiers (fast, but verify the verifier)
- Use when the casino publishes an open-source verifier or provides a deterministic offline page.
- Recommended follow-up: cross-check one round with your own script to confirm the tool matches the documented algorithm.
Practical Concerns and Troubleshooting for Verifications
Why does my computed server seed hash not match the casino's hash?
Most failures come from copying extra whitespace, using the wrong revealed seed (different rotation), or hashing the wrong encoding. Re-copy the revealed seed from the bet's provably-fair record and ensure you use the stated hash algorithm.
My HMAC digest differs even though the hash check passed-what should I check first?
Check the message format and ordering (client seed, nonce, separators) against the casino documentation. Also confirm the nonce for that exact bet and game mode.
Can a casino still cheat if it is provably fair?
They can't change a verified round without breaking the commitment, but they can publish incomplete rules, hide mapping details, or restrict access to seeds/nonces. Always verify both the commitment and the RNG-to-outcome mapping.
Do I need to change my client seed for every bet?
Not strictly, because the nonce should make each bet unique, but rotating your client seed periodically reduces correlation and helps you confirm the site properly applies player input.
Why does verification work for dice but not for crash on the same site?
Crash often uses additional steps (multiple byte chunks, rejection rules, caps/rounding). Use the crash-specific mapping documentation and confirm you generate the same number of bytes in the same sequence.
What should I save as evidence when a round looks wrong?
Save the bet ID/URL, server seed hash, revealed server seed, client seed, nonce, and the displayed outcome. Include your computed intermediate values (hash and HMAC digest) to pinpoint where divergence occurs.



