# Fairness

Every result comes from one weighted draw, decided before the player sees it
and provable afterwards.

## The commitment

When a session is minted, its answer carries `fairness.serverSeedHash`: the
SHA-256 of a server seed we keep secret for the life of the session. Show it
to the player before the first round if you like. Together with the player's
`clientSeed` (fixed per session, passed at minting) and a nonce per round, it
fixes every outcome in advance.

## The draw

A round resolves one weighted selection from the game's published book set
with HMAC-SHA256 over the server seed, client seed and nonce. Nothing else in
the round path draws randomness.

## The record

Every round is recorded before it is served: game, `gameVersion`, book set,
seed and nonce. When the session's seed is rotated, the old server seed is
revealed, and anyone can recompute each round with the verifier.

## Versions

`gameVersion` travels with every round, so changing a game's maths never
changes how an old round verifies.
