Imagine playing virtual blackjack at an online casino. You win a few hands in a row. Feeling confident, you decide to raise your bet. Despite playing perfect strategy, you lose your next hand. And the next one. And the one after that. Hoping to make it back, you raise your stake again, only to lose, yet again.
It’s enough to make any player think:
“This is rigged! The casino knew exactly when I raised my bet and manipulated the game to force me to lose.”
Fortunately, thanks to Provably Fair technology, gone of the days of that type of fear. At most top online crypto casinos, you can rest assured knowing that, even if that lengthy losing streak hits, it’s simply a run of bad luck rather than shady casino tampering.
The cryptographic transparency of Provably Fair games is particularly nice at crypto casinos, given that their offshore licenses are often based in some obscure island off the coast of South America or Africa. Provably Fair games provide some level of security and trust that they might not have otherwise.
What does “Provably Fair” Mean?
If a casino game is labelled “Provably Fair”, it means every single game outcome is generated via a deterministic, cryptographic verification algorithm.
That might sound complicated, but in layman’s terms, it just means that players are able to mathematically audit and verify that the result of the bet they just placed was random and unaltered by the casino in any way after the wager was placed.
Misconceptions
Now that we’ve defined what Provably Fair means, I’d argue it’s equally important to understand what it doesn’t mean.
To a mathematician, a game is “fair” if the expected value of the game is zero, or equivalently, if there is no house edge. For example, think of a coin flipping game against your friend, where you win $1 every time the coin lands on heads, and your friend wins $1 every time the coin lands on tails. Neither player here has an edge; the expected value for both players is zero, and we can safely call this a “fair” game mathematically.
For this reason, a game that is labelled “Provably Fair” might sound a bit misleading to some. After all, Provably Fair games at crypto casinos most definitely have a house edge. In fact, if a casino wanted, they could theoretically create a Provably Fair game with a diabolically large house edge of 10%, for example.
The takeaway is this: Provably Fair games are not necessarily better in terms of your winning chances. They still contain a house edge; the difference is simply that every bet is verifiably random.
Example: Dice on Rainbet
I’m soon going to play a round of Dice on Rainbet, one of the most popular crypto casinos in 2026. This Rainbet Original game is Provably Fair with a 99% Return-To-Player (RTP).
If you’re unfamiliar with the game Dice, it’s worth explaining, because it’s probably not what you’re imagining. The game surprisingly has nothing to do with a six-sided cube numbered 1 through 6. Instead, you get to choose a number using a slider (decimals included) between 0 and 100, and you wager on whether the game algorithm will select a number above or below your chosen number.
For example, if I were to set the slider at the midway point (50), the game becomes a virtual coin flip (with a slightly unfair payout). Suppose I decide to bet Under (that is, I need the game algorithm to select a number less than 50). If it does, I win 1.98x my stake, whereas if it chooses a number above 50, I lose my entire wager.
Setting The Stage
Before I place my bet, let’s define a few important terms when it comes to Provably Fair games:
- Actual Server Seed: This is a random string of letters and numbers generated by the casino, and is temporarily kept hidden from the player.
- Hashed Server Seed: This is the hashed version of the Actual Server Seed. This is revealed to the player before the game starts.
- Client Seed: This seed is freely chosen by the player.
- Nonce: This is a round counter; the number of rounds played using this exact Client Seed and Hashed Server Seed.
Among these four, the only one hidden from the player is the Actual Server Seed. It will only be revealed to players after they have changed seeds. Later, I’ll explain why it’s crucial (from the casino’s perspective) that it is kept hidden from the players until then.
Also worth mentioning is the fact that it is cryptographically impossible to obtain the Actual Server Seed from the Hashed Server Seed. It is irreversible by design.
Prior To Placing The Bet
I’m about to place my Dice bet, but let’s first make note of the Hashed Server Seed, Client Seed, and the Nonce I’m going to be using for this round.
The Hashed Server Seed, given to me by Rainbet, is:
08aa90cad447b5ee878642bf52c12e4c29be0348c5b599bf203c63a2ceb6bfb8
The Client Seed is completely within my control; I can make it whatever I’d like. And sure enough, that’s exactly what I’ve done. I’ve decided to name my Client Seed:
luckyhat123
Lastly, we’re given the nonce (round counter). When you start with a fresh set of seeds, the nonce will reset to zero. Every round you play with that set of seeds, the nonce increases by one. The purpose of the nonce is to ensure every round is unique, despite using the same Actual Server Seed, Hashed Server Seed, and Client Seed. The nonce is the only variable changing round-to-round.
I’ve already played a few rounds with this set of seeds, so you can see that my nonce is currently at 6.

At this point, everything is locked in. The outcome of the upcoming round of Dice I’m about to play is already predetermined. It depends only on the Actual Server Seed, Client Seed, and Nonce. Even Rainbet does not know what the outcome is going to be, but they have made us a promise. While they have kept the Actual Server Seed a secret, they’ve given us the hashed version of it. If they were to manipulate the outcome of the game at this point, they would necessarily need to change the Actual Server Seed, and when it’s later revealed to us, we can hash it ourselves and notice that it doesn’t match the Hashed Server Seed we were given at the start. That would imply that the game was manipulated in some unfair way.
Placing The Bet
I’ve placed the slider at 50, and I’m going to bet $10 on the outcome being Over 50. Here’s the result:

