Skip to content
Race10:03

Provably fair

Every house result comes from seeds committed before you play. Check any round here.

How a result is made

  1. Before a round, the site generates a random server seed and shows you its SHA-256 hash — the commitment.
  2. You have a client seed you can change any time. Every round uses clientSeed:nonce. The nonce goes up by one for every play you start; a play the site refuses (balance, a limit, the largest win per round) still uses its nonce, so your rounds can skip a number. A skipped nonce never produced a result.
  3. The result comes from HMAC-SHA256(serverSeed, message:cursor): eight floats in [0, 1) per hash, mapped to the game by a fixed rule (heads if the first float < 0.5, and so on).
  4. When you rotate, the server seed is revealed. Hash it, compare to the commitment, replay the maths — the verifier does it for any round id, and the standalone verifier (plain HTML, no framework) does the same without trusting this site's code; every mapping is in its source. Game rules and tables: rules.

Your seeds

Sign in to see your commitment, client seed and nonce.

Verifier

Live Crash rounds

Crash is one shared round for everybody. Its crash points come from a hash chain made before the first round: each round uses the link before the previous round's, so a revealed round hash proves every earlier one and none to come. The crash point is HMAC-SHA256(round hash, "salt:chainIndex:0") through Limbo's mapping, the same mapping as every Crash round before.

Terminal hash (published before round 1)f8faeb93cf92160670406663c9b7d0edd6bb6a775767d18c3f2d80ce3666713c
Public salt00000000000000000001d5fb23f1e0f3a4523ab4c8ef21be3bbaba05070e0053
Links used13,943 of 1,000,000

Race lucky draws

  1. Every race gets its own random seed about an hour before it starts; its SHA-256 is shown on the race page from then on. The seed itself stays secret until the race ends.
  2. When the race ends its final standings are frozen. The pool is every player who placed outside the paid places, in final order (pool entry 0 is the first place after the paid ones).
  3. The draw takes k floats from HMAC-SHA256(seed, race:<race id>:lucky:cursor) (the same stream as every game) and runs a partial shuffle: for i = 0 … k−1, j = i + floor(f[i] × (n − i)), swap pool[i] and pool[j]; lucky winner i is pool[i].
  4. The seed is revealed with the results: hash it, compare with the published hash, and replay the draw — the race page does it in your browser with one click.