Provably fair

Don't trust — verify. Every match is backed by a cryptographic commit-reveal scheme, so neither the server nor a player can secretly influence the randomness of a duel.

What is random in a duel?

Peek Duel is a game of skill: whether you hit depends on where you aim and how well you read the conditions. The only seed-driven elements are the map layout and theme, the weather (wind, humidity, fog) and the scope sway pattern — and both players face the same conditions on mirrored bases. That randomness comes from a match seed, and the commit-reveal scheme proves that nobody chose or changed that seed to favour one side.

How commit-reveal works

  1. Commit. Before the match the server generates a secret random serverSeed and sends both players its hash: commit = sha256(serverSeed). From this moment the server is locked in — it can't swap the seed without the hash changing.
  2. Client seeds. Each player's app generates its own random clientSeed and sends it to the server. Neither the server nor the opponent can predict it in advance.
  3. Match seed. The seed that drives the match is matchSeed = sha256(serverSeed:clientSeedA:clientSeedB).
  4. Reveal. After the match the server reveals serverSeed. Anyone can check that sha256(serverSeed) equals the commit and recompute matchSeed.
commit    = sha256(serverSeed)                              // shown before the match
matchSeed = sha256(serverSeed + ":" + clientSeedA + ":" + clientSeedB)
// after the match: serverSeed is revealed → anyone can recompute both hashes

Why this is fair: the server commits to its seed before it sees the players' seeds, so it can't pick a favourable pattern; the players add their own entropy, so the server can't pre-compute the outcome; and the opponent never sees your seed in advance.

How to verify a match

  1. Open the match in your match history in the Mini App and copy its fair-play data: commit, clientSeedA, clientSeedB and the revealed serverSeed.
  2. Compute sha256(serverSeed) and compare it with the commit you received before the match. They must be identical.
  3. Compute sha256(serverSeed:clientSeedA:clientSeedB) to get the match seed.

Use the verifier below, or any SHA-256 tool. Values are hashed as UTF-8 text exactly as shown, joined with a colon, with no spaces or trailing newline.

# Linux / macOS
printf '%s' 'SERVER_SEED' | sha256sum
printf '%s' 'SERVER_SEED:CLIENT_SEED_A:CLIENT_SEED_B' | sha256sum

# Python 3
python3 -c "import hashlib,sys;print(hashlib.sha256(sys.argv[1].encode()).hexdigest())" 'SERVER_SEED'

# Node.js
node -e "console.log(require('crypto').createHash('sha256').update(process.argv[1]).digest('hex'))" 'SERVER_SEED'

Verifier

Everything is calculated locally in your browser — nothing is sent anywhere.

sha256(serverSeed)—
matchSeed = sha256(serverSeed:A:B)—
Enter the revealed server seed to compute hashes.

Authoritative server

  • Your app sends only inputs — moves, crouch, aim and fire. Ballistics, block destruction, damage and the result are calculated by the server, never by the client.
  • The server simulates every turn deterministically at 20 ticks per second, so the same shot in the same conditions always has the same result — and every match can be replayed exactly.
  • While your opponent is hidden behind blocks, their position is not sent to your device — there is nothing for a wallhack to read.
  • Inputs are validated: impossible aim speeds, out-of-order packets and abnormal input rates are rejected.
  • A full replay of every match is stored for dispute resolution.

Anti-cheat and anti-collusion

  • Behavioural analysis looks for bots and aim scripts: inhuman reaction times, robotic aim paths, abnormal headshot ratios for a given rating, suspicious win rates.
  • Random matchmaking only in money duels — you can't pick who you play against.
  • Accounts that share a device, network or wallet are never matched against each other for money.
  • Passive-play detection catches players who deliberately miss or stand in the open to hand over a pot (chip dumping).
  • One Telegram account = one game account; multi-accounting is detected and banned.
  • Suspicious accounts are removed from money play and their withdrawals are frozen pending a manual review.

The house never plays against you

  • There are no house bots in money modes — every opponent is a real player.
  • Weapons and parameters are identical for both players in money modes — no pay-to-win.
  • The platform earns only a fixed rake — 8% in duels and 10% in tournaments — so it has no interest in who wins.