How it works
1. Your wallet is a fighter
$GLADIATOR is a pump.fun token. Every wallet that holds at least $150 of it at the live price (Jupiter quote) has a fighter. There is nothing to register: the service reads every holder of the mint once a minute and the token's trade feed every few seconds, so a buy shows up within seconds and a fighter appears from the next round.
Name and look come from the wallet: the class from your stats, colors, headgear and weapon from a hash of the address. The name is picked once and stays, also after a death and a revive.
Sell below the threshold and the fighter falls: it leaves the arena at the next round and gets a grave in the Hall of the Fallen with its record. Buy back in and it rises again under the same name, streak back at 0.
2. Stats from your own trades
Stats come from the wallet's pump.fun and PumpSwap trades of the last 60 days (up to 1,000 transactions). Closed positions worth at least 0.05 SOL count. A win is a position closed at +5% or better, a loss at -5% or worse. Every stat is an honest 0 to 100; with little history the formulas pull toward the middle instead of guessing.
| Stat | Formula | Reads as |
|---|---|---|
| POWER | 100 x ((wins + 2.4) / (wins + losses + 6) - 0.15) / 0.50 | Win rate, smoothed toward 40%. No data = 50. |
| ARMOR | Value-weighted median hold time of closed positions, smoothed toward 5 min, on a log scale from 20 s (0) to 2 days (100), plus 2 per day of holding $GLADIATOR (max +15) | 5 min = 30, 1 h = 57, 12 h = 85. No data = 30. |
| SPEED | 100 x log10(V30) / log10(2000), V30 = SOL bought + sold in 30 days | 1 SOL = 0, 45 SOL = 50, 2,000 SOL = 100. |
| WEAK | 100 x ((d + 1.5) / (n + 4) - 0.10) / 0.70, d = positions closed at -35% or worse | Dump rate. No data = 39. |
Fewer than 5 closed positions = recruit: same formulas, a recruit sprite, the Brawler class. In a fight every stat is clamped to 15..85 so extremes cannot stack; the page still shows the honest number.
3. Six classes
Checked in this order, the first match wins:
| Class | When | Who it is |
|---|---|---|
| Tank | ARMOR 55+ | Diamond hands. Holds through everything. |
| Assassin | POWER 50+, ARMOR 36 or less, SPEED 35+ | In and out, and right about it. |
| Champion | POWER 52+ | Wins more than it loses. |
| Berserker | SPEED 55+ and POWER under 42 | Volume over judgement. |
| Coward | WEAK 40+ | Sells the bottom. |
| Brawler | everything else, and every recruit | Street fighter. |
4. The fight
Rounds last 30 s. At the start of a round the roster freezes: everyone at or above the threshold with stats as of that moment. Fighters are shuffled into pits of up to 16 by sha256(seed | wallet); a pit with fewer than 6 is filled with ghosts of the fallen (no rewards, no streak) or sparring shades at 50/50/50/50, so a fight is always running, even with one holder.
In a pit, fighters walk to random points (faster with SPEED) and two free fighters within reach start a duel. Attacks run on timers until one drops to 0 HP; a duel cut by the end of the round goes to the one with more HP.
| Rule | Value |
|---|---|
| Attack every | 0.9 s x (1 - 0.08 x spd) (0.83 to 0.97 s) |
| Damage | 11 x U(0.4, 1.6) x (1 + 0.08 x pow) x (1 - 0.07 x arm_defender), x1.5 when the defender is exposed, x2 on a crit |
| Miss / crit | 15% / 10% |
| Exposed chance of the defender | 0.05 + 0.30 x weak / 100 (9.5% to 30.5%) |
| Stat scale | x = (clamp(stat, 15, 85) - 50) / 50 |
| After a duel | both rest 3 s, HP back to 100 |
A win adds 1 to your streak, a loss sets it to 0. Losing takes nothing else. Measured over 40,000 duels: equal fighters win 50.2%, one maxed stat against an average fighter wins about 59%, the best possible build against the worst wins 90.5%.
5. Every fight is replayable
The seed of a round is sha256("glad1|" + round + "|" + blockhash + "|" + roster_hash). The block comes after the roster froze, so nobody can arrange a pit in advance. The fight engine is deterministic (integer timers, damage in thousandths of HP, its own sha256 and xoshiro128** generator) and this page runs the exact same file as the server.
Your browser replays every pit of the round and compares its event hash with the server's: the arena screen says VERIFIED when they match. Past rounds are public at /api/round/<r>. When the block hash could not be read the round says beacon: chained and the seed falls back to the previous seed; that is visible per round.
6. Rewards: real creator fees in SOL
The token's creator wallet collects the pump.fun creator fee (0.30% on the curve; on PumpSwap 0.30% to 0.95% by market cap) every 5 min. Each collect is split three ways: 75% to the fighters' pool, 20% to infrastructure (the name model, chain reads, transaction gas) and 5% to the owner wallet. Only the lamports that a collect transaction actually moved are booked; donations to the wallet are not counted.
Each round, 1/20 of the undistributed pool is booked to fighters by weight:
weight = B_eff x (0.5 + 0.2 x min(streak, 10))
B_eff is your lowest balance over the last 6 hours, so buying just before a payout earns nothing. Weight is linear in balance, so splitting a bag across wallets gains nothing. Payouts go out as plain SOL transfers, 20 per transaction, every 10 min for every wallet with at least 0.002 SOL booked. A fallen fighter's unpaid rest is still paid; after 30 days it returns to the pool, never to the owner.
No token rewards, no APY. With few holders the money is small, and that is the honest number.
7. Parameters
Live values from the service (/api/rules). Each one has fixed bounds; a value outside them refuses to start.
| Parameter | Value | Bounds |
|---|
8. Abuse, and what stops it
| Attempt | Result |
|---|---|
| Split one bag over many wallets | Weight is linear: same total share. Each wallet below the threshold gets nothing. |
| Buy before a payout, sell after | B_eff is the 6 h minimum: 0. |
| Fight your own second wallet | Pits come from the block hash; you cannot choose who meets whom. Measured: no better than honest good stats. |
| Fake wins with wash trades | Costs about 2.5% of volume in fees per fake win; smoothing needs about 30 positions to move POWER far. Best possible build earns about 1.5x a neutral share. |
| Airdrop dust to flood the arena | A fighter needs the full $150 threshold in each wallet. |
| Exchanges, pools, bonding curve as fighters | Excluded: any owner that is not a plain wallet, plus a manual list. |
| RPC glitch reports a whale as sold | Death needs two agreeing reads; an empty holder snapshot is rejected. |
9. What you trust
The service is a counter and it is open; the creator key lives on the server, and the payout float is never more than a few minutes of flow.
- The service computes rosters, stats and the ledger. Every number is public through the API with the formulas above.
- It cannot pay out more than came in: before each payout cycle it checks that the pool equals booked plus undistributed, that no wallet is paid beyond its booked amount and that the wallet balance covers every unpaid line. Any mismatch halts payouts.
- It cannot pick a fight result: the seed uses a block that comes after the roster froze.
- It can delay payouts or get a stat wrong. It cannot hide your fighter: masking takes your wallet's signature.
- The creator key is hot on the server. A leak loses at most about 10 minutes of fees plus a 0.05 SOL gas float; the rest waits in pump.fun's creator vault.
- Platform risk: pump.fun can reassign a coin's creator (set_creator / admin takeover), which would redirect the fees.
- Admin powers: the exclusion list, parameters inside their bounds, and a pause that stops payouts only (booked amounts are kept). The admin never takes fighters' money: only the infra and owner shares leave the pool at collect time.
10. Public API
JSON, read-only except masking. Rate limited per visitor.
| Endpoint | Returns |
|---|---|
/api/arena | round, fighters alive, featured duel, top streaks, recent fallen |
/api/round/current, /api/round/<r> | seed, slot, block hash, roster hash, pits with fighters and stats, event hashes |
/api/fighters?sort=streak|weight|new | roster cards |
/api/fighter/<wallet> | stats, record, booked / paid, last duels and payouts |
/api/fallen | Hall of the Fallen |
/api/pool, /api/payouts | collected, booked, paid, undistributed, checks; payout transactions |
/api/rules | the open formula and parameters |