A provably fair game lets you check, after the fact, that each result came from inputs the casino committed to before you bet. You do not have to trust the casino’s word for it. You need three values and a hash function.
The three inputs
- Server seed. A random string the casino generates. Before you place a bet, it shows you the SHA-256 hash of this seed, not the seed itself.
- Client seed. A string you control. You can change it at any time in the fairness settings.
- Nonce. A counter that starts at 0 and goes up by one with every bet on the current seed pair.
Because the casino publishes the hash first, it cannot swap the server seed later without the hash changing. Because you choose the client seed, the casino cannot have picked a server seed that suits your input.
How a result is produced
For Stake Originals, each result is derived with HMAC-SHA256. The server seed is the key, and the message is the client seed, the nonce and a round counter joined by colons:
hmac = HMAC_SHA256(key = serverSeed, message = clientSeed + ":" + nonce + ":" + round)
The output is 32 bytes. Every 4 bytes become one number between 0 and 1, by reading them as base-256 digits after the decimal point:
float = b0/256 + b1/256² + b2/256³ + b3/256⁴
One HMAC gives 8 floats. Games that need more, such as Keno drawing 10 numbers or Mines placing up to 24 mines, increase the round counter and hash again. Each game then maps its floats to an outcome. Dice, for example, multiplies the first float by 10,001, drops the fraction and divides by 100, which gives a roll from 0.00 to 100.00.
Two games work differently. HiLo is chained, so each nonce starts on the card the previous one ended on. Crash, Slide and Zoo do not use your seed pair at all: they run on a public hash chain, and each round is verified from that round’s hash.
Checking a past bet
- In Stake’s fairness settings, rotate your seed pair. This reveals the old server seed and starts a new one. See how to change your seed on Stake (opens in new tab).
- Hash the revealed server seed with SHA-256 and confirm it matches the hash you were shown before betting.
- Paste the server seed, client seed and the nonce into the Seed Checker (opens in new tab). It runs the derivation above in your browser and shows the result for each nonce, which you compare with your bet history.
The Seed Checker also simulates the rest of that seed pair: up to 1 million rounds as a guest, 50 million with a free account and 250 million with Verifier+, so you can see the RTP and streaks the pair would have produced.
What verification does and does not show
Verification proves that a result came from the committed seeds and the published algorithm. It does not make any result more or less likely, and it cannot tell you a future result. While a seed pair is active, the server seed is hidden behind its hash, and SHA-256 cannot be reversed in any practical amount of time. The Stake Analyzer post on whether a server seed can be cracked (opens in new tab) works through the numbers.
Each nonce is hashed on its own, so the result of bet 500 does not depend on bets 1 to 499. That is the property the guide on streaks builds on.