Skip to main content

One pool per pair, per type

A pool is identified by its two tokens and its pool type — nothing else. There are no fee tiers: for each pair and type there is exactly one canonical pool, so liquidity never fragments across parallel fee variants of the same market. Tick spacing comes from a governance-set default per pool type; the fee comes from the listing — the per-type default for a public listing, or terms governance has registered — and both can be calibrated per pool afterwards.

Pool types

Concentrated Liquidity (CL)

Uniswap V3-style pools: each position concentrates capital inside a chosen price range.
  • Higher capital efficiency — the same capital earns more fees while the price trades inside your range
  • Active management — positions out of range stop earning until re-ranged
  • Custom ranges — every position picks its own bounds

Constant Product (CP)

The classic full-range x·y=k curve. Under the hood a CP pool is the same contract as CL with every position pinned to the full range — you get the simplicity of always-in-range liquidity with the same interface, events, and plugin support.
  • Always in range — no re-positioning, ever
  • Simple LPing — deposit both assets, hold a share of the pool
  • Launchpad graduations — completed bonding curves graduate into CP pools

STABLE

A separate pool contract carrying an amplified StableSwap curve, designed for pairs that trade near parity (stablecoin pairs, wrapped/native pairs):
  • Amplified pricing — near the peg, slippage is a small fraction of what constant product would charge for the same trade
  • Tickless — every position spans the whole curve; a swap resolves in one step
  • Decimal-normalized — tokens with different decimals (e.g. USDC/DAI) are normalized internally so the amplified region sits exactly at par

Who can list pools

Pools are listed through listers — small contracts that hold the exchange’s pool-creation role and apply a listing policy. A listing creates the pool and sets its opening price in the same transaction.
  • Concentrated (CL) — open to anyone. The public lister lists any pair as a concentrated pool at the opening price its caller supplies. It asks nothing of its caller, and it never reprices a pool that already has a price — so it cannot be used to move an existing market.
  • Constant product (CP) — opened by launchpad graduations. Not offered publicly: a CP pool is a concentrated pool pinned to full range, so offering both would only split one pair’s liquidity across two venues. The launchpad opens the CP pool for each graduating launch.
  • STABLE — on registered terms. The amplified curve assumes its pair trades near parity; listed against an unpegged pair it would quote both tokens at par and hand the difference to arbitrageurs at LPs’ expense. Whether a pair is pegged is a judgement, not something a contract can check, so stable pools are listed only on terms governance has registered.
The policy lives in the listers, not in the exchange core: governance admits a lister by granting it the role, and can close a door by revoking it.

Providing liquidity in practice

  • CL demands attention — a position outside its range holds a single asset and earns nothing until the price returns or you re-range. Tighter ranges earn more per unit of capital and go out of range sooner.
  • Impermanent loss is real on every curve — providing liquidity underperforms holding when the price moves significantly, and concentrated ranges amplify both fee income and this effect.
  • Passive routes exist — Liquidity Vaults manage CL ranges for you, and pools with active farming programmes pay rewards on top of trading fees.

How fees work

The fee lives in the pool, and can be dynamic. Each pool stores its current fee, readable at any time without touching the plugin. When a pool’s plugin has the dynamic-fee capability enabled, it can adjust that fee — the Dynamic Fee module raises it with measured volatility and lowers it when the market calms. A plugin attached for other purposes (farming, security) gets notified of pool events without gaining any say over what traders pay. A public listing cannot choose its fee. Pools listed through the public lister start on the per-type defaults, so nobody can squat the canonical pool for a pair with an absurd configuration. Custom terms — fee, fee coin, plugin — come only from listings governance has registered, or from contracts holding the creation role such as the launchpad. After creation, per-pool calibration is a governance action. A pool can take its fee in one coin. By default a trade pays its fee in the token it sells. A pool can instead take every fee in one fixed token of its pair — from the output side when trading the other way — so its liquidity providers and the protocol accrue fees in that single token.

Where fees go

Every trading fee is divided between the liquidity providers of the pool and the protocol, according to a protocol share set per pool by governance; the rest stays with LPs. The protocol share is the revenue that will feed the Earn layer when it ships: stakers paid from real trading activity, in the assets the fees were collected in. Building on this? Every rate, split and getter is in Fees.