← Back to blog

Provably Fair on Stake: How to Verify Every Bet (2026)

Guide

Ready to automate your Stake session?

Free download — no account, no install hassle.

Download SSPilot

Provably fair is the cryptographic mechanism that lets Stake.com players independently verify that every roll, card draw, or Plinko drop was not manipulated after the fact. Unlike a traditional RNG audited by a third party, provably fair shifts trust to mathematics: the casino commits to a server seed hash before the bet, you supply a client seed, and once the server seed is revealed you can recompute the exact same outcome. If you have never actually clicked the verify button, this guide walks through the full flow, the math behind it, what it does and does not prove, and how to integrate verification into an automated workflow.

What Provably Fair Actually Guarantees

Provably fair does not guarantee that you will win, that the house edge is low, or that a given game is mathematically favorable. It guarantees exactly one thing: the outcome of a bet was determined by a value the server could not change once your bet was placed, because that value was committed to in advance via a hash you saw before the round.

In practice this eliminates a specific class of cheating — the server retroactively tweaking a single roll to nuke a player's martingale run, for instance. It does not remove the house edge, and it does not mean the game is beatable in the long run.

  • What it proves: the outcome was deterministic from (server seed, client seed, nonce) and the server seed was fixed before you bet.
  • What it does not prove: that the distribution of outcomes is fair over time, that the house edge is as advertised, or that you personally will profit.
  • What it requires from you: rotating the server seed before you audit, and actually running the verification script.

The Cryptographic Flow, Step by Step

The mechanism used by Stake follows a standard commit-reveal pattern built on HMAC-SHA256. Every bet you place is the result of a deterministic function of three inputs plus a cursor for games that consume many random numbers (like Plinko or Keno).

1. Commitment

Before any betting, the server generates a random 64-character hex server seed. It immediately publishes the SHA-256 hash of that seed to your account. You can see the hash but not the seed itself. This is the unbreakable commitment: the server cannot later produce a different seed whose hash matches.

2. Client Seed

You supply a client seed — a string you control. Stake lets you randomize it or type anything. Because it goes into the HMAC, a malicious server cannot predict outcomes in advance even if it wanted to collude with itself.

3. Nonce and Cursor

Each bet increments a nonce starting at 0. Games that need more than one random number per round (Plinko rows, Keno picks, Mines tile order) iterate a cursor on top of the same HMAC output stream. This matters when you verify: you must feed the exact same cursor your bet used.

4. Revelation and Rotation

To audit, you must first rotate your seed pair. Stake then reveals the old server seed. You hash it yourself and confirm the hash matches what was published before your bets. Then, for every historical bet on that seed, you can recompute the outcome.

From HMAC Bytes to Game Outcomes

The raw randomness is the same across games; only the mapping function differs. The formula is:

HMAC_SHA256(key = server_seed, message = client_seed:nonce:cursor) -> 32 bytes of hex

Each group of four hex characters (two bytes) is converted to a float in [0, 1) using a mixing formula. For Dice, the first float is scaled to [0, 100) with four decimals and that is your roll. For Limbo, the float is transformed via a logarithmic formula and clamped by house edge to produce the crash multiplier. For Mines, the float sequence is used in a Fisher-Yates style shuffle of 25 tiles to decide which ones are mines.

  • Dice: roll = float * 10000 / 100, displayed to four decimals
  • Limbo: crash = floor((1e8 - house_edge) / (1 - float)) / 1e8, clamped at 1.00x
  • Plinko: each row uses one float, left/right determined by float < 0.5
  • Mines: floats drive a shuffle selecting mine positions
  • Keno: floats used sequentially to pick unique numbers from 1 to 40

Verifying a Bet Yourself

Stake ships an in-app verifier, but the code is open and well-documented. A minimal Python verification for Dice looks like this in concept: take the revealed server seed, the client seed, the nonce of the bet, run HMAC-SHA256, take the first four bytes, convert to the float, scale, and compare to the outcome shown in your bet history. If they match exactly, that bet was fair. Repeat for every nonce.

For games with cursors, you simply increment the cursor and hash again to get additional 32-byte blocks until you have enough random numbers for that game type.

Common Misconceptions

  • "The casino can still rig it by picking a favorable server seed." False in practice: the server seed is committed before you know your client seed, and you can change the client seed any time.
  • "Provably fair means the game has no house edge." No. House edge is baked into the mapping function (e.g., the 1% Dice edge is the 99/100 factor). Provably fair only proves the function was applied honestly.
  • "I can predict the next roll." Only if the server seed is already revealed, which only happens after you rotate. Once rotated, that seed is retired forever.
  • "Verification is optional paranoia." If you never rotate and verify, you are trusting the operator just as much as on a traditional casino. The value of provably fair is realized only when you actually run the audit.

Integrating Verification Into an Automated Workflow

If you run long sessions with a bot, spot-checking a handful of bets after each seed rotation is a reasonable hygiene practice. A simple routine:

  • At the end of each session, rotate the server seed inside Stake.
  • Export the bet history CSV or pull it via the API.
  • Run a local verification script against a random sample of 20 to 50 bets across the seed.
  • Log the result alongside the session P&L in your analytics store.

This is exactly the kind of post-session check SSPilot users often wire into their analytics — session logs already contain nonce, client seed, and outcome, so adding a verification column is a small extension rather than a new pipeline.

Where Provably Fair Fits in a Responsible Strategy

Cryptographic fairness is necessary but not sufficient. A provably fair Dice game with a 1% house edge still has a 1% house edge — the math does not care how honest the implementation is. Treat verification as insurance against a specific failure mode (post-hoc tampering), not as a reason to bet larger or longer. Bankroll sizing, stop-loss rules, and variance expectations remain the real levers you control. Provably fair simply removes one excuse for suspicion when variance inevitably punishes a session.

Takeaway

Provably fair turns a casino from "trust the operator" into "verify the math." That is a meaningful upgrade, but only if you actually verify. Rotate your seed regularly, keep a minimal verification script in your tooling, and sample-check bets after each session. The house edge will not budge, but you will have hard cryptographic evidence that every loss was the result of math, not manipulation — and that is the right baseline before any strategy conversation even starts. Gambling carries real risk; fairness of the RNG does not change the expected value of betting into a negative-edge game.

GET SSPILOT

Put this guide to work — download SSPilot

Automate Stake Dice, Limbo, Mines, Plinko, Slots and bonus claiming with a single free tool. Built-in strategies, live stats and stop conditions.

Download Free
  • 100% free
  • Instant setup
  • Windows & Mac