Home / Provably fair

Provably fair

Before you bet, the result is already locked. After you play you can open the seed, run the hash, and confirm the outcome yourself.

VERIFY A ROUND
1 · Commit

Before betting opens, the server generates a secret seed and publishes SHA-256(seed) as a public fingerprint. The result is locked. We can't change it, and neither can you.

2 · Play

The round runs. Every outcome, the crash point, the winning number, the card order, was already determined by the committed seed before a single chip was placed.

3 · Reveal & Verify

The seed is revealed. Hash it to confirm it matches the commit published before the round, that proves the seed wasn't swapped. Then recompute the outcome from the seed with the game's formula and confirm it matches what happened. The in-game Verify badge does both; a match on BOTH is what makes the round provably fair.

What this guarantees

The server commits to a secret before betting opens by publishing its SHA-256 hash. Everything the round produces, the crash point, the winning number, the card order, is already determined by that secret. When the round ends the secret is revealed, and because its fingerprint was public beforehand, it cannot have been swapped after seeing your bet.

The point is the ordering, not the cryptography. Anyone can hash a number. What matters is that the hash existed before your bet did, and that you can check the order yourself rather than take our word for it.

The formula, per game

Each game hashes different inputs, so each publishes its own formula. Copy a revealed seed into the verifier below and recompute it yourself.

Price Race
SHA256( serverSeed + JSON.stringify(startPrices) + raceNumber )
Server seed, start prices (locked at countdown), race number
CryptoCrash
SHA256( serverSeed + clientSeed + roundNumber )
Server seed, client seed (generated at countdown), round number
Viper Run
SHA256( serverSeed + targetPrice + resolveAt + betId )
Server seed, target price, resolve time, bet ID
Vendetta Roulette
SHA256( serverSeed + clientSeed + roundNumber )
Server seed, client seed (server-generated per round), round number
Bounty Hold'em
SHA256( serverSeed + clientSeed + roundNumber )
Server seed, player-committed client seeds (combined), round number
The Vault
HMAC-SHA256( serverSeed, playerId + keyIndex )
Server seed (per-vault), player ID, key purchase index
Deadeye Shootout
SHA256( serverSeed + clientSeed + roundNumber )
Server seed, client seed, round number
Paydirt
HMAC-SHA256( serverSeed, clientSeed + sessionId + tileIndex ) — Fisher-Yates shuffle
Server seed (per session), player client seed, session ID
Void Reels
HMAC-SHA256( serverSeed, clientSeed + ':' + nonce + ':' + reelIndex + ':' + attempt )
Server seed (per-player session), player client seed, spin nonce, reel index
8 Ball Outlaws
SHA256( serverSeed ) — committed before match starts; seed revealed at match end
Server seed (per-match), used to deterministically shuffle the rack using Fisher-Yates
Dead Man's Hand
SHA256( serverSeed ) committed; deck drawn from ( serverSeed, clientSeed, handNumber )
Server seed (per shoe), client seed, hand number
Vendetta Poker
Fisher-Yates over HMAC-SHA256( serverSeed, clientSeed:nonce:counter )
Server seed (per hand), client seed, hand nonce
Called It
SHA256( "calledit-v1" ␟ marketId ␟ question ␟ outcomes ␟ sourceUrl ␟ criteria ␟ lockTime ␟ resolveTime ␟ rakeBps ␟ serverSeed )
The market's full public terms plus a server seed, joined by U+241F

13 of 20 games publish a formula here. The rest use the same commit-reveal scheme; their per-game inputs are documented in the Player Handbook rather than duplicated on this page.

Verify a round

Paste the revealed seed and any additional inputs from a completed round. This runs entirely in your browser, nothing is sent to our servers. If the computed hash matches the commit published before that round, the result was honest.

Paste the revealed seed and any additional inputs from a completed round. Runs entirely in your browser, nothing is sent to our servers. If the computed hash matches the commit hash published before that round, the result was honest.

For Price Race: paste seed + JSON.stringify(startPrices) + raceNumber as one string, or fill in the fields below.

Appended to the seed before hashing. Use this for start prices + race number, round number, etc.

Contract addresses and audit reports are on /audits. Full breakdown of chips, jackpots and game rules in the Player Handbook.