> ## 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。CLMM 不像 CPMM 那樣將流動性提供者的存款分散在整條價格曲線上，而是讓 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-Hant/products/clmm/instructions)和[數學 → 交換期間的限價訂單匹配](/zh-Hant/products/clmm/math)。
* **單邊費用（`CollectFeeOn`）。** 池可配置為從輸入方獲取交換費（舊版行為，模式 `0`）、總是從 `token_0` 獲取（`1`）或總是從 `token_1` 獲取（`2`）。當交易對的一方是規範計帳代幣時（如 USDC）很有用。詳見[費用 → 單邊費用](/zh-Hant/products/clmm/fees)。
* **動態費用。** 池可選擇啟用波動追蹤費用附加費，隨著 tick 快速移動而上升，並隨時間衰減。由每層 `DynamicFeeConfig` 和每池 `DynamicFeeInfo` 校準。詳見[費用 → 動態費用](/zh-Hant/products/clmm/fees)和[數學 → 動態費用推導](/zh-Hant/products/clmm/math)。

一條新指令 `CreateCustomizablePool` 在池創建時暴露了所有三個開關。經典的 `CreatePool` 繼續為沒有限價訂單或動態費用的預設費用池工作。

## CLMM 為你帶來什麼

* **資本效率。** 穩定幣對的 LP 在距平價 ±0.1% 範圍內集中流動性，每美元 TVL 可賺取的費用相比 CPMM 池高 100 倍以上。
* **持倉級費用計帳。** 費用按持倉累積，而非按 LP mint。同一池上的兩個持倉根據其範圍和價格路徑賺取不同的費用金額。
* **每對交易對多個費用層。** 一對交易對可以有多個 CLMM 池，每個池綁定不同的 `AmmConfig`，具有自己的交易費率和 tick 間距。Web UI 和路由器會顯示在當前價格具有最多流動性的層。
* **直接在池上激勵。** 最多三個獎勵代幣流可以附加到池；持倉根據其貢獻的時間 × 範圍內流動性按比例收集獎勵。詳見[`products/clmm/fees`](/zh-Hant/products/clmm/fees)。
* **NFT 持倉。** 每個持倉都是非同質化代幣，其 mint 等於確定性的 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，但有不同的 gas 成本、不同的費用計帳模型，且沒有可互換 LP 代幣。如果你想要簡單的可互換 LP 池，使用 CPMM。

## CLMM 與 CPMM 和 AMM v4 的區別

| 維度         | AMM v4      | CPMM                      | CLMM                    |
| ---------- | ----------- | ------------------------- | ----------------------- |
| 曲線         | 常數乘積        | 常數乘積                      | 集中（tick 型）              |
| LP 份額      | 可互換 LP mint | 可互換 LP mint               | 按持倉 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-Hant/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-Hant/products/cpmm)：

* 你正在推出價格發現未知的新代幣。
* 你想要可以質押、鎖定或與其他協議組合的單個可互換 LP 代幣。
* 你想要被動的 LP 體驗。

在以下情況下選擇 [AMM v4](/zh-Hant/products/amm-v4)：

* 你特別需要 AMM v4 在 OpenBook 上提供的混合 CLOB 深度。
* 你正在遷移現有的 AMM v4 集成，不開倉新持倉。

## 持倉是 NFT

CLMM 持倉在鏈上由兩個帳戶表示：

* 一個供應量為 1 的**持倉 NFT mint**。
* 一個**個人持倉狀態**帳戶，以 NFT mint 為密鑰，儲存持倉的 tick、流動性和上次觀察到的費用增長值。

轉移 NFT 即轉移持倉 —— 個人持倉帳戶的權限是 NFT 所有者。這是 Uniswap v3 開創的相同模式，在 Solana 的帳戶模型中實現。詳細說明請見[`products/clmm/ticks-and-positions`](/zh-Hant/products/clmm/ticks-and-positions)。

<Note>
  舊版 CLMM 還為每個 `(pool, tick_lower, tick_upper)` 創建了 `ProtocolPositionState` 帳戶以聚合該範圍的流動性。**新版本不再創建或使用它** ——  該欄位仍然出現在 `OpenPosition` / `IncreaseLiquidity` / `DecreaseLiquidity` 帳戶列表上作為 `UncheckedAccount` 以供 ABI 相容性，但程序不讀取或寫入它。聚合範圍簿記直接在 tick 端點（`liquidity_gross`、`liquidity_net`）上。
</Note>

## 接下來的內容

* [帳戶](/zh-Hant/products/clmm/accounts) ——  池、配置、tick 陣列和持倉帳戶佈局。
* [Tick 和持倉](/zh-Hant/products/clmm/ticks-and-positions) ——  tick 圖、tick 間距、tick 陣列大小調整、基於 NFT 的持倉。
* [數學](/zh-Hant/products/clmm/math) —— `sqrt_price_x64`、交換步進、`fee_growth_inside` 推導。
* [指令](/zh-Hant/products/clmm/instructions) ——  `OpenPosition`、`IncreaseLiquidity`、`Swap`、`CollectRewards`、限價訂單族和 `CreateCustomizablePool`。
* [費用和獎勵](/zh-Hant/products/clmm/fees) ——  按持倉費用模型、單邊費用模式、動態費用和三個獎勵槽。
* [程式碼示例](/zh-Hant/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-Hant/reference/program-addresses)用於規範程序 ID
