Skip to content
Solana
FEEPartialBit 13

Arb recapture

The pool keeps most of the price-gap profit instead of outside bots.

Where it runs

Fee

Sets or adds to what the swap pays.

Status on reel

Partial

Partial: Solana has no in-swap executor callback like Uniswap v4's, so reel charges the swap that closes a gap against a reference price instead of running a partner's arbitrage (PROGRAM.md §12). A stale or missing reference skips it.

Set by

You, at launch

Frozen in PoolParams at PoolInit; nobody can change it after.

What it does

When the pool's price drifts from other markets, the swap that closes the gap pays most of the arbitrage profit back: a share to the trader whose swap opened the gap, an optional King of the Pool pot, the protocol, and the pool's LPs, released gradually so liquidity added just in time gets almost none.

How it works on reel

The reference r comes from recap_ref: 1 Pyth (oracle), 2 a sibling reel pool of the same pair (aux), 3 a sibling pool × Pyth. If |p0 − r|/r ≥ recap_min_gap_bps and the swap moves toward r, the gap-closing segment p0 → clamp(p1, r) is priced on the curve: profit = Δbase·r − Δquote on a buy, Δquote − Δbase·r on a sell, and the charge C = profit·capture/10⁴ (at most half of X). Of C: protocol C·recapture_protocol/capture, the gap opener (the last on-curve top-level wallet whose swap widened the gap past the least gap; LPs get it if there is none or it is the arber) C·trader/capture, the pot kotp_pot_bps of the rest, LPs the rest through the stream over release_secs. A reference older than recap_max_age is skipped.

Named at launch: oracle (Pyth) · aux (sibling reel pool)

Settings · 6

SettingMinDefaultMaxWhat it does
Profit captured
recap_capture_bps
50%75%95%Share of a gap-closing swap's profit it pays back. The arber keeps the rest.
Opener share
recap_trader_bps
0%10%10%Share of the profit credited to the trader whose swap opened the gap; LPs get it if there is none.
Least gap
recap_min_gap_bps
0.1%0.3%10%Distance from the reference price below which nothing is recaptured.
LP release
release_secs
2 min1 h1 dayThe LPs' part streams into fee growth over this long, so liquidity added just in time earns little.
Reference price
recap_ref
Pyth priceAt launchSibling pool × Pyth1 reads a Pyth feed for the exact pair; 2 a reel pool of the same pair; 3 pool 1 of a multi-pool launch, converted by Pyth. §5a: 1 when a feed is given, 3 for pools 2..n of a new token's multi-pool launch; a single-pool new token has no reference, so recapture stays off.1 Pyth price · 2 Sibling reel pool · 3 Sibling pool × Pyth
Reference age limit
recap_max_age
5 s1 min1 hA reference older than this is skipped, and the swap pays no recapture.

Fees and who's paid

Paid to

Of each unit of profit at the defaults: arber 25%, reel 15%, the gap opener 10%, the pot and LPs 50%.

Protocol share

A fixed split set by the program, not the pool's protocol share.

Requires and can't be combined with

Requires

No other block.

  • A reference: a Pyth feed for the pair, or pool 1 of a multi-pool launch; a single-pool new token has none, so recapture stays off
  • With Market Guard on the same pool, the Pyth reference (1)

Can't be combined with

Worked example

Per 1 SOL of arbitrage profit at the defaults: the arber keeps 0.25, reel 0.15, the gap opener 0.10, and 0.50 goes to the King of the Pool pot and LPs (0.125 and 0.375 with a 25% pot).

Solana notes

hookr's partner executor keeps up to 25% and runs the arbitrage itself; on reel the arber keeps 1 − capture (25% at the default) and no lane exists. reel's protocol part is Config.recapture_protocol_bps (1,500), like hookr's new core.

On hookr: Lane · Live (What The Hook's executor)

Other blocks in Rewards