Docs · Pools
King of the Pool
The biggest single buy of each round takes a prize from a pot that arbitrage recapture fills, capped by what that buy paid the protocol.
What it does
King of the Pool turns a pool's arbitrage income into a contest. Rounds are aligned to UTC. During a round, the largest single buy leads; when the round closes, the leader (or a podium of two or three) is credited a prize from the pool's pot. What the prizes don't take is partly released to the pool's LPs.
It is bit 12 of PoolParams.blocks. It needs Arb recapture, which fills the pot, and LP Rewards or Auto Burn, which set each prize's cap. The Kings board lists the rounds.
Who can take the crown
- A buy counts when its gross spend in the quote is at least
kotp_min_buy. Sells never lead. - The signer must be an on-curve wallet invoking reel at the top level (stack height 1), not a program calling in. This is Solana's stand-in for “a person's wallet, not a contract”; it can't tell a person from a bot with a key.
- Each wallet holds at most one place on the podium. A buy that ties the leader doesn't pass it.
- If a wallet buys and then sells in the same slot, the podium returns to the snapshot taken at that slot's first change of crown, so a buy-and-dump in one slot can't win.
Rounds
A round lasts kotp_round_secs (1 hour to 30 days, 1 day by default) and starts on a UTC boundary of that length. A pool that opens mid-round joins it only if at least half of it remains; otherwise its first round is the next one.
KotpSettle closes a round. Anyone may send it: it is permissionless, and the sender pays the transaction fee and any rent for accounts it opens. A client puts it before the first swap after a round ends (ix.kotpSettle in the SDK), so rounds settle as trading continues.
The pot and the prizes
The pot fills from two places: kotp_pot_bps of what is left of each arbitrage recapture after the protocol and the gap opener (25% by default), and any block charge routed to destination 3 (a Swap Cut, Exit Clock or Sandwich charge, for example). The pot is bucket 4 on the pool; it can't be collected by anyone.
Each podium place stores a cap when it is set: half of what that buy paid the protocol through LP Rewards and Auto Burn, after the integrator's part. At settlement, each place is credited the smallest of three amounts: its podium share of the pot (100%; 70/30; or 50/30/20), its cap, and a limit proportional to its spend. Prizes go to the winners' claim ledgers in the quote token, and the tokens move to the claims vault in the same instruction.
Then kotp_release_bps (25% to 100%, 50% by default) of what remains is released to LPs through the pool's stream, compounded over the rounds since the last settlement (everything after 256 rounds).
Worked example
Sample settings, not live data. A pool with LP Rewards 2%, Auto Burn 1% and a 20% protocol share. The round's largest buy spends 20 SOL. It pays reel 0.08 SOL of LP Rewards and 0.04 SOL of burn quote, so 0.12 SOL; its prize cap is half of that, 0.06 SOL.
With 0.6 SOL in the pot and a single king, the prize is 0.06 SOL. Of the 0.54 SOL left, a 50% release streams 0.27 SOL to LPs and 0.27 SOL stays for the next round.
Settings
| Key | Setting | Min | Default | Max | Rule |
|---|---|---|---|---|---|
kotp_pot_bps | Pot share | 0.01% | 25% | 50% | — |
kotp_round_secs | Round length | 1 h | 1 day | 30 days | — |
kotp_release_bps | Pot released per round | 25% | 50% | 100% | — |
kotp_min_buy | Least buy that counts | 1 atoms | Named at launch | — | — |
kotp_podium | Podium | One king | One king | Top three, 50/30/20 | — |
What to read on chain
- The pool's
rounds,crownsandprizes_totalcounters. - The
Crownedevent (pool, wallet, spend) for each change of leader, andRoundSettled(pool, round start, three prizes, released) for each close. - Each winner's
ClaimLedgerfor the quote mint:lifetime[prize]andowed.