Provably fair
Every result is locked in before you bet. Check any Crash round, Mines board, Plinko drop or coin flip yourself.
Commit a chain
A million Crash seeds are generated up front, each the SHA-256 hash of the next. The end of the chain (the commitment) is published and written to Solana before the first round, so every future round is already fixed.
Salt it
Each crash point also mixes in the hash of a Solana block produced after the commitment. Nobody could know it in advance, so we couldn't have generated chains until we found a favourable one.
Reveal
After each crash the round's seed is published. Hash it and you get the previous round's seed; keep going and you reach the commitment. Recompute the crash point and compare.
Verify a round
This runs entirely in your browser using the Web Crypto API. Nothing is sent anywhere. Paste any round's seed and hash, or pick one from the list below.
Recent rounds
Every finished round with its revealed seed. Click one to load it into the verifier.
Loading…
The exact formula
This is the whole computation: the same code the server runs, and the same one the verifier above runs in your browser. Copy it and run it anywhere.
const { createHash, createHmac } = require("crypto");
const serverSeed = "PASTE_REVEALED_SEED";
const salt = "PASTE_CHAIN_SALT"; // the chain's Solana block hash
const commitment = "PASTE_CHAIN_COMMITMENT";
const index = 1; // the round's position in the chain
// 1. The chain: hashing the seed `index` times must reach the commitment.
const sha = (s) => createHash("sha256").update(s).digest("hex");
let h = serverSeed;
for (let i = 0; i < index; i++) h = sha(h);
console.log("in the committed chain:", h === commitment);
// 2. The outcome: derive the crash point from the seed and the salt.
const hmac = createHmac("sha256", serverSeed).update(`${salt}:0`).digest("hex");
const bits = parseInt(hmac.slice(0, 13), 16); // 52 bits
const u = (bits + 1) / 2 ** 52; // uniform in (0, 1]
const crash = Math.floor(Math.min(Math.max(1, 0.98 / u), 1000) * 100) / 100;
console.log("crash point:", crash);The 0.98 is the house edge: a 2% shave off the survival probability, giving P(crash ≥ m) = 0.98/m. The 52 bits are the full mantissa of a double, so the uniform draw uses every bit representable exactly. Flooring to two decimals means the number on screen is exactly the number that settles your bet.
Verify Mines, Plinko & Coinflip
These games use your own seed pair. Rotate your seed on any game page to reveal the server seed, then paste it here with your client seed and the game's nonce. Everything below runs in your browser. Each result is built from HMAC-SHA256(server seed, "client seed:nonce:0"), read as floats of 4 bytes each.
What provably fair covers
It proves every result was fixed before any bet was placed and couldn't be changed afterwards. It doesn't change the odds: the house edge (2% on Crash, 1% on Mines and Plinko) is shown on each game's page.
Crash runs shared rounds, so everyone gets the same crash point. A public Solana block hash stands in for a personal client seed. Mines, Plinko and Coinflip use your own seed pair.
Common questions
+What does provably fair mean?
Every Crash round's seed comes from a chain of a million seeds generated in advance, where each seed is the SHA-256 hash of the next. The end of the chain is published (and recorded on Solana) before it's used, so every round was fixed long before anyone bet. Each crash point also mixes in a Solana block hash that didn't exist when the chain was committed, so we couldn't have picked a favourable chain either.
+How do I verify a Solacrash round?
Every finished round publishes its seed. Hash it with SHA-256: you get the previous round's seed, and hashing all the way down reaches the chain's published commitment. Then derive the crash point with HMAC-SHA256, keyed by the seed, over the chain's salt (a Solana block hash). The verifier on the fairness page does all of this in your browser, and the same computation runs in about ten lines of Node.
+Can Solacrash change a round after I bet?
No. Every round's seed was locked in when its chain was committed, before the chain's first round. Changing an outcome would mean finding a different seed with the same SHA-256 hash, which is computationally infeasible, and any mismatch is publicly detectable by any player.
+What is the house edge on Solacrash?
2%. The survival probability at multiplier m is 0.98/m, which means expected return is 98% of the amount wagered at every cash-out target. No cash-out strategy changes that, only the variance.
+Why can't I choose my own client seed?
Solacrash runs shared rounds: every player rides the same plane, so a round has exactly one crash point. A per-player client seed can't apply when there is only one outcome. Instead every round is salted with a public Solana block hash that nobody, including us, could know when the seed chain was committed. Mines, Plinko and Coinflip do use your own client seed.
Want the longer version? Read the full explainer.