Every ranked and wagered game on XFChess is analysed automatically for integrity. This page explains what we check, how we decide, and what happens when a violation is found.
Anti-cheat analysis runs on all PvP and tournament games where wagers are involved. Casual, practice, and computer games are excluded.
Analysis runs post-game on our signing server (Hetzner CX32, co-located with the session-key infrastructure) and does not affect the speed of the match or the payout process.
Every move made in a ranked game is cryptographically signed by our session-key server at the moment it is received. The signed record includes:
These records are persisted to an append-only database before the move is submitted to the Solana Ephemeral Rollup. This gives us an independently verifiable audit log for every move in every ranked game. No player can credibly claim "I didn't make that move" or dispute the timing of their decisions.
The signed move log is the authoritative source of truth for all integrity reviews. It cannot be altered without invalidating the cryptographic signatures.
We compute a weighted suspicion score (0.0–1.0) from three independent signals. No single signal alone causes action. Forced moves and opening theory are excluded from all signal calculations.
Human players take measurably longer on complex positions and move faster on simple or forced ones. Engine-assisted players exhibit abnormally consistent response times regardless of position difficulty.
We use the server-side signing timestamps to measure the time between moves to the millisecond. Positions are classified by phase (opening, middlegame, endgame) and filtered by complexity: positions where the top two engine moves are within 20 cp (middlegame) or 40 cp (endgame) of each other are considered low-complexity and skipped. Only non-trivial, non-forced positions contribute to the timing signal.
After each game, Stockfish analyses every non-trivial position at depth 18 and records centipawn loss (CPL) — the difference between the played move and the engine's best move. We then compare the player's observed CPL against an empirical CPL-by-ELO curve: a 1200-rated player is expected to have a much higher CPL than a 2200-rated one.
A player whose CPL is significantly lower than the curve predicts for their ELO rating — in other words, someone playing far above their stated strength — contributes a strong signal. A genuine strong player consistently playing at their level does not.
For each position that passes the complexity filter, we record whether the player chose Stockfish's top-rated move. Humans at any level occasionally find the best move, but consistently selecting the engine's first choice across many complex positions — particularly under time pressure — is statistically improbable.
Exact thresholds are not published to prevent calibrated evasion. Opening moves and clearly forced sequences are excluded from all three signals.
The three weighted signals are combined into a single score between 0.0 and 1.0:
Nobody is banned automatically. Every flag requires a human decision.
For every game that reaches the Review or Flagged threshold, our system generates a written report containing:
Reports are retained for the duration of any appeal period and for regulatory purposes thereafter.
Clean review — payout released immediately. No record against the account.
Borderline / Review — account remains fully active. Payout held up to 48 hours while a moderator reviews the integrity report. If no violation is found, funds are released in full.
Confirmed violation — wager voided and returned to the opponent. Account suspended pending further review. Player notified with the specific findings.
Organised fraud or collusion — all associated accounts suspended, matter referred to relevant authorities where legally required.
All decisions are appealable within 14 days of notification. Appeals are reviewed by a moderator who was not involved in the original decision.
To appeal a decision: you have 14 days from the date of notification. Email fairplay@xfchess.com with your wallet address and game ID. Target response time is 5 business days. Your appeal will be reviewed by a moderator who had no involvement in the original decision.
To report suspected cheating: use the flag option in your match history. Reports are anonymous to the reported player. Flagged games are queued for priority review regardless of their automated score.
Anti-cheat analysis runs as a background worker process on the same Hetzner signing server that handles session keys. Stockfish analysis at depth 18 takes approximately 15 seconds of CPU time per game. The current configuration supports approximately 15,000 analysed games per day — well in excess of expected early-platform volume. Infrastructure scales with demand; the signing server's p99 response time is not affected by background analysis.
XFChess is a pre-launch platform. Implementation details described here reflect our current design and are subject to change as the system is developed and refined. Nothing on this page constitutes legal advice.
Fair play enquiries: fairplay@xfchess.com
Legal queries: legal@xfchess.com