> 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/run-a-pool/create-and-configure-a-pool.md).

# Configure a pool

Prepare your Price Provider and extensions, then create the pool through the [Metric app](https://app.metric.xyz) or `MetricOmmPoolFactory.createPool(PoolParameters)`.

Decide on the [pool tier](/use-metric/provide-and-manage-liquidity/pool-tiers.md) you're aiming for before choosing settings. Several settings are permanent once the pool exists: tokens, bin layout, extension addresses and order, initial share amounts, minimalOperationalLiquidity, and the price provider timelock (so a fixed price provider stays fixed, and a replaceable one can't later be made fixed).

## 1. Pair and pricing

* Set the chain, `token0`, `token1` and the provider address. The provider's `token0()` and `token1()` must match the pool's tokens in the same order, or creation reverts.
* Choose how the provider can be replaced, using priceProviderTimelock:
  * **Fixed**: type(uint256).max. The provider can never be replaced.
  * **Timelocked**: any other value above 0. The admin proposes a new provider and can switch to it after the delay.
  * **Replaceable at once**: 0. The admin still proposes a new provider first, but can switch to it right away.
* Set `bidAskRefAsymmetryX8`. It must be greater than zero and no higher than the factory's creation cap. Test your strategy's quotes with this value. The factory owner can change it after creation, and the cap doesn't apply then.

## 2. Bins and initial liquidity

| Setting                   | What to specify                                                                                               |
| ------------------------- | ------------------------------------------------------------------------------------------------------------- |
| **Bin layout**            | Widths of each bin and total coverage in percentage deviations from the reference.                            |
| **Starting position**     | The starting deviation.                                                                                       |
| **Additional bin fees**   | Extra fees for each trading direction. These remain adjustable after creation.                                |
| **Initial share amounts** | The token amounts one LP share represents when liquidity is added to an empty bin.                            |
| **Minimum liquidity**     | The smallest number of shares you can add or remove in a bin, and the smallest position you can leave behind. |

For example, 13 bins of 0.01% on each side cover ±0.13%.

Choose bins for the initial deposit; depending on the bins, it needs one token or both. Later LPs choose their own allocations.

## 3. Extensions and permissions

* Supply up to 7 extension addresses (distinct and non-zero), one initialization payload per extension, and the call order for each action. See [Build an extension](/run-a-pool/build-an-extension.md).
  * Confirm that each guard you need is initialized with settings that turn it on. For example, a StopLoss with `drawdownE6 = 0` is attached but does nothing.
* Deposits are open to anyone by default. To run a private pool on your own capital only, attach the deposit allowlist.
* For public pools, it's recommended to complete the [curator onboarding](/use-metric/provide-and-manage-liquidity/public-pools-and-curation.md) to get better safety rankings.

## 4. Admin and fees

Set the admin, the admin fee recipient (`adminFeeDestination`) and the admin fees:

* Spread fee (`adminSpreadFeeE6`): the admin's share of the spread each trade pays (the half spread plus any additional bin fee). Metric also takes a share of the spread, and LPs keep the rest.
* Notional fee (`adminNotionalFeeE8`): an extra charge on trade volume, added to the trader's price, that would go to the admin, none to LPs. The admin cap is currently 0%, so it must be left at `0`.

Read the defaults and caps from `GET /public/v1/evm/factory-settings`, and read the actual rates from the pool's metadata after creation. If you set a protocol fee below the factory default, it is raised to the default. After creation, the admin can change the admin fees within the factory's caps, the additional bin fees and the admin fee recipient. The admin can also pause the pool, propose a new provider (unless it is fixed) and transfer the admin role. Metric sets the protocol fees. If Metric lowers the caps, admin fees above the new cap are lowered to it the next time Metric updates that pool's protocol fee. See [Fees](/use-metric/fees.md).

Anyone can call `factory.collectPoolFees(pool)`. Fees go to the configured recipients, not the caller. If a transfer to a recipient fails, the pool emits `FeeTransferFailed` and keeps that fee pending for a later collection, so check the event or balances.

## 5. Create, fund and verify

Record the pool address, verify its configuration and complete required source-access registration. Start with a small deposit and check:

* [ ] Correct tokens, provider, admin, fee recipient and extension settings.
* [ ] Live quotes and simulations succeed through the intended route.
* [ ] Actual swaps work in both directions with expected fees and amounts.
* [ ] Intended LPs can deposit and withdraw; prohibited actions fail.
* [ ] Guard rejection paths work. Account for StopLoss's first-trade baseline before accepting outside funds.
* [ ] Required updates and monitoring are running; displayed tier and routing status match the configuration.
* [ ] The pool holds at least \~$1,000 in liquidity. Most aggregators don’t route to smaller pools

Verify actual swaps and withdrawals before increasing liquidity; simulation alone is insufficient.
