PerpLog Seasons: Public Leaderboard and Recognition Badges
What Seasons are
A Season is a fixed time window (typically 30–60 days) during which PerpLog runs a public leaderboard. Every wallet that trades through the Position Sizer gets a seasonScore computed daily from trading activity, discipline signals (weekly reviews, playbook compliance, daily habits), and engagement. The leaderboard is tier-ranked using the same 10-tier LoL-style system PerpLog uses year-round (Iron → Challenger).
At season end, badges are awarded to wallets that hit specific milestones (see badgesbelow). No money changes hands. No smart contract is invoked. The “prize” is the rank itself, the badge, and the public leaderboard entry.
Why no cash prize pool
PerpLog initially planned a 70/24/6 revenue-redistribution Season pool where a share of fees would be paid out to top traders. That model was scrapped 2026-04-17 after re-reading what Hyperliquid builder codes are actually designed for — revenue for app developers, not a redistribution vehicle. The full reasoning is on the fee model page, but the short version: (1) Jeff Yan built builder codes so apps could monetize the way they add value, like YouTube creators, not to roundtrip user money; (2) redistribution subsidized skilled high-volume traders at the expense of mediocre ones, which is the opposite of fair; (3) any subjective scoring is gameable, and the simpler mechanism wins under Vitalik's credible-neutrality bar.
The SeasonPrizePoolV3 ownerless contract we built for that earlier model is deployed at 0x661a949597420C21939047515361f37b15F0b44F on HyperEVM and will stay deployed (zero cost), but it is idle. It is not referenced by any user-facing flow. It remains as optional future infrastructure if a genuinely non-redistributive use case emerges (e.g. a one-off community-funded bounty), never as a revenue-redistribution pool.
Who can appear on the leaderboard
A wallet shows up on the Season leaderboard once it has:
- 10+ trades via the Position Sizerduring the season window. Direct Hyperliquid trades that bypass PerpLog don't count toward the leaderboard (but your P&L journal still records them).
- 1+ validated Weekly Review during the season — the double-blocking workflow ensures the reflection actually happened.
- Pre-season activity. The wallet must show evidence of existence before the season started. Anti-Sybil measure.
How scoring works
Every day at 03:00 UTC, a cron computes each eligible wallet's seasonScore and persists an append-only snapshot to Firestore with a committed rulesHash (SHA-256 of the theme multipliers + eligibility rules). Mid-season rule changes are publicly detectable by diffing consecutive daily hashes. Live audit page at /season/verify/season-1 (or any seasonId).
seasonScore = (tradingPoints + disciplinePoints + engagementPoints)
× tierMultiplier
× perpScoreMultiplierFull formula, inputs, and reproducibility recipe in the @perplog/season-engine package (MIT-licensed, zero Firebase / Next.js dependencies — ~30 seconds to audit a season independently).
Badges (what you can earn)
Badges are non-financial reputation signals. Each badge represents a specific behavioral milestone hit during the season. Badges attach permanently to your wallet's PerpLog profile once earned. Current badge catalog (subject to refinement):
- Founding Trader — first N ranked wallets on the inaugural season.
- Playbook Purist — 30 consecutive days 100% playbook-compliant.
- Stop-Loss Guardian — 100 trades, 0 stop-loss bypasses.
- Century Club — 100+ Position Sizer trades in a season.
- Grade-A Student — average trade grade A or higher over ≥ 50 trades.
- Weekly Review Streak — 8+ consecutive validated weekly reviews.
Tier rank — how it's assigned
Your tier comes from your position on the existing ROI leaderboard, recomputed nightly. The 10-tier cumulative percentile split mirrors League of Legends Season 16 April-2026 global solo queue distribution (Iron 97.4% → Challenger top 0.031%). This is the same tier system used year-round — seasons don't create a parallel ranking, they just snapshot yours at key moments.
Verifiability
- Scoring engine: open-source MIT — pure TypeScript, zero dependencies on PerpLog infrastructure.
- Daily rules hash: SHA-256 commitment to the exact theme + eligibility used for each snapshot. Tamper-evident.
- Append-only history:
seasonScoreHistory/{seasonId}_{date}_{wallet}in Firestore, public-read perfirestore.rules. - Independent re-compute: the trade inputs come from Hyperliquid's public user-fills API. Anyone can fetch trades for a wallet, plug into the open scoring engine, and verify the seasonScore.
Related: fee model · compensation breakdown · no-token philosophy · trust model · live leaderboard.