PROVABLE FAIRNESS

Transparent, deterministic results using a commit–reveal scheme.

STEP 1
Commit Phase — Server seed hash
Before any round starts, we commit to the server seed by publishing only its SHA-256 hash.

We generate a secret serverSeed. We post its hash:
serverSeedHash = SHA256(serverSeed)

SERVER SEED (kept secret)

Only serverSeedHash is public at this time; the seed stays hidden to prevent prediction or manipulation.

STEP 2
Player input — Client seed & nonce
Your browser or wallet provides entropy that we cannot predict.

You provide a clientSeed. Each bet/round increases a nonce (starting from 0).

CLIENT SEED
NONCE
TIP
Use the same client seed; nonce increments per round.
STEP 3
Deterministic outcome — HMAC_SHA256
Combine both parties’ entropy and derive the result deterministically.

Compute R = HMAC_SHA256(serverSeed, `${clientSeed}:${nonce}`).

// Pseudocode H = SHA256(serverSeed) R = HMAC_SHA256(serverSeed, clientSeed + ":" + nonce) u32 = parseInt(R[0..8], 16) >>> 0 x = u32 / 2^32 // float in [0,1) roll = floor(x * 10000) / 100 // 0–99.99
STEP 4
Reveal & audit
After rounds conclude, we reveal serverSeed so anyone can verify outcomes.

Once revealed, anyone can recompute SHA256(serverSeed) and confirm it matches the original commitment (serverSeedHash).

  • Recreate the HMAC using your clientSeed and nonce.
  • Confirm the numeric transform (uint32 → float → roll) matches the UI.
  • Check serverSeedHash matches the original commit.

FAQ

Why HMAC with the server seed as key?

Using the secret serverSeed as the HMAC key ensures outcomes can’t be predicted from the public serverSeedHash. After reveal, everyone can recompute the same output.

Can the server choose a lucky seed?

The server commits to serverSeedHash before your inputs exist for that round. Player entropy (clientSeed, nonce) is unknown to the server at commit time, removing selection bias.

What if I reuse my client seed?

That’s fine; the nonce increments each round, changing the message for HMAC and producing new, unpredictable outputs.

Want to test live data? Use Verify a Round.