Claims open
Roster
Unclaimed fighters fight for the house; any prize they win rolls into the next pool. Balances are re-checked when claims lock.
Broadcast
64 to 1
Provably fair
Verify this round
Your browser fetches the commit and reveal transactions itself, recomputes every hash and refights all 64 matches with the same open-source engine the server runs.
What gets checked
- Commit tx — fetched straight from the chain by this browser (JSON-RPC
eth_getTransactionByHash, falling back to the Blockscout API, and only then to the server's copy, which is flagged). Its 44-byte data isPFC1 ‖ roundId ‖ commitHash ‖ seedBlockOffset. - Roster hash —
keccak256(canonicalJSON(roster))recomputed from the roster the API shows you. - Commit hash —
keccak256(PFC1 ‖ roundId ‖ rosterHash ‖ salt)must equal the hash inside the commit tx. The salt only becomes public in the reveal tx, so it was fixed before the seed block existed. - Seed block hash — block
commitBlock + offsetfetched witheth_getBlockByNumber. Nobody but the chain's sequencer can influence it, and it did not exist at commit time. - Seed —
keccak256(PFS1 ‖ roundId ‖ rosterHash ‖ salt ‖ seedBlockHash). - Replay — the 64 fighters are shuffled with the
seedingstream and all 64 matches are refought withmatch:<m>streams by /shared/engine.js, the same open-source engine the server runs, in your browser. - Results root —
keccak256(canonicalJSON({order, matches, placings}))of the replay must equal the root inside the 72-byte reveal txPFR1 ‖ roundId ‖ salt ‖ resultsRoot.
While a round is fighting the salt and seed are sealed (they go on-chain in the reveal tx after the last match), so the panel checks the commit only and the full replay unlocks once the round is done.
In simulation mode there are no transactions and no real seed block: the panel says so and only replays the round against the server's numbers.