Provably Fair

Commit — reveal

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

  1. 1
    Before 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.

  2. 2
    Every 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.

  3. 3
    When 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 fightersAlive

Your last finished battle

Nothing to verify yet — a seed is only published once a battle has a winner.

Play one

Check 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.

Known limitation

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.