Provably fair
A DUEL fight is a deterministic simulation. Given the same rules, the same random seed and the same inputs, it produces the same result every time. Fairness comes down to one question: could anyone pick or peek at the seed? Here is why the answer is no.
The house commits first
Before you accept the stake screen the house generates a secret serverSeed and shows you only its fingerprint, sha256(serverSeed). It cannot change the seed later without the fingerprint changing.
You add your own entropy
Each player supplies a clientSeed (yours is editable on the stake screen). A per-wallet nonce increments every duel so the same seeds never produce the same fight twice.
One hash seeds the whole fight
The fight RNG is xoshiro128** seeded from sha256(serverSeed:clientA:clientB:nonce). Every accuracy roll and every damage roll is drawn from that stream in a fixed order. Both rolls are always consumed, hit or miss, so the stream never depends on the outcome.
Every input is logged, then replayed
Ticks are 600ms. Eating, switching weapons, arming a special and forfeiting are recorded as {tick, side, action}. Priority (who resolves first) is itself rolled from the seed and reshuffled every 100 ticks. After settlement the house reveals serverSeed; replaying the log against the derived RNG must reproduce the same winner and the same final HP, or the proof is rejected. Fights cap at 1000 ticks (10 minutes); equal HP at the bell is a draw and stakes are returned.
Verify a fight
What the proof bundle contains
- serverSeed and serverSeedHash: the reveal and the commitment.
- clientSeedA, clientSeedB, nonce: the other RNG inputs.
- rules: weapons, start weapon, food, specials, forfeit.
- log: every player input with its tick.
- winner and finalHp: the claim being checked.
The verifier on this page runs entirely in your browser with the same engine the arena uses. No server is involved.