How to verify a provably-fair dice roll

Don't trust us — check the math. Every roll on WTF $1 Dice can be reproduced from public data, and this guide shows exactly how.

Why this works

Before you place a single bet, we commit to a secret server seed by publishing its SHA-256 hash. You control a client seed we can't predict, and every roll uses an incrementing nonce. Because the server seed is fixed before your client seed exists, neither side can bias a result — and once the server seed is revealed, anyone can recompute every roll it produced.

Step 1 — Record the server seed hash

Open the fairness panel on the dice page. Copy the value labelled server seed hash. This is SHA256(server_seed), published before any of your rolls.

Step 2 — Set your client seed

In the same panel, set the client seed to anything you like — a random string you generated is best. The server seed was already fixed, so we cannot adapt to your choice.

Step 3 — Play, and note each roll's nonce

Every roll shows its nonce (0, 1, 2, …). The triple (server_seed, client_seed, nonce) fully determines that roll's result — nothing else is involved.

Step 4 — Rotate your seed to reveal the secret

Click rotate seed. The old server seed is revealed in plain text and a new hashed one takes over for future rolls. Past rolls are now fully verifiable.

Step 5 — Verify with 10 lines of code

First confirm the reveal is honest: SHA256(server_seed) must equal the hash from step 1. Then recompute any roll:

const crypto = require('crypto');

function diceResult(serverSeed, clientSeed, nonce) {
  const digest = crypto.createHmac('sha256', serverSeed)
    .update(`${clientSeed}:${nonce}`)
    .digest('hex');
  // First 8 hex chars -> 32-bit integer -> uniform roll in 0.00 .. 99.99
  const n = parseInt(digest.slice(0, 8), 16);
  return (n % 10000) / 100;
}

console.log(diceResult('revealed-server-seed', 'your-client-seed', 0));

If the output matches the roll you saw on screen — for every nonce — the game was fair. If it ever didn't match, you'd have cryptographic proof of tampering.

Try it without risking anything

Fun mode gives you a $1,000 virtual balance on the same provably-fair engine (its own seed chain, same math). Create an account, flip the Fun toggle, and walk through this guide with virtual bets before playing for real from $1.

Related: How WTF $1 works · Plinko RTP explained

🔞 18+ only. Please gamble responsibly.