Fees
Every swap in a market pays the LP fee its creator chose at launch, between 1% and 3%. The fee accrues to the two liquidity positions the launchpad owns until someone calls collectFees, which anyone may do. The coin side of what is collected is split 50% to holders, 30% to the protocol token buyback, 20% to the protocol. The token side goes to holders in full, as tokens.
The split
| Fees collected in | Share | Goes to | Delivered as |
|---|---|---|---|
| the pair coin | 50% | holders of the market token, pro rata to balance, per block | the pair coin, or whatever asset each holder chose, converted at claim |
| the pair coin | 30% | protocol token buyback | coin → USDC → ETH into the Buyback contract, which buys the protocol token and burns it |
| the pair coin | 20% | protocol | coin → USDC → ETH to the protocol wallet, or coin → USDC into the RedemptionVault while a coin's coverage is below 100% |
| the market token | 100% | holders of the market token, pro rata to balance, per block | the market token itself |
The coin split is splitCoin(amount) on the Launchpad: 5,000 bps to holders, 3,000 to buyback, and the remainder (2,000) to the protocol, so rounding dust lands in the protocol share. There is no creator share.
Why token-side fees are paid in kind
Fees arrive in both assets of the pool. A buyer paying in the pair coin pays the fee in coin; a seller paying in the token pays it in token. The coin has an index price, so the protocol can sell its share of it with a floor it trusts. The market token has no index — its only price is the pool it came from. Selling it on-chain would mean the protocol trading a thin, un-indexed asset with no operator to judge the fill, and anyone who could time that sale could profit from it. So it is not sold. The token-side fees go to holders as tokens, credited to the same accumulator as the coin side, and the 50 / 30 / 20 split applies to the coin side only.
What collectFees does
collectFees(token) runs modifyLiquidity with a zero delta on both positions, which realizes the fees they have accrued without moving the positions. It takes the holders' 50% of the coin and all of the token to the Distributor and calls notify, which credits the token's per-share accumulator. It takes the other 50% of the coin to the Treasury and calls notifyCollected, which writes it to that market's ledger. FeesCollected is emitted with the amounts and the address that triggered it.
Anyone may call it, at any time, for any market. Until it is called, the fees sit in the pool positions and no holder's accrued balance includes them. The rewards page runs it before your claim in the same flow, so "collect then claim" is one action there. Holder rewards covers what happens after notify.
The ledger
The Treasury owns one ledger per market, readable through ledgerOf(token) on either the Treasury or the Launchpad. It holds only the protocol's two shares, and only what is still to be swept:
| Field | Meaning |
|---|---|
buybackCoin |
pair coin awaiting sweepToBuyback |
protocolCoin |
pair coin awaiting sweepProtocol or topUpVault |
The holders' share is not in the ledger. It lives in the launch token's own accumulator, and each holder's part of it is Distributor.pendingOf(token, wallet).
Cumulative totals since launch are kept separately on the Launchpad as collectedOf(token), in coin and in token.
Sweeps are permissionless, with floors
The three sweeps on the Treasury may be called by anyone: sweepToBuyback(token, coin, amount), sweepProtocol(token, coin, amount) and topUpVault(token, coin, amount). Each sells coin from the market's ledger through the LaunchRouter and each computes its own minimum-out from the feeds: the coin's index value of amount, minus MAX_SLIPPAGE_BPS, which is 200, so 2%, converted to ETH at the Chainlink ETH/USD price for the two ETH sweeps or left in USDC for the top-up. A caller cannot pass a lower floor, so the worst a stranger can do by calling a sweep is realize the protocol's share 2% under the index; usually it is realized at the index, because a synthetic coin sells through the vault. topUpVault also refuses to run unless that coin's coverageBps is below 100%. Automation has the full list of calls that work this way.
Pool fees along the route
These are Uniswap and Aerodrome fees rather than Inference Markets fees, and none of them reach holders.
| Hop | Fee | Who receives it |
|---|---|---|
| WETH/USDC V3 pool on Base | 0.05% | that pool's liquidity providers |
| A synthetic coin's peg pool | 0.30% | the PegManager's own two ranges, folded back into the ask and bid at the next reprice |
| Aerodrome v2 USDC/WETH, WETH/VVV and VVV/DIEM pools, for DIEM legs | the pool's own fee | Aerodrome's liquidity providers |
| Aerodrome Slipstream USDC/stock pools, for stock legs | the pool's own fee | Aerodrome's liquidity providers |
Fees on redemption
Redeeming a coin at the index has its own two numbers, both set per coin in the vault's config and both separate from the trading fee above. feeBps is retained in the vault on redemption, and it is 0 at launch, so a dollar redemption pays the full index value. diemSpreadBps is 100, meaning a DIEM redemption pays 1% less than the index; that spread covers the cost of sourcing DIEM on a thin pool and makes it unprofitable to nudge the DIEM feed and redeem against it. Redemption has the arithmetic.
Fees on the protocol token
The protocol token trades in a native-ETH pool on Uniswap v4. That pool's LP fee is a Uniswap fee, paid to whoever provides liquidity in it, and it is not an Inference Markets protocol fee. See the protocol token.