Skip to content
LUDO CASH ARENA

Provably fair · hmac-sha256-v1

Check the dice yourself

Every roll in Ludo Cash Arena is locked in before the match starts and can be recomputed by anyone afterwards. You do not have to trust us: verify it here, in your own browser.

Provably fair dice are rolling out. Matches will show their seeds in the Fair play button soon; the calculator below already works.

Verify a match

Find it in the Fair play sheet of any match, or in your match history.

Or paste the seeds

Fair play

How fairness works

  1. 1We lock the dice before the first roll

    When a match is created the server picks a secret random server seed and shows you only its SHA-256 fingerprint (the server seed hash). From then on the seed cannot change without the fingerprint changing.

  2. 2Your seed is mixed in

    Every player has a client seed (random, or one you choose in the Fair play sheet). The match's client seed is all players' seeds in seat order plus the match id, so we cannot know the dice before you sit down.

  3. 3Each roll is a numbered calculation

    Roll number 0, 1, 2 and so on (the nonce) gives one die from HMAC-SHA256 of the server seed and the client seed. Bots' rolls count too, so nothing is skipped.

  4. 4After the match you can check everything

    The server seed is revealed. Paste it here: your browser checks it matches the fingerprint shown at the start and recomputes every die.

The exact algorithm

Anyone can implement this in a few lines (Python, JavaScript, a spreadsheet) and get the same dice.

serverSeedHash = hex( SHA-256( serverSeed ) )      // serverSeed = 64 hex characters, hashed as text
clientSeed     = seed(seat 0) | seed(seat 1) ... | matchId    // humans only, joined with "|"

for each roll number nonce = 0, 1, 2, ...
  for round r = 0, 1, 2, ...
    message = clientSeed + ":" + nonce              (r = 0)
            = clientSeed + ":" + nonce + ":" + r    (r > 0)
    h = HMAC-SHA256( key = serverSeed as UTF-8 text, message as UTF-8 )
    for each of the 8 big-endian 32-bit words x in h:
      if x < 4294967292:            // 6 x 715827882, so every face is equally likely
        die = (x mod 6) + 1         // done
    // all 8 words rejected (about 1 in 10^37): next round r

What it proves

The dice were fixed before the first roll and nobody, including our staff, could change them mid-game. There is no admin tool that sets dice or outcomes.

What it does not promise

Fair dice are random. Nobody can guarantee a win, and a losing streak is part of chance. Play for fun and within your limits.

Read the full game rules or responsible play.

Chat on WhatsApp