Transparency · verification
How to verify a provably fair crash game, step by step
'Provably fair' only means something if you can actually do the proof. Here's the full mechanism — server seed, client seed, nonce, and the hash-to-multiplier formula — plus exactly how to recompute a real round and confirm it was fixed before you bet.
- A provably-fair crash point is computed as crashPoint = floor((100 − edge) ÷ (1 − h)) ÷ 100, where h is the first 13 hex characters of the round hash read as a 52-bit fraction (13 × 4 bits), the model Bustabit introduced and still publishes through its creator's hash-chain verify.js (7 August 2020, re-read 6 October 2026).
- The hash combines three inputs, typically HMAC_SHA256(serverSeed, clientSeed:nonce); the server seed's hash is shown before you bet and the seed itself only after, which is what makes the commitment checkable.
- The house edge is produced by instant busts at 1.00× on a fraction of rounds equal to the edge: about 1 in 100 rounds at 99% RTP, 3 in 100 on Aviator at 97% (Spribe's figure, restated on Tuttosport's Aviator page updated 1 October 2026; read 6 October 2026), 5 in 100 on Rollbit X Crash.
- Verification takes five steps and any offline SHA-256/HMAC tool; you never need the casino's own calculator.
- Verification proves integrity (the result was fixed before your bet), not value: EV stays at −(house edge) on every verified round.
What does provably fair mean in a crash game?
It means you can prove after the round that the operator committed to the result before you bet and could not change it once your wager was in. The operator publishes a hash of a secret server seed in advance and reveals the seed afterwards; because the hash cannot be reversed, the two must match. It is a guarantee of integrity, not of good odds.
A provably-fair game lets you prove, after the fact, that the operator committed to a result before you bet and could not have altered it based on your wager. It does this with cryptographic commitment: the server picks a secret (the server seed), shows you a hash of it in advance, and only reveals the secret later. Because a good hash can't be reversed, the operator is locked in — the hashed value they showed you can only have come from the seed they later reveal.
Critically, this proves integrity (the result wasn't manipulated), not fairness of odds in the everyday sense. The house edge is still baked into the formula. Provably fair means "not rigged against you beyond the stated edge" — not "a good bet". Keep that distinction in mind throughout.
What are the server seed, client seed and nonce?
The server seed is the operator's secret, shown only as a hash until revealed; the client seed is a string you control, so neither side can fix the result alone; the nonce is a counter that increments every round so one seed pair yields a fresh result each time. Combined, usually as HMAC_SHA256(serverSeed, clientSeed:nonce), they produce the hash the crash point is read from.
- Server seed: a long random string the operator generates and keeps secret. You see only its hash (e.g. SHA-256) until it is revealed.
- Client seed: a string you control (often editable in settings). Because the result depends on your input, the operator can't have pre-computed a result tailored against you — neither side can fix the outcome alone.
- Nonce: a counter that increments each round, so the same seed pair produces a fresh result every round without re-seeding.
The three are combined — typically HMAC_SHA256(serverSeed, clientSeed:nonce) — to produce the hash that determines the crash point. Change any one and you get a completely different, unpredictable result.
How is the crash point calculated from the hash?
Take the first 13 hex characters of the round hash, read them as an integer and divide by 2⁵², giving a uniform fraction h between 0 and 1. The crash point is then floor((100 − houseEdge) ÷ (1 − h)) ÷ 100: a small h gives a low multiplier, an h close to 1 a huge one, and the uniform distribution of h is what makes P(reach m) = RTP ÷ m. The industry-standard conversion from hash to crash point is:
where h is a fraction in [0,1) derived from the hash. The common derivation takes the first 13 hex characters of the hash, reads them as an integer, and divides by 2^52 — a 52-bit value (13 hex digits × 4 bits = 52 bits). So:
Worked intuition: when h is small, 1 − h ≈ 1 and the crash point is near (100 − edge)/100 — a low multiplier. When h is close to 1, 1 − h is tiny and the multiplier balloons toward the game's maximum. The distribution of h being uniform is exactly what makes P(reach m) = (100 − edge)/100 ÷ m = RTP/m.
Why does the instant-bust rate equal the house edge?
Here is the elegant part. The house edge isn't an extra fee bolted on — it's produced by forcing a small fraction of rounds to bust instantly at 1.00×. Specifically, a fraction of rounds equal to the house edge is mapped to an immediate bust:
- 99% RTP (1% edge): ~1% of rounds instant-bust at 1.00×
- 97% RTP (3% edge, Aviator): ~3% of rounds instant-bust
- 95% RTP (5% edge, Rollbit X Crash): ~5% instant-bust
That's why a higher-edge game "feels" like it busts early more often — because it literally does, on more rounds. Our simulator reproduces this faithfully: switch the edge and watch the instant-bust frequency (and your ruin rate) rise.
How do you verify a crash round yourself?
Five steps: note the hashed server seed and your client seed before playing, play your rounds, rotate the seed so the old one is revealed, hash the revealed seed and confirm it equals the hash you noted, then recompute each round's HMAC and crash point and compare with what you saw. Any offline SHA-256 tool reproduces the numbers. The general procedure, which works on any operator that exposes the seeds:
- Before playing, note the hashed server seed the operator displays, and set (or note) your client seed.
- Play your rounds. The nonce increments each round.
- Rotate / reveal the server seed. Most sites require you to "rotate" to a new seed before they'll reveal the old one — this prevents you peeking at future results.
- Confirm the commitment: hash the revealed server seed and check it matches the hash shown in step 1. If it matches, the operator couldn't have changed the seed after you bet.
- Recompute each crash point: compute
HMAC_SHA256(serverSeed, clientSeed:nonce)for each round, take the first 13 hex chars, deriveh, and apply the formula. The result must match the crash points you observed.
You don't need to trust a calculator — any SHA-256/HMAC tool (including offline ones) reproduces these values. Reputable operators also publish their own verifier and the exact derivation. If a site can't show you the seeds and the formula, it is not meaningfully provably fair.
How do Stake, BC.Game and Bustabit implement provably fair?
Stake exposes a Fairness tab with an editable client seed, hashed server seed, nonce and a built-in verifier. BC.Game commits a chain of 10,000,000 results in advance and plays it in reverse. Bustabit, the 2014 original, publishes an open 52-bit formula and seeded its chain through public BitcoinTalk events. Aviator offers a seed reveal; Spaceman does not.
| Game | Commitment method | What you can recompute | Source / checked |
|---|---|---|---|
| Stake Crash | Hashed server seed shown pre-round; client seed editable; nonce per round | Every round after seed rotation, in the Fairness tab or offline | Stake Fairness tab and docs; July 2026 research |
| BC.Game Crash | Pre-generated chain of 10,000,000 results consumed in reverse | Any past round from the chain hash | BC.Game Crash fairness page; July 2026 research |
| Bustabit | Hash chain seeded publicly; open 52-bit formula | The entire chain from the terminating hash and salt | Creator's verify.js gist, 7 Aug 2020; re-read 6 Oct 2026 |
| Aviator (Spribe) | Server seed hash pre-round plus the first three bettors' client seeds; SHA-512 result | Each round from the revealed seeds | Spribe rules as restated on Tuttosport, updated 1 Oct 2026; read 6 Oct 2026 |
| Spaceman (Pragmatic Play) | Certified RNG, no seed reveal | Nothing round-by-round | Pragmatic Play game sheet; July 2026 research |
- Stake: a Fairness tab with editable client seed, pre-shown hashed server seed, nonce, and a built-in verifier. The cleanest mainstream implementation.
- BC.Game: a pre-generated chain of 10,000,000 results played in reverse — the whole sequence is committed in advance and consumed backwards, so outcomes can't be reordered.
- Bustabit: the original and most open — a self-verifiable 52-bit formula, public BitcoinTalk seeding events, and open-source elements. The gold standard.
- Provider games (Aviator, Spaceman): Aviator offers provably-fair verification; Spaceman is RNG-based and generally does not expose a crypto seed reveal — a real transparency gap versus the crypto originals.
What does provably-fair verification prove, and what does it not?
Be precise about the guarantee:
- It proves: the result was fixed before your bet and matches the published formula; the operator didn't tamper round-by-round.
- It does not prove: that the game is a good bet (the edge is real and negative), that the operator is solvent or licensed, or that an unrevealed server seed was generated randomly rather than cherry-picked from many candidates (a subtle attack reputable, audited operators mitigate). Verification is necessary for trust, not sufficient on its own.
In short: provably fair is a powerful, checkable integrity guarantee — and a great reason to prefer crypto originals over black-box RNG. It is not a route to profit. The maths in our strategy guide still holds: EV = −(house edge), verified or not.
Frequently asked questions
How is a crash game's crash point calculated?
From a cryptographic hash of the server seed, your client seed and a nonce. The first 13 hex characters of the hash form a 52-bit fraction h, and crashPoint = floor((100 − houseEdge)/(1 − h))/100. The hashed server seed is committed before the round and revealed after, so you can verify it.
What does provably fair actually guarantee?
That the result was fixed before you bet and was not manipulated round-by-round — you can recompute it and check the server-seed hash matches. It does not make the odds good: the house edge is still built into the formula and the game remains negative-EV.
Why do higher house-edge crash games bust early more often?
Because the instant-bust frequency at 1.00x equals the house edge: about 1% of rounds at 99% RTP, 3% at 97%, 5% at 95%. A higher edge literally forces more rounds to bust immediately.
Can I verify a crash result without trusting the casino's tool?
Yes. Any independent SHA-256/HMAC tool reproduces the same hash, so you can recompute the crash point from the revealed seeds yourself and confirm it matches both the published hash and the observed result.
Formula and derivations reflect the standard industry model; exact implementation details (hash function, hex-digit count) can vary slightly by operator — always check the operator's own fairness documentation. Educational content, 18+.