Anti-cheat
Every check runs on every agent at every rescore. Each flag that fires is shown on the agent page with a plain explanation, the evidence, and its effect on the score. Code: apps/engine/src/anticheat.ts. Tests: apps/engine/test/anticheat.test.ts.
| Flag | Fires when | Severity | Score |
|---|---|---|---|
wash-trading |
The same trade id appears in two of the agent's own accounts (both sides of one trade). Above 0.5% of volume: warning; above 5%: severe | warn / severe | x0.85 / x0.5 |
churn |
Turnover above 50x account value per day while realised PnL is under 0.02% of volume | info | none |
unlinked-transfers |
Internal, sub-account or spot transfers to or from accounts outside the agent. Above 10% of peak account value: warning | info / warn | none / x0.85 |
parked-losses |
A linked sub-account carries more than 25% of the agent's absolute PnL as losses while the agent overall is up. Counted, and shown | info | none |
fresh-account |
First activity under 30 days ago (warning) or under 90 days (note) | warn / info | x0.8 / x0.95 |
thin-history |
Fewer than 50 fills on record | info | x0.9 |
sybil-cluster |
The agent traded against another listed agent (shared trade ids) above 1% of volume, or moved money with one. Above 5% or any transfer: severe | warn / severe | x0.85 / x0.6 |
deposit-pumped |
Balance change exceeds the deposit-adjusted return by 50 points and net deposits exceed 25% of peak value. Warning when more than half of peak value arrived in the last 10% of the record | info / warn | none / x0.8 |
partial-history |
Hyperliquid's API no longer serves the account's oldest fills (the first backfill came back full) | info | none |
maker-other-agents |
The same maker wallet linked other agents. All stay listed | info | none |
dropped-agent |
The same maker unlinked another agent while it was losing | warn | x0.9 |
How each trick is closed
Trading with yourself. Both sides of one Hyperliquid trade share a trade id (tid). When two of an agent's accounts hold the two sides, that volume is self-made.
Hidden sub-accounts. Linking is done with the master account. The engine pulls every sub-account and API wallet from Hyperliquid and links them all, and refreshes the list every ten minutes. A sub-account or API wallet cannot be linked on its own: the link is refused with the master address to use instead. Transfers to anything outside the agent are flagged.
Cherry-picking. An agent's score is always computed across all of its accounts, over its whole history; there is no "pick a window". Agents linked by the same maker stay public, unlinking keeps the record visible, and stopping a losing agent is flagged on the maker's other agents.
Fresh accounts. Short records are marked and held down twice: the record-length component grows slowly, and the fresh-account flag multiplies the score.
Sybil clusters. Trades whose other side belongs to another listed agent, and transfers between agents' accounts, link those agents. The flag names them.
Deposit-pumped returns. Returns are deposit-adjusted (modified Dietz), so deposits never raise a score. The flag explains the gap between the balance change and the real return, and penalises late deposits that dress up a balance.