Audit On Chain Bet Proofs for Stake.com Players in Minutes

You can verify any provably fair bet by recomputing HMAC-SHA256 with the revealed serverSeed, your clientSeed, and the nonce, then comparing your result to the recorded outcome. First confirm that SHA256 of the revealed serverSeed matches the published serverHash, then re-run the game's mapping rules. These proofs confirm outcome integrity, not payout generosity.
TL;DR:
- Verifying a bet requires matching SHA256 of the revealed seed with the published serverHash and recomputing HMAC-SHA256 with your seed, nonce, and cursor.
- Merkle roots enable batch verification of entire sessions or days by confirming that individual bets are included in a published, immutable root, reducing repetitive calculations.
- Red flags include a mismatch between the seed hash and the published serverHash, truncated or reformatted seeds, out-of-sequence nonces, or inconsistent game mappings, which should be documented and escalated.
- Blockchain anchoring of commitments and Merkle roots enhances trust by making records tamper-proof and independently verifiable through transaction hashes and confirmation depth.
- Using external tools like verifier scripts or session analyzers simplifies bulk audits, helping players track fairness and detect potential irregularities over time.
Table of Contents
- What provably fair bet proofs are: commit-reveal, HMAC-SHA256, and Merkle roots
- Step-by-step checklist: extract seeds and verify a single bet
- Replaying sessions and batch audits with Merkle proofs
- What provably fair proofs actually guarantee, and the red flags to watch for
- Automating verification with practical tooling
- Understanding blockchain transaction data behind bet records
- Cryptographic primitives beyond HMAC-SHA256
- Why blockchain transparency strengthens trust in these proofs
- Limitations and practical challenges to keep in mind
- How platforms apply these proofs in practice
- A practical audit mindset
- Try Stakestats tools to automate verification and session analytics
- FAQ
- Sources
What provably fair bet proofs are: commit-reveal, HMAC-SHA256, and Merkle roots
Every provably fair bet rests on a commit-reveal scheme. Before you place a bet, the casino publishes a serverHash, which is a SHA-256 hash of a serverSeed it has not yet shown you. That hash locks the casino into a value it cannot quietly swap out later, because any change to the underlying seed would produce a different hash.
To check a bet, you need four pieces: the serverSeed or serverHash, your clientSeed, the nonce, and sometimes a cursor or round number for games that draw multiple values from one seed pair. Running HMAC-SHA256 with these inputs produces a byte stream, and each game converts those bytes into outcomes using its own published mapping, whether that is a dice roll, a crash multiplier, or a mine layout.
Some platforms go further and publish daily Merkle roots, turning a day's worth of bets into an append-only audit log you can check without trusting the operator's word.
- Commit-reveal locks the serverSeed before play begins.
- HMAC-SHA256 turns seeds and nonce into a reproducible byte stream.
- Cursor or round values let one seed pair generate several outcomes.
- Merkle roots let you verify historical batches without re-trusting each bet individually.
Step-by-step checklist: extract seeds and verify a single bet
Verifying one bet takes a few minutes once you know where to look. The process is the same whether you run it in a browser console, a Node script, or a dedicated verifier tool.
- Open your bet history and locate the specific wager you want to check.
- Copy the serverHash if the seed pair is still active, or the revealed serverSeed if you have already rotated seeds.
- Copy your clientSeed, the nonce for that bet, and any cursor or round value the game uses.
- Compute SHA256 of the revealed serverSeed and confirm it matches the serverHash exactly.
- Recompute HMAC-SHA256 using the serverSeed as the key and a message built from clientSeed, nonce, and round, following the implementation pattern documented for provably fair RNG.
- Convert the resulting bytes into a game outcome using that game's published mapping, whether it is a dice percentage, a crash point, or a mine grid.
- Compare your computed outcome to what the casino recorded for that bet.
If every number lines up, you have independently confirmed that bet was not altered after the fact. If something does not match, stop and preserve evidence rather than re-running the calculation repeatedly hoping for a different answer.
For a mismatch, save the raw serverSeed, serverHash, clientSeed, nonce, and round values exactly as displayed, take a screenshot of the bet detail page, and export any Merkle inclusion proof the platform offers before the record ages out of easy access.
Pro Tip: Run verification in an incognito browser tab or an offline script so a plugin or extension can't quietly alter the values you're copying.
Replaying sessions and batch audits with Merkle proofs
Checking one bet proves one bet. If you want confidence across a whole session or a week of play, you need a batch workflow. The same Merkle roots that back historical records also let you confirm large batches without recomputing every HMAC from scratch.
A daily Merkle root is built from leaves, where each leaf typically represents one bet or one small group of bets. Fetching an inclusion proof gives you the sibling hashes needed to walk from your specific leaf up to the published root, so you can confirm that bet was part of the recorded set without needing the casino to hand you the entire day's data.
For a full audit, export your bet history, collect every revealed serverSeed you can, and run a verification script across the full range of nonces and cursors you played. From there you can compute your actual hit rate and compare it to the game's published return to player.
- Export bet history for the date range you want to audit.
- Collect every revealed serverSeed tied to that history.
- Run HMAC verification across all nonces and rounds in sequence.
- Flag any nonce gaps, repeated values, or commitment mismatches.
Reproducible, independently checkable audit trails are the core promise of commit-reveal systems with published Merkle roots, according to Provable's security documentation: anyone can recompute a root from leaf and sibling data without relying on the operator's internal logs. If a batch run turns up clustering that looks non-random, or the same commitment mismatch on multiple bets, that is worth compiling into a single report with timestamps and raw fields before you escalate to platform support or a public audit forum.
What provably fair proofs actually guarantee, and the red flags to watch for
Provably fair proofs are narrow by design, and knowing the boundary matters as much as knowing the method. Technical reviews of commit-reveal systems are clear that HMAC-SHA256 plus pre-commitment proves outcome integrity: the operator could not have changed the result after seeing your bet. It does not, on its own, prove that the house edge is fair or that payout tables are generous.
What the math does confirm:
- A binding pre-commitment prevents the operator from altering outcomes after your bet is placed.
- HMAC determinism means the same inputs always reproduce the same output, so results are checkable indefinitely.
What it does not confirm:
- Payout percentages, house edge sizing, or backend bugs sit outside what an HMAC proof covers.
- Hidden server-side state unrelated to the seed pair is invisible to this kind of check.
Watch for a few recurring red flags: a commitment mismatch where SHA256 of the revealed seed does not equal the published hash, a seed that looks truncated or reformatted from its original display, nonces that skip or repeat out of sequence, or a game mapping function that behaves differently from its documented version. Any one of these is reason to pause play on that seed pair and document what you found before continuing.
Automating verification with practical tooling
Manual verification works for spot checks, but anyone auditing more than a handful of bets benefits from tools built for the job. We built our provably fair explanation and verifier tools specifically to take the raw seed data you copy from bet history and turn it into a reproducible check without requiring you to write your own HMAC script.
Our Stake Originals Analyzer breaks down per-game statistics so you can see whether a session's results sit within expected variance for that specific game's volatility, not just whether individual bets check out cryptographically.
- Use the provably fair explanation page to locate and format seed data correctly before verifying.
- Run the Stake Originals Analyzer for per-game breakdowns once individual bets are confirmed.
- Pair exported bet history with a batch verifier to produce a single audit report.
- Keep private keys and account credentials out of any verification tool, since legitimate checks only ever need public seed data.
A typical workflow looks like this: export your bet history, feed it into an analyzer for per-game context, run a batch verify script against every nonce in the export, and save the resulting CSV of replayed outcomes alongside your original data.
Pro Tip: Always run verification client-side, in your own browser or script, rather than pasting seeds into a third-party site you don't recognize.
Understanding blockchain transaction data behind bet records
Some platforms anchor their bet records to an actual blockchain rather than only publishing hashes on a web page. In that setup, a few pieces of transaction data become relevant to verification. A transaction hash uniquely identifies the specific transaction that recorded a bet, a commitment, or a batch root, and you can look it up on a public block explorer to confirm it exists and has not been altered.
Block confirmations tell you how many blocks have been added on top of the one containing your transaction. More confirmations mean the record is harder to reverse or rewrite, since doing so would require rebuilding every subsequent block. For a reader checking a single bet, the practical takeaway is simple: a transaction hash with a reasonable number of confirmations behind it is a record you can treat as settled, while one with zero or one confirmation is still provisional.
Gas fees, the cost paid to have a transaction processed, are a separate consideration from verification itself but explain why not every bet is written directly to a blockchain. Writing one transaction per bet would be costly at scale, which is part of why many provably fair systems instead batch many bets into a single commitment or Merkle root and anchor only that summary on-chain, keeping per-bet verification free while still giving you a transaction hash and confirmation count to check the summary record against.
Cryptographic primitives beyond HMAC-SHA256
HMAC-SHA256 handles the core RNG step in most provably fair systems, but a handful of other primitives show up around it, especially once records move toward blockchain anchoring. Plain SHA-256 hashing, without the HMAC construction, is what verifies the commit-reveal step itself: you hash the revealed serverSeed and compare it to the published serverHash, no key or message needed beyond the seed.
When batches of bets are rolled into a Merkle tree, the same SHA-256 function (or sometimes a closely related variant) hashes pairs of leaves together repeatedly until a single root remains. That is a different use of the same primitive: proving set membership rather than proving randomness.
Digital signature schemes appear when a platform wants to prove that a specific party, not just any party, published a given commitment or root. A signature lets you confirm that the operator's private key, not an impersonator's, authorized a particular hash or transaction. This matters most when commitments are published to a public blockchain, since the transaction itself can be signed by the operator's wallet, giving you a second, independent check beyond the HMAC math.
None of these additional primitives replace the core HMAC-SHA256 verification step described earlier. They add layers of confirmation around who published a commitment and whether a batch of records has been tampered with after the fact, which matters more as the volume of bets you are trying to audit grows.

