> For the complete documentation index, see [llms.txt](https://docs.metric.xyz/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.metric.xyz/reference/glossary.md).

# Glossary

Definitions of the terms used across these docs, from pools and fees to contract details.

### Pool roles

#### Curator

A person or organization running a pool, who configures its pricing strategy and pool settings. Metric doesn't endorse any curator or strategy, verified or not; see [Curators](/use-metric/provide-and-manage-liquidity/public-pools-and-curation.md).

#### Verified curator

A curator who has passed KYB, is in Metric's registry and created the pool. Verification identifies the curator; it doesn't vouch for the strategy. See [Pool tiers](/use-metric/provide-and-manage-liquidity/pool-tiers.md#definitions).

#### Private pool curator

A market maker running a pool with its own capital and pricing strategy.

### Pools & liquidity

#### Private pool

A pool with a deposit allowlist, run on its curator's own capital. It's shown as 🟣 Private instead of receiving a tier.

#### Classic AMM

An AMM that sets its price from its own token balances, so the price moves only when someone trades against it.

#### Bin

A percentage range around the reference price, such as +1% to +2%, where LPs place liquidity. Trading happens in the **active bin**. See [Liquidity and bins](/how-pools-work/liquidity-and-bins.md).

#### Impermanent loss

In a classic AMM, the loss LPs take compared with holding, when arbitrageurs trade the pool to a new market price. It only ever runs against LPs. Metric pools don't have it as long as their reference keeps up with the market, but LPs can still lose money; see [Understanding your returns](/use-metric/provide-and-manage-liquidity/understanding-your-returns.md#trading-pnl).

#### Trading PnL

How much more or less you have than if you had simply held the tokens you deposited, with both valued at today's prices. It comes from trades changing your tokens and includes your LP earnings. It can be positive or negative. See [Understanding your returns](/use-metric/provide-and-manage-liquidity/understanding-your-returns.md#trading-pnl).

### Spread & fees

#### Spread

The gap between a pool's bid and ask, usually quoted relative to the mid price, in basis points. It is the cost of buying and selling back. See [Fees](/use-metric/fees.md).

#### Half spread

Half the bid-ask spread: what one trade pays relative to the reference price, before price impact, averaged over the buy and sell sides. Compare it with another venue's swap fee, which is also charged once per trade.

Each side is measured from the reference, and the two can differ:

* Buying token0 from the pool: `ask / reference − 1`.
* Selling token0 to the pool: `reference / bid − 1`.

The contracts call it the base fee and calculate these ratios in Q64.64. The additional bin fee and the notional fee are separate.

#### Additional bin fee

Extra spread the pool curator can add to a bin, with separate rates for buying and selling. A trade pays each bin's rate on the part filled in that bin.

#### Notional fee

An optional fixed percentage of trade size, capped at 0% for the curator and 1% for Metric, so for now only Metric can apply one, on some pools. It's off by default. If a pool has one, it's in the quote and goes to Metric, not LPs.

### Safeguards

#### Anchored pricing

Pricing through an Anchored Price Provider, which takes its reference from Chainlink or Pyth data (for tokenized stocks, Pyth through the Multiplier Oracle) and sets a maximum bid and a minimum ask that the curator can't quote through. See [Anchored standard](/how-pools-work/anchored-pricing.md#anchored-pricing).

#### Withdrawal extension

Any extension registered on `beforeRemoveLiquidity` or `afterRemoveLiquidity`, including Metric's standard ones. It can block LP exits, so it makes a pool High Risk. Adding extensions on swaps or deposits doesn't lower the tier. See [Pool tiers](/use-metric/provide-and-manage-liquidity/pool-tiers.md).

### Price formats & units

#### Q64.64

Fixed-point number format used for all prices. The integer is the real value × 2^64; convert to human-readable with `value / 2^64`. A price is token0 expressed in token1 units (e.g. 1 ETH in USDC). Decimals are normalized internally, so no manual decimal adjustment is needed when feeding values back into the contracts.

#### E6

"Parts per million" fixed-point: `1_000_000` = 100%, `10_000` = 1%. Used for bin deviations, spread-fee shares and `priceImpactE6`. Note: the routing API's per-leg `priceImpactE6` is a raw E6 string, while the split response's top-level `priceImpactBestRoute` is the same quantity as a **decimal fraction** (`0.01` = 1%).

#### bps (basis points)

`1 bps = 0.01% = 100 E6`. Used for split-routing thresholds (`split_threshold_bps`, `min_improvement_bps`, `min_leg_fraction_bps`).

#### Scaling

Cumulative depth volumes are reported in each token's **external (onchain) decimals**: `cumulativeVolume` in the output token, `cumulativeInputVolume` in the input token. Depth and `bidAdj`/`askAdj` prices use normalized Q64.64, while `/route`'s `effectivePriceX64` uses raw token units. Quoter prices use normalized Q64.64; its token amounts use each token's native base units. Divide prices by `2^64` and token amounts by `10^decimals` to display human-readable values. The pool's internal scale factor for each token is `10^(max(18, token0.decimals(), token1.decimals()) − token.decimals())`.

### Prices & oracle

#### Price Provider

A contract that returns a [provider quote](/how-pools-work/price-providers.md) through `getQuote()`, in normalized Q64.64. It can use oracle data or custom pricing logic. Metadata exposes the address as `priceProviderAddress`. `pool.getImmutables()` contains the immutable provider address; a pool configured for a mutable provider resolves its current address separately.

#### Multiplier Oracle

An oracle for tokenized stocks whose issuer applies a multiplier for splits and other corporate actions. It prices the token as the Pyth share price × the multiplier it reads from the token. Live on Base (B20 Assets) and Robinhood Chain (Robinhood Stock Tokens). See [Oracles](/how-pools-work/oracles.md#multiplier-oracle-tokenized-stocks).

#### Raw provider prices

The unadjusted provider quote returned by `IPriceProvider.getQuote()`. `swap()` reads it from the provider; hypothetical quotes and `simulateSwapAndRevert(...)` take all three values as explicit arguments. Do not replace them with adjusted pool prices.

#### Reference price

The provider-supplied price corresponding to 0% deviation. It anchors the bin ranges and the two directional base fees; it is not necessarily the midpoint between bid and ask.

#### Deviation

The pool's current marginal price before the spread, relative to its reference: `price / reference − 1`. It combines the active bin's lower deviation with the position within that bin. Halfway through a +1% to +2% bin means +1.5%.

#### bidAdj / askAdj

The pool's adjusted marginal bid/ask, including its current deviation and directional fees. They can be used as Q64.64 price limits, but are **not** substitutes for the raw provider quote in simulation.

### Swap mechanics

#### Slippage

The difference between the output you were quoted and the output you get, caused by prices or liquidity changing before your trade executes. Your slippage tolerance sets the worst result you accept; if execution would be worse, the swap reverts.

#### zeroForOne

Swap direction. `true` = token0 → token1 (deviation moves down); `false` = token1 → token0 (deviation moves up), at a given reference.

#### amountSpecified

The swap amount (`int128`). **Positive** = exact input; **negative** = exact output. `0` reverts with `InvalidAmount` on both `swap` and `simulateSwapAndRevert`.

#### recipient

The address that receives the output tokens. May differ from the caller (`msg.sender`), which is the contract that implements and is charged in the callback.

#### amount0Delta / amount1Delta

The token balance changes from the **pool's perspective**: positive = the pool receives that token (you owe it), negative = the pool sends that token (to `recipient`). A successful swap has one positive and one negative delta.

#### priceLimitX64

A Q64.64 limit on the fee-inclusive marginal pool price: a **floor** when `zeroForOne = true` and a **ceiling** when `false`. The raw pool can stop with a partial fill. Its open-limit values are `0` for true and `2^128 − 1` for false; a limit blocking all progress reverts with `FinalAmountIsZero`.

The SimpleRouter and SwapQuoter normalize an opposite-direction open sentinel. The router's `exactInputSingle` can accept a partial fill if minimum output is met; multihop exact-input and exact-output methods enforce their specified amounts.

#### Swap callback (`metricOmmSwapCallback`)

The settlement hook the pool calls on `msg.sender` mid-swap. The pool sends the output token first, then the callback must transfer the owed input token to the pool (verified via balance check, else `IncorrectDelta`). Deltas are passed as `int256`. Required only when calling the pool directly; the Router implements it for you.

### Contracts

#### Pool (`MetricOmmPool`)

The core AMM contract. Holds liquidity and executes swaps using the provider quote. Exposes `swap` and `simulateSwapAndRevert`. See [Liquidity and bins](/how-pools-work/liquidity-and-bins.md#execution-price) for pool pricing.

#### Quoter (`MetricOmmSwapQuoter`)

A periphery lens for `eth_call`. Live methods read the pool's provider quote, then call `simulateSwapAndRevert`; hypothetical methods pass a caller-supplied provider quote to it. The quoter decodes the deliberate revert and returns `(amountIn, amountOut)`. Live methods revert `PoolPaused(pool, pauseLevel)` for a paused pool. See [Get quote](/reference/smart-contracts/get-quote.md) for simulation limits.

#### SimpleRouter (`MetricOmmSimpleRouter`)

Periphery, execution. Implements the swap callback and supports exact-input/output swaps, payment helpers and slippage guards. It is separate from the Quoter.

#### Factory (`MetricOmmPoolFactory`)

Deploys pools (`createPool`) and holds protocol-fee settings.

#### simulateSwapAndRevert

Pool function that simulates with a caller-supplied provider quote, then **reverts** with the resulting signed token deltas. No state persists. See [Get quote](/reference/smart-contracts/get-quote.md) for the checks it includes and omits.

#### SimulateSwap

The custom error `SimulateSwap(int256 amount0Delta, int256 amount1Delta)` that carries simulation results in the revert data.

#### WrappedError

`WrappedError(address target, bytes4 selector, bytes reason)` is raised by `MetricOmmSwapQuoter` to wrap an unexpected inner revert so callers can see what failed.
