Every round in every game is decided by a value we committed to before you bet, combined with a seed you control. Nothing on this page asks you to take our word for it — the last section is the command that checks us.
We commit first.
The server generates a 32-byte seed and publishes only its SHA-256 hash. That hash is on this page before you place a bet, and it cannot be changed afterwards without the reveal failing to match it.
You pick the other half.
Your client seed goes into every derivation alongside ours. Because you can set it after we have committed, we cannot have chosen our seed to suit yours.
Each round advances a nonce.
The outcome is HMAC-SHA256 keyed with the server seed over "clientSeed:nonce:cursor". Same three values, same bytes, every time, in any language with a standard crypto library.
Rotating reveals the seed.
When you rotate, the old server seed is published. Hash it and compare it to the commitment you were shown; then recompute every round it settled and compare those too.
Sign in to see your own seed pair.
The scheme above is the same for everyone, but the commitment, the nonce and the reveal belong to your account.
Everything above is about rounds that are yours: your seed pair, your nonce, your outcome. Live Crash has one rocket that everybody rides, so its crash point cannot come from any one player’s pair — the player who rotated that pair would be handed every future flight.
So the house holds the seed, and the house’s honesty is made checkable a different way. Before a single flight is flown we generate a chain backwards: a random last seed, then each earlier link as the SHA-256 of the one after it. We publish the first value — the head — and then fly the chain forwards, revealing each seed the moment its flight ends.
That means one hash checks one flight: sha256(this flight’s seed) is the previous flight’s seed, and the chain of them runs back to a value published before any of it happened. We cannot change an outcome after the fact, and we cannot reorder or insert a flight, because position in the chain is the hash relation. Every finished flight carries its seed on the board, so the trail is in the page rather than behind a request.
a7bda45b9159516772c4e98bb56748bc4d1e08da6d521824540afa4e9dbd37d6Check the most recent link with the same verifier, passing the flight’s seed, the head, its index in the chain, and the neighbouring seed as the commitment:
npx tsx scripts/verify-fair.ts --server 315100b664fe24daf4d2b8bb72e8ed8d5e39a718d5fbf30f459300639a04fde4 --client 'a7bda45b9159516772c4e98bb56748bc4d1e08da6d521824540afa4e9dbd37d6' --nonce 357 --game crashlive --hash d6e4ff9c41c3b3847aa0c51c08da4446c11eb1a448435429065b1897fe05490b
That recomputes flight #357, which went at 8.88x, and checks its place in the chain at the same time.
One thing this does not prove, and it is worth saying rather than waiting to be asked: the whole sequence was fixed before the first flight, so we could not alter it — but we did see it when the chain was made. That is true of every pre-committed chain anywhere. What makes the commitment worth something is that the head above was published, with a timestamp, before any of these flights were flown.
The verifier ships in this repository and calls the same functions the server pays out from, so it cannot agree with us by being a second, separate implementation of the maths. Clone the repo and run:
npx tsx scripts/verify-fair.ts --server <revealed server seed> --client '<your client seed>' --nonce 0 --game roulette --hash <the hash you were shown>
0 — verified: the round was recomputed and the commitment matched.1 — the published commitment does not match the revealed seed. This is the only exit code that means we are wrong.2 — a usage or input error. Nothing was checked.3 — the build could not verify that game. Never read a 3 as a pass.It also prints the openssl and Python one-liners that reproduce the same bytes, for anyone who trusts neither the script nor us.
| Game | Return to player | Min stake | Max stake |
|---|---|---|---|
| Crash Live | 99.00%The same construction, drawn from the published house chain rather than your own seed. | 100 | 250,000 |
| Crash | 99.00%The same return at every cash-out target, by construction. | 100 | 250,000 |
| Roulette | 97.29%Set by the wheel: 36 of 37 pockets pay, so the return is 36/37. | 100 | 250,000 |
| Plinko | 99.00%Target return to player, built into the payout table. | 100 | 250,000 |
| Mines | 99.00%Target return to player, built into the payout table. | 100 | 250,000 |
A single round returns at most 1,000,000,000 coins. The cap exists because the Mines ladder is unbounded in the way that matters — one round at the stake ceiling could otherwise return more coins than the Drop has ever paid out — and because every payout has to stay inside the range where integer arithmetic is exact.