Why blockchain transparency strengthens trust in these proofs
A published serverHash on a casino's own web page is only as durable as that web page. If a record disappears, gets edited, or the company shuts down, your ability to re-verify disappears with it. Anchoring commitments or Merkle roots to a public blockchain changes that calculation, because the record now lives on a ledger that many independent parties maintain copies of, not just the operator.
That independence is the practical value of immutability here. Once a transaction confirms with enough blocks behind it, rewriting it would require redoing the work on every block since, which becomes harder the longer the record has existed. For a player auditing bets months after the fact, that means the commitment you are checking against is the same one that existed the day you played, not a version that could have been quietly updated.
Transparency compounds that trust. Anyone, not just the account holder, can look up a transaction hash and see that a commitment existed at a specific time, without needing special access or an account with the platform. Combined with the HMAC-SHA256 recomputation described earlier, blockchain anchoring turns a private, provider-controlled audit trail into one a third party can confirm independently, which is the entire point of calling a system provably fair rather than simply trusting the operator's internal logs.
Limitations and practical challenges to keep in mind
On-chain anchoring solves a real trust problem, but it introduces its own friction. Latency is the first issue: writing a transaction and waiting for enough confirmations to treat it as settled takes time, usually seconds to minutes depending on the network, which does not fit the pace of a casino game where players expect an instant result.
Gas costs are the second constraint. Paying a network fee for every single bet would make small wagers impractical, which is why most implementations batch many bets into one commitment or root and anchor only that summary, trading per-bet transparency for a more affordable, scalable record.
Scalability follows from both of the above. A system built around writing every individual outcome to a public blockchain in real time would struggle under the bet volume a popular casino generates in a single hour. Batching and periodic root publication are the practical compromise, but that means a single bet's full on-chain proof is really a proof about the batch it belongs to, verified through a Merkle inclusion proof rather than a dedicated transaction of its own.
None of this undermines the core HMAC-SHA256 verification covered earlier, which works the same whether or not a blockchain is involved. It simply means on-chain anchoring is best understood as an added layer of durability and independence for historical records, not a replacement for recomputing the actual bet math yourself.

