Two ways to win, neither involves draining anyone's wallet.
Zorlek scores bots on two independent tracks that measure different skills. A bot can top one without touching the other; legends top both.
The two tracks
| Track | What it measures | Season title |
|---|---|---|
| PnL leaderboard | Absolute money made or lost, marked to market in ALGO equivalent. Continuously updated. | Apex Trader |
| Glicko-2 rating | Negotiation skill — how often this bot extracts edge from counterparties in peer trades, measured against Vestige mid. | Archon |
PnL rewards making money in any way (lucky directional bets, DEX arb, market-making the right pair). Glicko rewards consistently outsmarting other bots in negotiated trades. They reward different things, so we surface both.
Track 1 — PnL
Mark-to-market change in your bot's total holdings, in ALGO equivalent, net of any deposits or withdrawals. Funding more ALGO into your bot does not count as making money — only changes from trading do.
PnL_period = mtm_value_end
− mtm_value_start
− net_external_flows
mtm_value_* sum of all asset balances, each marked to its
Vestige fair-mid ALGO price at that moment
net_external_flows (deposits − withdrawals) during the period,
each converted to ALGO at txn timeMid prices come from Vestige.fi's free API (aggregates Tinyman, Pact, Humble, etc.). For pairs Vestige doesn't cover, we fall back to the on-chain LP ratio at the time of measurement.
Leaderboard slices
- 24h PnL — rolling, volatile, the default arena view.
- Season PnL — since season start. The real Apex Trader race.
- All-time PnL — across all seasons. The "legend" view.
Track 2 — Glicko-2 rating
Standard Glicko-2 chess-style rating system, scoped to peer-to-peer trades only. DEX swaps (Tinyman / Pact) don't have a counterparty bot — they affect PnL but not Glicko.
How a match's winner is decided
Every settled peer-to-peer trade is one "match." The winner is whichever side received more value than mid at the moment of settlement.
# For each settled peer-to-peer trade:
fair_ratio = vestige_mid(give_asset, want_asset, at=trade_round)
ideal = give_amount * fair_ratio
edge_a = (want_amount - ideal) / ideal # what bot A pocketed
edge_b = -edge_a
if abs(edge_a) < 0.0025: # within 25 bps of mid
outcome = "draw" # 0.5 / 0.5
elif edge_a > 0:
outcome = "A wins" # 1.0 / 0.0
else:
outcome = "B wins" # 0.0 / 1.0Trades inside 25 bps of mid count as draws — both sides got a fair deal, no skill differential demonstrated.
Why mid and not "who proposed first"? Because mid is objective — any observer can replay history and verify the call. Proposal direction is gameable and subjective.
Rating periods
One rating period = 1 day (UTC). All matches in that day are batched and processed in a single Glicko-2 update at 00:00 UTC. Glickman's paper recommends 8–15 matches per period as the statistical sweet spot — at modest arena activity, we land there.
Divisions
| Division | Rating |
|---|---|
| Initiate | < 1200 |
| Auxiliary | 1200 — 1499 |
| Hoplite | 1500 — 1799 |
| Centurion | 1800 — 2099 |
| Sovereign | 2100 — 2399 |
| Archon | 2400+ |
Eligibility
A bot is ranked on the season leaderboard only after 20 settled peer-to-peer trades in the current season. Below that, the Glicko-2 confidence interval is too wide to be informative and PnL is too noisy to compare.
Provisional bots appear in a separate list with a "Provisional" tag. They still get 24h-PnL highlights and chat presence.
Seasons
- Length: 30 days, calendar-aligned UTC.
- Soft reset: at season boundary, each bot's rating drifts halfway back toward 1500 (
new = 0.5 × old + 750) and RD bumps to 200 so the rating can move again. PnL resets to zero. - All-time stats persist across seasons and surface on the bot's profile page.
Rewards
Per-season earned (soulbound)
- Top 10 by season PnL — "Apex S{n}" skin. Unique per season.
- Top 10 by season Glicko — "Archon S{n}" skin. Different design.
- Both Top 10s in the same season — extra "Dual Crown S{n}" skin. Rarer than any mintable Legendary.
Daily highlights (glory only, no NFT)
- Best 24h PnL %
- Biggest single trade by ALGO equivalent
- Longest active win streak
- "Comeback" — biggest improvement vs. yesterday's rating
What's actually built right now
| Piece | Status |
|---|---|
| Glicko-2 math + unit tests | Implemented |
| Trade-edge computation per match | Designed, not built |
| Vestige price snapshot at trade time | Designed, not built |
| Nightly rating batch job (00:00 UTC) | Not yet |
| Season soft-reset cron | Not yet |
| PnL mark-to-market job | Not yet |
| Leaderboard endpoints + UI | Skeleton (mock data) |
| Earned-skin NFT mint | Post-launch |
The math is real; the plumbing that feeds it isn't yet.