LLMs.txt: agent-readable Markdown index of this site at /llms.txt

Pool Creation and Configuration

Understand why StablePair pools are created only by Uniswap Labs, and where each pool's fee parameters live.

What identifies a pool

Every Uniswap v4 pool is identified by five values, which together form its pool key: the two currencies, a fee field, a tick spacing, and the hook. Change any one of them and it is a different pool.

For a dynamic fee hook the fee field does not hold a rate. It holds a flag meaning that the fee is set by the hook at swap time.

Fee parameters are not part of pool identity

The parameters StablePair uses to compute a fee live in the hook's own storage, keyed by pool ID, not in the pool key:

ParameterWhat it controls
Reference rateThe price the pair is expected to hold. The fee is derived from how far the pool sits from it.
Optimal feeHow wide the band around the reference rate is.
Decay factorHow quickly the corrective fee falls each block once the price is outside the band.
Target multiplierHow far the corrective fee is allowed to fall.

Because configuration sits outside the pool key, two pools on the same pair, tick spacing, and hook cannot differ by configuration. They would be the same pool.

Why creation is permissioned

That has a direct consequence: whoever creates the pool for a given pair first occupies the identity permanently, and v4 rejects creating a pool that already exists. Under open creation, anyone could create the pool for a pair ahead of its launch and fix its parameters, with a governance vote as the only remedy.

So creation is restricted structurally. The hook's beforeInitialize callback reverts unconditionally, which makes PoolManager.initialize unusable against it. Pools are created only through the hook's own initializePool, restricted to a role held by a Uniswap Labs Safe, which validates and stores the fee configuration atomically with creation.

Two guarantees follow:

  • No pool on this hook can exist without a valid fee configuration.
  • No fee configuration can exist without a live pool.

Support for a new pair is therefore a request rather than a transaction.

Who controls what

ActionWho
Create a pool and set its opening parametersUniswap Labs Safe
Change a live pool's parametersUniswap governance
Upgrade the hookUniswap governance

See StablePair Security for the full trust model.

One hook serves every pool

Every hook entry point takes a pool key, so a single deployment handles every pair. There is one canonical StablePair hook address per chain to integrate against, listed in Deployments.

Permissioned creation is a property of this deployment rather than of the fee mechanism. Governance is the role admin and can change who may create pools.

Where to Go Next