How platforms apply these proofs in practice
Provably fair verification shows up across the crypto casino space in a fairly consistent shape: a serverHash published up front, a revealed serverSeed after a seed rotation, and a client-side way to recompute the outcome. Where platforms differ is in how far they take the audit trail beyond a single bet.
Some casinos stop at publishing the hash and seed pair, leaving it to the player to run the HMAC math themselves or through a third-party verifier. Others add a published daily Merkle root, letting anyone reconstruct the root from leaf and sibling data and confirm a specific bet belongs to that day's batch, a pattern documented in Provable's own security materials.
Open-source tooling has grown around this need. Reference projects such as the provably-fair-rng verifier provide a browser-based verifier UI alongside core RNG and seed-lifecycle code, so a player does not need to trust a single operator's calculator and can instead run the same check against independent, auditable code. Other open verification scripts extend this to specific game types, covering dice, limbo, keno, and mines by recomputing the HMAC and applying each game's published byte-mapping rules.
The common thread across every implementation worth trusting is the same: a binding commitment before play, a revealed seed after, and a way for you, not just the operator, to recompute the result.
A practical audit mindset
Three habits matter more than any tool: always verify the commitment before trusting a replayed outcome, save raw seed and nonce data the moment you spot a discrepancy, and if you play often, run a nightly batch check rather than waiting until something feels wrong. Casual, low-volume play rarely justifies a full audit, but systematic play or any pattern that feels off deserves one.
— Ian
Try Stakestats tools to automate verification and session analytics
Running every HMAC calculation by hand works for a single bet, but it gets tedious fast once you are auditing a real session. We built a set of tools that take the manual steps covered above and turn them into a few clicks.

