How Provably Fair Actually Works

March 21, 2026 · 6 min read

Every game on spunk.bet is provably fair. That phrase gets printed on a lot of casino homepages without anything behind it, so here is exactly what the scheme is, what it proves, and what it does not.

The problem it solves

A conventional online casino runs its random number generator on its own servers. You see a result. You cannot see the seed, the algorithm, or whether the result was picked before or after you placed the bet. The only thing standing between you and a rigged outcome is a licence and an audit report you did not read. Provably fair replaces that trust with a commitment you can check yourself, after the fact, with a hash function.

Commit, bet, reveal

  1. Commit. The server generates a random server seed and shows you only its SHA-256 hash. The hash is published before your first bet, so the seed is locked in. Changing the seed later would change the hash and expose the swap.
  2. Your input. You set a client seed to any string you want. Because the server does not know what you will choose, it cannot pick a server seed that produces a losing result for your specific bet.
  3. Nonce. A counter that starts at zero and increments once per bet. Same seeds, different nonce, different result.
  4. Compute. The result is HMAC-SHA256(server_seed, client_seed:nonce). The first four bytes of the digest are converted into a number between 0 and 1.
  5. Reveal. When you rotate your seed pair, the old server seed is published. You hash it and confirm it matches the hash committed at step one, then recompute every bet you made under it.

Turning a hash into a game result

The standard conversion takes four bytes and treats them as descending fractions, which spreads them evenly across the interval:

float = b0/256 + b1/256^2 + b2/256^3 + b3/256^4
dice roll = floor(float * 10001) / 100   -> 0.00 to 100.00

Each of the ten games maps that float differently. Dice compares it to your target. Crash feeds it into a multiplier curve. Mines uses successive values to shuffle tile positions. Keno draws ten of forty. Same primitive underneath, ten different presentations.

Why the 1% edge is separate from the fairness

At 99% RTP on Dice, a roll-under target of 50.50 wins 50.50% of the time and pays 99 divided by 50.50, which is 1.9604x. Target 2.00 and you win 2% of the time for 49.5x. Target 98 and you win almost always for 1.0102x. The edge is the same 1% in every case because the payout formula is 99 divided by the win chance. There is no setting that removes it, and no seed that beats it.

What this does not prove

Verification proves the result was not tampered with after your bet. It does not prove the paytable is generous, it does not prove the operator will honour a withdrawal, and it certainly does not mean you will profit. A provably fair game with a 15% house edge is still a bad game. Check the edge first, then check the seeds.

Run the check yourself

Open the Provably Fair panel on any game. You will see the current server seed hash, your client seed and the nonce. Change the client seed to something you invented, play a batch of bets, then rotate. Take the revealed server seed, run it through SHA-256 and compare it to the hash you noted. Then recompute a few results by hand. Any generic HMAC-SHA256 tool will do it in seconds. Don't trust. Verify.