Skip to main content
A Crash round’s multiplier is decided before betting closes and cannot be changed afterwards. The backend publishes the SHA-256 hash of a random secret on-chain before bets open, the program mixes in a Solana slot hash when the round starts, and the secret is revealed at settlement so anyone can recompute the crash point and check it. This page gives the exact mechanism behind every Crash round: what is committed, when the outcome becomes fixed, the precise formula, and the honest limits of the scheme. If you haven’t yet, read the Provably fair overview first; it explains commit-reveal in plain words.

What happens on-chain during a Crash round?

Every Crash round is built from three on-chain transactions, in this order:
  1. Commit: before betting opens, the backend generates a random 32-byte secret and publishes its SHA-256 hash on-chain (the start_new_round instruction). This is the commitment: from this moment, only that exact secret can ever settle the round. The commitment is public in the transaction’s CrashRoundPrepared event.
  2. Betting: players place their bets. The secret stays hidden; the commitment guarantees it cannot be swapped.
  3. Round start / entropy capture: when the round begins (the start_game instruction), the program reads the most recent slot hash from Solana’s SlotHashes sysvar and stores it in the round. The app calls this value the round’s block hash. The crash point is now fully determined (it is a pure function of the stored slot hash and the committed secret), but nobody who doesn’t know the secret can compute it yet. The value is public in the CrashGameStarted event.
  4. The round plays out: the multiplier climbs and players cash out.
  5. Reveal: the backend submits the secret (the crash instruction). The program verifies on-chain that sha256(secret) equals the commitment (a mismatch makes the transaction fail), then computes the crash point itself and finalizes the round. The CrashRoundFinalized event publishes the secret, the slot hash and the final crash point.

What is the exact crash point formula?

The crash point is derived exactly like this (this is the arithmetic the on-chain program executes: integer math, no rounding surprises):
Notes on the details that matter when you recompute it:
  • The concatenation order is blockhash first, then secret.
  • X is read big-endian from the first 4 bytes of the SHA-256 output.
  • Divisions are floor (integer) divisions.
  • The max(10000, …) floor means the multiplier is never below 1.00x, and the cap on X prevents astronomically small denominators.

Worked example

With X = 0xABCD1234 (2,882,343,476) and the current 1% edge (edge_bps = 100):

What the distribution looks like

The formula maps a uniform X to the classic crash curve. The probability that a round reaches at least a multiplier m is approximately:
At the current 1% edge: about 49.5% of rounds reach 2.00x, about 9.9% reach 10x, and about 1% of rounds crash instantly at 1.00x (that is where the house edge lives). The edge that applies to each round is the configured value when the round starts: it is recorded with the round and emitted as edge_bps in its reveal event; the current value is listed in Fees and limits.

What is guaranteed, and what is not

Enforced by the program:
  • After the commitment is on-chain, the operator cannot change the round’s secret: the reveal transaction fails on any secret whose hash does not match.
  • Once the round has started (slot hash stored), the crash point is fixed. Cashing out early, late, or in large numbers changes nothing: the outcome was determined before the multiplier started climbing.
  • The crash point is computed by the program, not reported by the backend. A wrong value cannot be written on-chain.
  • Everything needed to verify (commitment, slot hash, secret, final crash point) is published in on-chain events, permanently.
The honest caveats (this is commit-reveal, not a VRF):
  • Start timing. The operator knows the secret before the round starts, and its backend decides when to submit the round-start transaction. Since recent slot hashes are public, it could in principle precompute the would-be multiplier for candidate slots and time the start to influence which slot hash is captured. The scheme does not prevent this; it makes it observable: round-start timing is public, and any systematic bias would show up in the statistics of published crash points, which anyone can recompute in bulk.
  • Cancels. After the round starts, the operator knows the outcome before players do, and it could cancel an unfavourable round instead of revealing. Two hard limits apply: a cancel refunds every stake in full (the program has no confiscation path), and every cancel emits a public event; cancel frequency is the on-chain tell. Cancelling exists as a recovery path for a lost secret (for example a backend crash between commit and reveal) and is expected to be essentially never used.

How do you verify a Crash round?

Each finished round’s details in the app show the revealed secret and the block hash, and link to all three transactions plus a fairness tool that recomputes the multiplier for you. For the full step-by-step, including a small script to recompute the crash point yourself, see Verify a round. For how the game itself is played (cash-out, betting windows, limits), see the Crash game guide.