Provably fair
The outcome of every round exists before the reel moves. The animation is a replay of a record, never its cause — and the record can be checked by anyone, afterwards, without trusting us.
How it is decided
- 1Before the doors open
The table generates a secret server seed and publishes only its SHA-256 hash. Nothing about the battle can change after this point without breaking the hash.
- 2Every round
The eliminated fighter is HMAC_SHA256(serverSeed, clientSeed:round), truncated and taken modulo the number still alive. The reel is handed that answer and animates to it.
- 3When a winner is left
The server seed is published. Anyone can re-hash it against the original commit and replay all nineteen rounds.
index = HMAC_SHA256(serverSeed, clientSeed + ":" + round)
.slice(0, 13) as hex mod fightersAliveYour last finished battle
Nothing to verify yet — a seed is only published once a battle has a winner.
Play oneCheck it yourself
Do not take the button's word for it. SHA-256 the revealed seed and compare it to the commit, then HMAC-SHA256 the seed against clientSeed:round with any library in any language — the first 13 hex characters, modulo the fighters alive that round, give the index of the card the reel stopped on.
On a staked table the client seed is folded together on-chain from every player's own seed, their address and the block hash at the moment they joined, and the contract replays the battle itself — the operator never names a winner. What the house could still do is take a seat of its own; it cannot choose the block it lands in. Practice battles derive the client seed from the battle id, and stake nothing.