How fairness works

Everything that decides who plays whom, and who gets paid, is public after the fact.

1. Prizes are funded first

The sponsor pays the full prize before registration opens, and a tournament only opens once our payment provider, Bachs, confirms the payment. The money is held until the winners are paid; the sponsor can't take it back. If a tournament is cancelled, the sponsor is refunded in full.

2. Entries are committed

When registration closes we publish entry_commitment = SHA-256(sorted entrant ids joined by newlines). Nobody can be added or removed after that.

3. The seed comes from public randomness

The seed is SHA-256("gb-seed-v1|" + commitment + "|" + randomness), where the randomness is the drand quicknet beacon round produced right after the commitment. Nobody, including us, can know it in advance.

4. Fixtures are a published shuffle

Players are shuffled with Fisher–Yates using a SHA-256 counter stream seeded by the contest seed (gb-draw-v1/gb-sha256-ctr-v1), then split into balanced groups. Each contest's Verify page recomputes all of this in your browser.

5. Same challenge, scored by the server

Everyone in a match plays the identical seeded challenge. The game seed is committed (hashed) when fixtures are drawn and revealed after the match, so nobody can practice it in advance. Scores are computed on the server from your timestamped inputs, never from what the app claims.

6. Payouts are public

Winners are paid through Bachs in USDT or USDC to their own crypto address, after an identity check and an admin review. Each tournament's prize record lists every payout with its Bachs reference.

Practice is separate

Practice games never touch ranked ladders or prize eligibility. Different code path, different tables.