- Our provably fair explanation page walks through locating and formatting your seed data correctly.
- The Stake Originals Analyzer breaks down per-game fairness and statistics once bets are verified.
- Our bankroll analyzer turns replayed outcomes into session EV and bankroll projections.
- Our transparency tools page covers Merkle roots and inclusion proofs for historical batches.
Start with the provably fair explanation tool to run your first verification in minutes instead of writing your own script from scratch.
FAQ
What do I need to verify a single provably fair bet?
You need the serverSeed or serverHash, your clientSeed, the nonce, and any cursor or round value the game uses for that bet. With those four pieces you can recompute the HMAC-SHA256 byte stream and compare it to the recorded outcome.
Does a matching HMAC proof mean the game is fair overall?
A matching HMAC proof confirms the specific outcome was not altered after you placed the bet, which is outcome integrity. It does not confirm the payout percentage or house edge, which sit outside what commit-reveal and HMAC proofs cover.
What does a Merkle inclusion proof actually let me check?
An inclusion proof gives you the sibling hashes needed to rebuild a path from one specific bet up to a published daily root, confirming that bet was part of the recorded batch. This lets anyone recompute the root in their own browser without trusting the operator's internal records.
What should I do if SHA256 of the revealed seed doesn't match the serverHash?
Stop and save the raw serverSeed, serverHash, clientSeed, and nonce exactly as displayed, along with a screenshot of the bet detail page. A mismatch is a genuine red flag worth escalating to platform support with that evidence attached.
Can I verify many bets at once instead of one at a time?
Yes, by exporting your bet history and running a verification script across every nonce and revealed seed in that range, a pattern supported by open-source verifier tooling built for batch checks. This also lets you compute an actual hit rate across a session rather than checking bets one by one.
Sources
- Provable
- Provably fair implementation — slm.games docs
- Provably fair randomness — Chainlink
- provably-fair-rng README — GitHub