> ## Documentation Index
> Fetch the complete documentation index at: https://docs.raydium.io/llms.txt
> Use this file to discover all available pages before exploring further.

# CLMM 概述

> 了解 Raydium 的 CLMM 是什么、集中流动性与恒定产品池的区别，以及何时选择 CLMM 而非 CPMM 或 AMM v4。

<Info>
  **本页内容由 AI 自动翻译，所有内容以英文版本为准。**

  [查看英文版 →](/products/clmm/overview)
</Info>

## 一句话总结

CLMM — **C**oncentrated **L**iquidity **M**arket **M**aker — 是 Raydium 的 Uniswap v3 风格 AMM。与其他 AMM 不同的是，CLMM 不是将流动性提供者的资金分散到整条价格曲线，而是让 LP 存入 **特定价格范围**。在该范围内，每一块钱的存款效率比 CPMM 池高许多倍；超出范围外，存款不产生收益，作为单边余额存放。协议按 **tick**（离散化的价格区间）跟踪流动性，用编码为 Q64.64 定点数的价格平方根（`sqrt_price_x64`）表示池状态，并为每个 LP 头寸铸造 **NFT** 而不是可互换的 LP 代币。

## 新增功能

最新的 CLMM 发布版本在 Uniswap v3 风格的核心基础上增加了三项功能。这些功能在池创建时可选，与现有的池和头寸向后兼容：

* **限价单**。LP 现在可以在特定价格的单个 tick 处挂单，当交换穿过该 tick 时，交换路径会按 FIFO 顺序成交。订单以限价结算到所有者的 ATA；链下守护者（`limit_order_admin`）可以清扫已成交的订单，无需所有者在线。详见[指令 → OpenLimitOrder / SettleLimitOrder](/zh/products/clmm/instructions) 和[数学 → 交换中的限价单匹配](/zh/products/clmm/math)。
* **单边费用（`CollectFeeOn`）**。池可以配置为从输入端口收取交换费（传统行为，模式 `0`），或始终从 `token_0`（`1`），或始终从 `token_1`（`2`）。当交易对的一侧是规范记账代币时很有用（如 USDC）。详见[费用 → 单边费用](/zh/products/clmm/fees)。
* **动态费用**。池可以选择加入波动率追踪费用附加费，随着快速 tick 移动而上升，随时间衰减。由每层级 `DynamicFeeConfig` 和每池 `DynamicFeeInfo` 校准。详见[费用 → 动态费用](/zh/products/clmm/fees) 和[数学 → 动态费用推导](/zh/products/clmm/math)。

新增指令 `CreateCustomizablePool` 在池创建时暴露所有三个旋钮。经典的 `CreatePool` 继续适用于不含限价单或动态费用的默认费用池。

## CLMM 的优势

* **资本效率**。稳定币对 LP 将流动性集中在价平线周围 ±0.1% 范围内，可以比相同交易对的 CPMM 池每单位 TVL 赚取 100 倍以上的费用。
* **头寸级费用核算**。费用按头寸计算，而非按 LP 铸币。同一池内的两个头寸根据其范围和价格走势赚取不同的费用。
* **每个交易对多个费用等级**。一个交易对可以有多个 CLMM 池，每个绑定到不同的 `AmmConfig`，各有自己的交易费率和 tick 间距。Web UI 和路由器会显示当前价格下流动性最充足的等级。
* **直接在池上激励**。最多三个奖励代币流可以附加到池；头寸根据其贡献的秒数 × 范围内流动性按比例收集奖励。详见[`products/clmm/fees`](/zh/products/clmm/fees)。
* **NFT 头寸**。每个头寸是一个非同质化代币，铸币等于确定性 PDA。转移 NFT 即转移头寸；钱包和 UI 可以像显示收藏品一样显示头寸。
* **Token-2022 支持**在交易对的两侧，具有与 CPMM 相同的扩展限制。

## CLMM 不是什么

* **不是设定后就忘记的池**。当 SOL 为 \$160 时设置的范围，如果 SOL 跌至 \$80 而你不主动调整，将不再产生收益。CLMM 奖励活跃的 LP；消极的 LP 应该留在 CPMM。
* **不是零成本开启**。头寸跨越的每个新 tick 数组必须初始化，需要支付租金。范围越宽越便宜；范围越窄越昂贵。
* **不是 CLOB**。与 AMM v4 不同，CLMM 不依赖 OpenBook。所有流动性都在 tick 映射上。
* **不是 CPMM 的超集**。跨越 `[tick_min, tick_max]` 的最大范围 CLMM 头寸行为 *类似于* CPMM，但有不同的燃气成本、不同的费用核算模型，且没有可互换的 LP 代币。如果想要简单的可互换 LP 池，请使用 CPMM。

## CLMM、CPMM 和 AMM v4 的对比

| 维度         | AMM v4     | CPMM                      | CLMM                    |
| ---------- | ---------- | ------------------------- | ----------------------- |
| 曲线         | 恒定产品       | 恒定产品                      | 集中（基于 tick）             |
| LP 份额      | 可互换 LP 铸币  | 可互换 LP 铸币                 | 每头寸 NFT                 |
| 流动性位置      | 跨越所有价格     | 跨越所有价格                    | 在用户选择的范围内               |
| 费用等级       | 固定 0.25%   | 每 `AmmConfig`（如 0.25%、1%） | 每 `AmmConfig` × tick 间距 |
| 主动管理       | 不适用        | 不适用                       | **必需**                  |
| 费用核算       | 池级         | 池级                        | 每头寸                     |
| 奖励农场       | 独立 Farm 程序 | 独立 Farm 程序                | 内置（最多 3 个奖励）            |
| Token-2022 | 否          | 是                         | 是                       |
| 链上预言机      | 否          | `observation` 环           | 每池 `observation` 数组     |

