Provably Fair and Result Verification
Online gambling often raises a basic question: “Can I trust the results?” In a land casino, you can see cards, dice, and wheels. In an online casino like Stake, Provably fair exists to reduce that doubt. It gives you a way to verify that a result followed the published method and that no hidden change happened after your bet.
Verification does not depend on a promise from us. You can check the inputs yourself and confirm the outcome matches the calculation. The system uses two key ideas: a commitment step that locks our secret input before play, and cryptographic hashing that proves the lock later.
A short way to think about it is:
Result = our secret input + your input
Our secret input is committed in advance through a hash; your input is part of the calculation, and counters keep each bet unique.
Commitment and Hashing in Clear Terms
A commitment works like a sealed note. We pick a secret value called a server seed. Before you place bets, we show you a hash of that server seed. A hash is a one-way fingerprint. It can be shared publicly, but it does not reveal the server seed itself in practical terms.
After play, we reveal the server seed. You can hash it on your side and compare it with the earlier fingerprint. If both match, the server seed stayed the same from the start. That matters because a changed server seed could change outcomes.
Hashing also helps you because it blocks prediction. If you only see the hash, future results cannot be calculated ahead of time.
The Inputs That Define Each Verifiable Bet
Each verifiable bet uses 4 inputs: server seed, client seed, nonce, and cursor. All 4 are important because they play different roles in the calculation.
Server Seed and Server Seed Hash
Stake creates the server seed as a random 64-character hex string. Before any bet, we show you the hashed server seed. The hash acts as proof that we committed to a specific seed at that time.
To reveal the seed behind the hash, you rotate seeds. Rotation replaces the current server seed with a new one and reveals the old server seed. After that, you can check the match:
- Hash the revealed server seed;
- Compare it to the earlier server seed hash.
A match confirms that the committed server seed did not change after your bets.
Client Seed and Your Control
Client seed belongs to you. It exists so results do not depend on our input alone. If only our server seed controlled outcomes, you would not influence the random source. Client seed prevents that.
You can change your client seed at any time through the fairness section. A new client seed changes the future chain of outcomes. Many players set their own client seed because it gives clearer confidence: your input is part of every result.
During signup, your browser may create a default client seed so you can play without delays. That default can work, but a custom client seed gives you direct input that you choose.
Nonce and Why Each Bet Is Different
Nonce is a number that increments by 1 each time you place a new bet. Nonce keeps each bet unique even when the server seed and client seed stay the same. Without a nonce, repeated inputs could lead to repeated outcomes.
Nonce also helps verification. Your bet history includes the order of bets, and nonce follows that order. If you use the same inputs and the same nonce, the calculation produces the same result.
Cursor and When Extra Output Is Needed
The core calculation produces 32 bytes at a time. Many games need more than one random value per bet. Some games need more values than a single 32-byte output can supply. Cursor exists for those cases.
Cursor starts at 0. The cursor increases by 1 when more output blocks are required for a single bet. If a game needs 8 or fewer random values from that output, the cursor stays at 0.
Card-heavy games often need cursor increments. Single-result games usually do not.
How Random Output Is Produced
For each bet, we use a cryptographic function called HMAC_SHA256. Inputs include server seed, client seed, nonce, and cursor. The function returns a 32-byte output shown as a hex string.
Those bytes are raw randomness. After that, the bytes get converted into numbers that games can use.
Bytes to Floats and Why 4 Bytes Are Used
Games need numbers such as card indexes, pocket numbers, or grid positions. We take the 32-byte output and split it into chunks of 4 bytes. Each 4-byte chunk is converted into a float from 0 to 1.
Use of 4 bytes per float increases precision. Higher precision reduces rounding bias compared with 1-byte conversion.
A single 32-byte output produces 8 floats because 32 / 4 = 8. If a game needs more than 8 floats, the cursor triggers another 32-byte output.
Floats to Game Events
After floats exist, the system converts them into game events. A game event is the concrete outcome you see, such as a dice roll value, a roulette pocket, a card, or a mine location.
Conversion follows a standard rule:
- Multiply the float by the number of possible outcomes for that step;
- Round down to an integer index;
- Map that index to a game event.
A 52-card example is easy to picture. A float times 52 gives a value from 0 up to just under 52. Rounding down gives 0–51. That integer maps to a specific card index.
Multi-step games repeat this process for each event needed.
No-Repeat Outcomes and How Duplicate Events Are Avoided
Some games require unique outcomes inside a single round. A deck cannot deal the same card twice in a single-deck model. Keno cannot pick the same square twice. Mines cannot place 2 mines on the same tile.
For these cases, the pool of available outcomes shrinks after each selection. After one item is selected, it is removed from the pool. The next float is multiplied by the new pool size, which is smaller by 1. This method prevents duplicates.
We use the Fisher–Yates shuffle approach to support this no-repeat logic. The core idea is simple: each selection reduces the list of available items, and the next selection uses the reduced list.
Independent Outcomes and Why Past Play Does Not Change Future Results
Each bet is independent. Results do not change based on prior wins, prior losses, time spent playing, or wager size history. The algorithm always uses the same rule set, and the nonce keeps bets distinct.
A belief that a win becomes “due” after many losses does not fit with this system. The next outcome is based on the next nonce and the same inputs, not on a memory of past events.
Third-Party Verification and Community Tools
Verification can be done on our website, and it can also be done through community tools. Community tools help because they let you confirm results outside our platform.
Community projects often publish their verification procedures and keep them open for review. Using an external tool can help you confirm that your own calculation matches the recorded result.
Industry Standards and External Networks
We also take part in industry efforts that promote verifiable fairness in crypto gambling. One example is the Crypto Gambling Foundation network, which focuses on education and standards around provably fair systems.
Network participation does not replace your own checks. Your verification remains the most direct way to confirm results.
What Provably Fair Confirms and What It Does Not Confirm
Provably fair confirms that results match the published algorithm and inputs. It proves that the server seed was committed before play and later revealed without change. It confirms that your client’s seed was part of the calculation.
Provably fair does not guarantee wins. It does not remove the house edge in games where a house edge exists. It does not turn gambling into a low-risk activity. It also does not remove the need for responsible play.
Closing Notes on Transparency
We use provably fair so you can verify results independently. The method relies on committed server seeds, player-controlled client seeds, and repeatable calculations through HMAC_SHA256. When you choose to verify, you can confirm that a bet outcome follows the same rule every time, with no hidden adjustment after the bet is placed.
Updated: