Provable Fairness

How MiaCat's games prove their outcomes were fair - hashes, seeds, and verification.

Provable Fairness

MiaCat's games are provably fair: the outcome is committed before play starts, and you can verify after the fact that nothing was changed. The argument is cryptographic, not "trust us."

The Idea

Before a game, Mia generates secret values and publishes their hashes (a fingerprint that can't be reversed). After the game, she reveals the secrets. Anyone can re-hash the revealed secrets and confirm they match what was published before play. If they match, the outcome could not have been tampered with mid-game.

Kemeow, Step by Step

Kemeow uses two secrets and three hash stages.

Stage 1 - before entries open Mia generates a server seed `S` and a mixer salt `M`, then publishes in the start embed: - `Phase 1 Hash` (`Nh`) - `Server Seed Hash` (`Sh`)
Stage 2 - when entries close Mia publishes: - `Server Seed Hash` (`Sh`) - `Mixer Salt Hash` (`Mh`) You can confirm continuity: `SHA256(Mh) == Nh`.
Stage 3 - the end reveal Mia reveals the full values: `server_seed`, `mixer_salt`, all three hashes, the `client_seed`, and the `player_ids`. Now anyone can re-hash and verify the whole chain.

How the Draw Is Built

The client seed is built from the actual player list (Discord IDs, sorted), so it cannot be fully known in advance:

client_seed = "{mixer_salt}:{sorted_discord_ids}:{nonce}"

For each draw, Mia hashes the client seed, then runs it through HMAC_SHA256(server_seed, hash) to produce deterministic, reproducible random values. Reproducible after the reveal - unpredictable before it.

Why It Holds

  • Both secrets are committed (hashed) before player picks are final.
  • The player list is live input, so the result can't be precomputed.
  • Verification reduces to hash and HMAC checks anyone can run.