## 心智模型

可以将 CLMM 池视为三个重叠的数据结构：

1. **`sqrt_price` 空间中的连续曲线**。池的价格表示为 `sqrt_price_x64`，一个 Q64.64 定点数。交换沿着这条曲线行走；在 tick 边界内，数学运算是标准的集中流动性 AMM 数学（详见[`algorithms/clmm-math`](/zh/algorithms/clmm-math)）。
2. **离散 tick 映射**。价格量化为 tick — `1.0001` 的整数次幂。每个 tick 有已知的 `sqrt_price`。头寸将其端点引用为整数 tick 索引。Tick 索引被分组为固定大小的 **tick 数组**以用于存储。
3. **每头寸费用和奖励簿记**。每个头寸存储上次更新时的全局 `fee_growth_inside`。当 LP 接触头寸（开启、关闭、调整、收集）时，程序从当前全局值减去存储值以计算应得收益。这就是 Uniswap v3 的 `feeGrowthInside0X128 / feeGrowthInside1X128` 模式。

每个用户操作分解为这三个结构上的状态转换：

* **开启头寸**：选择 tick 范围、存入代币、铸造 NFT、将流动性插入范围内的 tick 映射、初始化任何之前空的 tick 数组。
* **增加/减少流动性**：调整存储在 NFT 相关头寸账户和 tick 映射中的数量；同时收集累计费用。
* **交换**：从当前 `sqrt_price_x64` 沿交易方向行走，消费活跃流动性直到输入耗尽或到达下一个初始化的 tick；穿过 tick 并在新一侧拾取或放下流动性。
* **收集费用/奖励**：计算每一侧和每个奖励流的 `fee_growth_inside_now − fee_growth_inside_last` × `position_liquidity`；转出。

除此之外，池对哪些头寸开放无所谓。同一范围内的两个 LP 看到相同的费用增长路径，按各自的 `liquidity` 数量缩放。

## 何时选择 CLMM

当以下情况时选择 CLMM：

* 你在为 **稳定或均值回复交易对**（USDC/USDT、jitoSOL/SOL、wBTC/BTC）提供流动性，并想在价平线附近集中。
* 你是 **做市商**，愿意监控价格并重新平衡。
* 你特别需要 **每池激励排放**，而不想单独建立农场。
* 你需要 **每头寸核算**用于自己的 LP 产品（金库、结构化产品等）。

选择 [CPMM](/zh/products/cpmm) 当：

* 你正在推出价格发现未知的新代币。
* 你想要单个可互换的 LP 代币，可以质押、锁定或组合。
* 你想要消极的 LP 体验。

选择 [AMM v4](/zh/products/amm-v4) 当：

* 你特别需要 AMM v4 在 OpenBook 上放置的混合 CLOB 深度。
* 你在迁移现有的 AMM v4 集成，而不是开启新头寸。

## 头寸是 NFT

CLMM 头寸在链上由两个账户表示：

* **头寸 NFT 铸币**，供应量为 1。
* **个人头寸状态**账户，以 NFT 铸币为关键，持有头寸的 tick、流动性和上次观察的费用增长值。

转移 NFT 即转移头寸 — 个人头寸账户的权限是 NFT 所有者。这是与 Uniswap v3 率先推行的相同模式，在 Solana 账户模型中实现。详细说明见[`products/clmm/ticks-and-positions`](/zh/products/clmm/ticks-and-positions)。

<Note>
  较早的 CLMM 发布版本还为每个 `(pool, tick_lower, tick_upper)` 创建了 `ProtocolPositionState` 账户以聚合该范围的流动性。**较新的发布版本不再创建或使用它** — 该字段仍作为 `UncheckedAccount` 出现在 `OpenPosition` / `IncreaseLiquidity` / `DecreaseLiquidity` 账户列表中以保持 ABI 兼容性，但程序不读或写它。聚合范围簿记直接存在于 tick 端点（`liquidity_gross`、`liquidity_net`）。
</Note>

## 接下来看什么

* [账户](/zh/products/clmm/accounts) — 池、配置、tick 数组和头寸账户布局。
* [Tick 和头寸](/zh/products/clmm/ticks-and-positions) — tick 映射、tick 间距、tick 数组大小、基于 NFT 的头寸。
* [数学](/zh/products/clmm/math) — `sqrt_price_x64`、交换步进、`fee_growth_inside` 推导。
* [指令](/zh/products/clmm/instructions) — `OpenPosition`、`IncreaseLiquidity`、`Swap`、`CollectRewards`、限价单家族和 `CreateCustomizablePool`。
* [费用和奖励](/zh/products/clmm/fees) — 每头寸费用模型、单边费用模式、动态费用和三个奖励槽。
* [代码演示](/zh/products/clmm/code-demos) — 用 TypeScript 演示开启/调整/交换/收集/限价单/可定制化池。

来源：

* [Raydium CLMM 源代码 — `raydium-io/raydium-clmm`](https://github.com/raydium-io/raydium-clmm)
* Uniswap v3 白皮书（"Uniswap v3 Core"）用于 CLMM 直接继承的数学
* [`reference/program-addresses`](/zh/reference/program-addresses) 获取规范程序 ID