I lost my bet, as the algorithm picked the number 16.91.
Suppose I was now convinced that Rainbet completely rigged this result in their favor in order to win $10 from me. I can now verify why that wasn’t the case.
Verifying The Outcome (step-by-step)
I’d like to verify that the round of Dice I just played was completely down to the randomness of the algorithm as opposed to hidden manipulation from Rainbet. Here’s the process to follow:
- Change seeds.
Click on the Rotate Seeds button. Rainbet won’t reveal the Actual Server Seed until you do this.
- Go to your bet history and locate the bet in question.
Find the bet you want to verify. Make sure it matches the Client Seed, Hashed Server Seed, and Nonce from earlier. - Find the revealed Actual Server Seed.
This part has now been revealed by Rainbet. It is:a939f52fdd1f79ef9aa1d0d20d142c9996d4f1eab4657f44661b53dbc6c40afb - Verify the hashed version of the Actual Server Seed matches the Hashed Server Seed you were given at the start.
Using Rainbet’s on-site Provably Fair calculator, I can input the Actual Server Seed, and the hashed version of it should match the one Rainbet gave us earlier, just as they promised. - Verify the output matches the outcome of the game.
You’ll also want to verify that the outcome of the game is identical, and indeed it is (16.91).
Verifying the Outcome via a Third Party Website
Rainbet’s on-site calculator is there for convenience, but can we really trust it? How do we know it’s not programmed to make everything “look” fair?
For that reason, I’m also going to verify the result of my Dice roll on this NodeJS Compiler I found online. Luckily, Rainbet publicly publishes the code used to generate the outcome of their Dice game. You can find the code here.
Copy the code, input the Actual Server Seed, Client Seed, Nonce, and whatever bet you chose (in my case, Over 50), and paste it in the NodeJS Compiler. That’s exactly what I’ve done, and you can see the exact result of this experiment.
As you can see, everything lines up. The Hashed Server Seed I was given matches the hashed version of the Actual Server Seed, and the outcome of the game was exactly as I experienced (16.91):
Output:
21 ms | 46.5 MB
Actual server seed hash: 08aa90cad447b5ee878642bf52c12e4c29be0348c5b599bf203c63a2ceb6bfb8
Expected server seed hash: 08aa90cad447b5ee878642bf52c12e4c29be0348c5b599bf203c63a2ceb6bfb8
Server seed hash matches: true
Dice result:
{
rollRaw: 1691,
rollValue: 16.91,
bet: 50,
over: true,
isWinResult: false
}
Final roll: 16.91. Bet was Over 50. LOSS
Why This Proves Fairness
It’s very possible that you’ve followed everything I’ve done so far, step-by-step, and still don’t fully understand why this proves Rainbet didn’t manipulate my game outcome.
Let’s think of this from Rainbet’s perspective. It’s the best explanation that made it all click for me:
- We (Rainbet) come up with a server seed (Actual Server Seed). We keep it a secret from the user, hash it, and give the Hashed Server Seed to the user.
- The user then selects their Client Seed, while the nonce helps make every round unique rather than the user having to rotate seeds every time.
- From this point, everything is out of our control. We do not know what the outcome of the game is going to be, and we also do not know what the user is going to bet. They can bet as much money as they want, set the slider anywhere they want, and freely choose to bet Over or Under their chosen number.
- Since the game is determined by code that inputs the Actual Server Seed, Client Seed, and the Nonce, we cannot manipulate the game outcome without changing the Actual Server Seed. And if we change the Actual Server Seed, the user would notice later on when we reveal it to them. They’d be able to hash the Actual Server Seed and see that it doesn’t match the Hashed Server Seed that we gave them earlier.
Why Rainbet Needed To Keep The Actual Server Seed a Secret
Suppose Rainbet accidentally revealed the Actual Server Seed before we rotated seeds. What would that allow us to do?
That would practically give us the keys to the gates of heaven. Why? Because then we can head back over to the NodeJS Compiler, input all the variables, and repeatedly run the code over and over while only changing the nonce (1, 2, 3, 4, and so on) allowing us to predict the outcome of every single round of the game with that set of seeds with 100% certainty, forever.
In other words, you’d be able to safely go all-in every round, correctly guessing Over or Under, knowing exactly what the round outcome is going to be.
It would be, quite literally, an infinite money glitch.
Conclusion: The Key Takeaway
The primary reason I find Provably Fair games so fascinating boils down to this realization: If I had gone back and deposited my entire life savings into Rainbet and bet it all instead of that measly $10 from earlier, kept the exact same Client Seed, Hashed Server Seed, and Nonce, and simply bet Under 50 instead of Over 50, the result still would have been exactly 16.91. I would have nearly doubled my net worth, and there is absolutely nothing Rainbet could have done to change it.