originals
Crash Game Math: How the Multiplier Curve Works
Crash game math derived from scratch: how the bust point comes from the hash, why every cash-out target has the same expected value, and what really changes.
A crash round shows a multiplier climbing from 1.00×, and you press cash out before it stops. In the standard provably fair implementation, the probability that a round reaches any multiplier m is (1 − edge) / m — with a 1% house edge, that is 0.99 / m. Everything else about the game falls out of that one line: the odds at every target, why no cash-out strategy beats any other, and where the operator’s 1% actually comes from.
How the bust point is generated
The bust point is not rolled at the moment the graph stops. It is fixed before the round starts, derived deterministically from a hash, which is what makes it checkable afterwards. The server seed, client seed and nonce go into an HMAC-SHA256, and the digest is converted into a number.
The conversion has three steps, and the same three steps appear in essentially every implementation:
- Take a fixed slice of the hex digest and read it as an integer.
- Divide by the maximum value that slice can hold, producing a uniform random number on the unit interval.
- Transform that uniform number into a heavy-tailed multiplier.
Step 3 is the interesting one. If U is uniform on (0, 1], then 1/U has the property that P(1/U ≥ m) = 1/m — a perfectly fair, zero-edge crash game. To install a house edge of e, the constant is scaled:
import hmac, hashlib
HOUSE_EDGE = 0.01
def crash_point(server_seed: str, client_seed: str, nonce: int) -> float:
msg = f"{client_seed}:{nonce}"
h = hmac.new(server_seed.encode(), msg.encode(), hashlib.sha256).hexdigest()
r = int(h[:13], 16) / 2**52 # 52 bits -> uniform on [0, 1)
u = 1 - r # uniform on (0, 1]
raw = (1 - HOUSE_EDGE) / u # heavy-tailed
return max(1.0, int(raw * 100) / 100)
Read the last two lines carefully. raw ranges from 0.99 upward. Whenever raw lands below 1.00 — which happens with probability exactly 1% — the round is clamped to 1.00× and displayed as an instant bust, a round that ends before anyone can act. That single clamp is the entire house edge.
The odds at every multiplier
With e = 0.01, P(reach m) = 0.99 / m. Every figure below is that division and nothing more.
| Cash-out target | P(round reaches it) | Rounds per hit | Rounds busting below it |
|---|---|---|---|
| 1.00× (any round at all) | 99.00% | 1.01 | 1.00% |
| 1.20× | 82.50% | 1.21 | 17.50% |
| 1.50× | 66.00% | 1.52 | 34.00% |
| 2.00× | 49.50% | 2.02 | 50.50% |
| 3.00× | 33.00% | 3.03 | 67.00% |
| 5.00× | 19.80% | 5.05 | 80.20% |
| 10.00× | 9.90% | 10.10 | 90.10% |
| 20.00× | 4.95% | 20.20 | 95.05% |
| 50.00× | 1.98% | 50.51 | 98.02% |
| 100.00× | 0.99% | 101.01 | 99.01% |
| 1000.00× | 0.099% | 1010.10 | 99.901% |
Two consequences worth sitting with. First, half of all rounds bust below 1.98× — set 0.99 / m = 0.5 and solve. The median round is unspectacular, and the graph you remember is not the graph you get.
Second, the mean is infinite. E[C] = 1 + ∫ 0.99/t dt from 1 to infinity, and that integral diverges. Any “average crash point” you see quoted is a function of how many rounds were in the sample — take more rounds and it grows without limit. Use the median.
Why every cash-out target has the same expected value
This is the result that makes crash worth understanding, and it takes two lines.
Stake 1 unit and set a target of m. You receive m with probability 0.99 / m, and nothing otherwise:
E[return] = m × (0.99 / m) + 0 × (1 − 0.99/m) = 0.99
E[profit] = 0.99 − 1 = −0.01
The m cancels. It cancels for every value of m — 1.01×, 2×, 137.4×, 5000×. The payout multiplier and the probability of achieving it are exact reciprocals up to the edge constant, so their product is the constant. You cannot select a target that does better and you cannot select one that does worse. The game returns 99% of turnover, which is the same thing as saying its RTP is 99% and its house edge is 1%.
That property is not unique to crash. It is the signature of a well-constructed original: the dice slider has exactly the same behaviour at every win chance, and mines pays the same expected value whether you cash out after one tile or twenty.
What your target actually controls: variance
Since EV is fixed, the only free parameter is the shape of the outcome distribution. For a unit stake at target m, the return is m with probability p = 0.99/m and 0 otherwise, so:
E[X] = 0.99
E[X²] = m² × (0.99/m) = 0.99m
Var(X) = 0.99m − 0.99² = 0.99(m − 0.99)
Variance scales linearly with the target. Here it is across the range people actually use:
| Target | Win rate | Profit per win | Variance | Std deviation | P(10 losses in a row) | P(no win in 100 rounds) |
|---|---|---|---|---|---|---|
| 1.20× | 82.50% | +0.20 | 0.208 | 0.456 | 0.0000027% | effectively zero |
| 2.00× | 49.50% | +1.00 | 1.000 | 1.000 | 0.108% | effectively zero |
| 5.00× | 19.80% | +4.00 | 3.970 | 1.993 | 11.01% | effectively zero |
| 10.00× | 9.90% | +9.00 | 8.920 | 2.987 | 35.26% | 0.003% |
| 50.00× | 1.98% | +49.00 | 48.520 | 6.966 | 81.87% | 13.54% |
The 50× row is the honest picture of high-target play: you lose 98 rounds in every 100, a ten-round dry spell is the norm rather than the exception, and roughly one session in seven of a hundred rounds contains no win at all. That is not bad luck. That is the distribution.
Low targets invert it. At 1.20× you win four rounds in five, which feels like control, and each loss erases exactly five wins’ worth of profit — 1.00 lost against 0.20 gained. Same 1% either way.
Does a low target reduce the house edge?
No, and the intuition that says otherwise is worth dismantling. At 1.01× the win probability is 98.02%, which looks close to certain. But the profit per win is 0.01 and the loss per bust is 1.00, so a single bust in 100 rounds wipes out the whole run. Work it through: 98.02 wins × 0.01 = +0.98, against 1.98 losses × 1.00 = −1.98, net −1.00 per 100 units staked. One percent. Exactly where it always is.
Auto cash-out versus manual
Identical expected value, different realised value.
Auto cash-out fires at the target server-side with no reaction time. Manual cash-out adds your latency, your connection’s latency, and — the expensive one — your hesitation when the curve is above target and still climbing. Every one of those can only move your exit point in one direction relative to the plan, and the direction is not favourable, because sometimes the round busts while you are deciding.
There is no mechanism by which manual play accesses better odds. If you intend to exit at 3.00×, set 3.00× and let it fire. If you find yourself overriding the auto setting, that is not strategy; it is the same impulse that makes martingale feel reasonable.
Why past rounds tell you nothing
Each round’s bust point comes from a distinct hash input — typically the same server seed with the nonce incremented, or a new server seed entirely. Change one bit of the input and SHA-256 produces an unrelated digest. There is no state carried from round to round, so the sequence of bust points is independent by construction.
Three specific beliefs that follow from ignoring this:
- “It’s due for a high one.” Ten sub-2× rounds do not change the eleventh. The probability of reaching 10× is 9.9% after a 500× round and 9.9% after twenty instant busts.
- “The last hour has been low, the game is paying out soon.” There is no reservoir. The 1% edge is applied per round, not accumulated and released.
- “This pattern predicts a bust.” With a fresh nonce per round, any pattern you find in history is a property of that history and not of the generator.
The one genuinely useful thing you can do with past rounds is check them. Once the server seed is revealed, every round it produced can be recomputed and compared — the procedure is in how to verify a provably fair bet, and it is the reason provably fair systems exist at all. Verification is backward-looking by design. It proves the operator did not tamper with a result; it says nothing about the next one, and it cannot.
Checking an operator’s crash odds yourself
You do not have to take the 1% on faith. Two checks, both cheap:
Check the tail law against history. Pull a few thousand published bust points and count what fraction reached 2.00×. With a 1% edge you expect 49.5%; with 10,000 rounds the sampling noise on that estimate is about half a percentage point, so a result of 44% is a red flag and a result of 49% is not. Do the same at 10× (expect 9.9%).
Check the instant-bust rate. Count rounds that end at exactly 1.00×. That figure should be close to the stated edge — around 1%. If instant busts run at 3% while the site advertises a 1% edge, the advertised number and the implemented number disagree, and the implemented one is the one taking your money.
Both checks are counting exercises on public data, and both are more informative than any amount of staring at the curve. If the numbers hold and the seeds verify, you know what the game is: a 99% return with a dial that sets your variance and nothing else. What you do with that dial is a question about how you want to lose, not whether.
Frequently asked questions
What are the odds of crash reaching 2x?
In the standard 1% edge implementation, 49.5%. The design target is that the probability of reaching multiplier m equals 0.99 ÷ m, so 0.99 ÷ 2 = 0.495. Reaching 10× is 9.9%, and reaching 100× is 0.99%. Operators using a slightly different edge constant will land within a fraction of a percent of these.
Is there a best cash-out multiplier in crash?
No. Expected value is identical at every target because the payout and the probability move in exact opposition: m × (0.99 ÷ m) is 0.99 for any m. Choosing a target chooses your variance — how often you win and how big the swings are — not your long-run return.
Is auto cash-out better than manual?
It has the same expected value but a better realised one for most players. Auto cash-out executes at the target with no reaction time and no hesitation, while manual clicking adds latency and emotional delay that can only ever push your effective exit lower than intended. Nothing about auto cash-out changes the underlying probabilities.
Can you predict the next crash point from previous rounds?
No. Each round derives its bust point from a fresh hash input, usually a server seed combined with a client seed and an incrementing nonce. The outputs are independent by construction, so a run of low multipliers does not make a high one more likely, and pattern-spotting software has nothing real to find.
Why does crash sometimes bust instantly at 1.00x?
Because that is where the house edge is stored. In the common formulation roughly 1% of rounds produce a raw value below 1.00 and are displayed as an immediate bust, which nobody can cash out of. Remove those rounds and the game would be exactly break-even.
What is the average crash multiplier?
There is no useful average — the mean is mathematically infinite because the tail decays as 1 ÷ m. The median is far more informative: half of all rounds bust below 1.98×. Any quoted average crash point is an artefact of the sample size used to compute it.