Skip to main content
本頁內容由 AI 自動翻譯,所有內容以英文版本為準。查看英文版 →

一句話總結

CLMM — Concentrated Liquidity Market Maker(集中流動性做市商)— 是 Raydium 的 Uniswap-v3 風格 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 和 數學 → 交換期間的限價單匹配。
  • 單邊費用(CollectFeeOn)。 池可配置為從輸入側收取交換費(舊版行為,模式 0)、始終從 token_0 收取(1)或始終從 token_1 收取(2)。當交易對的一側是規範計帳代幣(例如 USDC)時很有用。詳見 費用 → 單邊費用。
  • 動態費用。 池可選擇加入波動率追蹤費用附加費,隨著快速 tick 移動而上升,並隨時間衰減。由每層 DynamicFeeConfig 和每池 DynamicFeeInfo 校準。詳見 費用 → 動態費用 和 數學 → 動態費用推導。
新指令 CreateCustomizablePool 在池創建時公開所有三個旋鈕。經典 CreatePool 繼續用於無限價單或動態費用的預設費用池。 後續版本新增許可多池:CreatePermissionedPool 讓白名單操作者(持有 Permission PDA 的操作者)通過將 seed_index 折疊到池地址中,為同一交易對和費用層級創建多個池,並強化 OpenLimitOrder 以拒絕其輸入或輸出代幣帳戶被凍結的訂單。詳見 2026-07-30 變更日誌條目。 2026-10-22 版本向所有人開放多池創建:CreatePermissionedPool 改名為 CreateCustomizablePoolV2,Permission PDA 閘道被移除,任何支付者都可以在 seed_index 衍生地址為交易對和費用層級創建額外池。因此,一個交易對每個費用層級可能有許多 CLMM 池,請按流動性而非地址選擇池。詳見 指令 → CreateCustomizablePoolV2 和 2026-10-22 變更日誌條目。 2026-08 版本新增針對選定 KYC 受限發行人池的條件頭寸凍結路徑。每個新頭寸 NFT 鑄造都使用池作為凍結權限,但 NFT 代幣帳戶預設保持未凍結且可轉讓。CLMM 僅在頭寸通過 OpenPositionV2 或 OpenPositionWithToken22Nft 開啟且任一池鑄造的凍結權限與程式的受限發行人清單相符時才凍結它。所有者仍可管理流動性和關閉匹配頭寸,但無法轉讓其 NFT 或更改代幣帳戶所有者。現有頭寸不會被追溯凍結。詳見 Tick 和頭寸 → 受限發行人頭寸 和 2026-08-17 變更日誌條目。

CLMM 提供的優勢

  • 資本效率。 穩定幣-穩定幣 LP 在平價周圍 ±0.1% 範圍內集中流動性,每美元 TVL 的費用收益可比 CPMM 池高 100 倍以上。
  • 頭寸級費用計帳。 費用按頭寸累積,而非按 LP 鑄造。同一池上的兩個頭寸根據其範圍和價格走過的路徑賺取不同的費用。
  • 每個交易對多個費用層級。 一個交易對可以有多個 CLMM 池,每個綁定到不同的 AmmConfig,各有自己的交易費率和 tick 間距。Web UI 和路由器會顯示當前價格下流動性最多的層級。
  • 直接在池上激勵。 最多三個獎勵代幣流可附加到池;頭寸根據其貢獻的秒數 × 範圍內流動性按比例收集獎勵。詳見 products/clmm/fees。
  • NFT 頭寸。 每個頭寸都是非同質化代幣。轉讓 NFT 通常會轉讓頭寸;錢包和 UI 可以像顯示收藏品一樣顯示頭寸。只有基礎鑄造與受限發行人篩選器相符的 V2 頭寸會被凍結且不可轉讓。
  • 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 的差異

心智模型

將 CLMM 池視為三個疊加的資料結構:
  1. sqrt_price 空間中的連續曲線。 池的價格表示為 sqrt_price_x64,一個 Q64.64 定點數。交換沿著這條曲線行走;在 tick 邊界內,數學是標準的集中流動性 AMM 數學(詳見 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:
  • 你正在推出價格發現未知的新代幣。
  • 你想要單個可互換 LP 代幣,可以質押、鎖定或組合。
  • 你想要被動 LP 體驗。
在以下情況優先選擇 AMM v4:
  • 你特別需要 AMM v4 在 OpenBook 上放置的混合 CLOB 深度。
  • 你正在遷移現有 AMM v4 集成且不開啟新頭寸。

頭寸是 NFT

CLMM 頭寸在鏈上由兩個帳戶表示:
  • 一個頭寸 NFT 鑄造,供應量為 1。
  • 一個個人頭寸狀態帳戶,以 NFT 鑄造為鑰匙,持有頭寸的 tick、流動性和上次觀察的費用增長值。
轉讓未凍結的頭寸 NFT 會轉讓頭寸 — 個人頭寸帳戶的權限是 NFT 持有者。V2 頭寸僅在基礎金庫鑄造與受限發行人篩選器相符且 CLMM 在創建時凍結 NFT 代幣帳戶時才保持綁定到其原始所有者。頭寸仍可通過 CLMM 管理和關閉。詳細說明見 products/clmm/ticks-and-positions。
較舊的 CLMM 版本還為每個 (pool, tick_lower, tick_upper) 創建一個 ProtocolPositionState 帳戶以聚合該範圍的流動性。較新版本不再創建或使用它 — 該欄位仍作為 UncheckedAccount 出現在 OpenPosition / IncreaseLiquidity / DecreaseLiquidity 帳戶列表中以保持 ABI 相容性,但程式不讀取或寫入它。聚合範圍簿記直接存儲在 tick 端點(liquidity_gross、liquidity_net)上。

後續步驟

  • 帳戶 — 流動性池、設定、tick 陣列和頭寸帳戶的版面配置。
  • Tick 與頭寸 — tick 對應表、tick 間距、tick 陣列大小、基於 NFT 的頭寸。
  • 數學 — sqrt_price_x64、交換步驟詳解、fee_growth_inside 推導。
  • 指令 — OpenPosition、IncreaseLiquidity、Swap、CollectRewards、限價單系列和 CreateCustomizablePool。
  • 費用與獎勵 — 按頭寸計費模型、單邊費用模式、動態費用和三個獎勵槽位。
  • 程式碼範例 — TypeScript 中的開倉 / 調整 / 交換 / 收取 / 限價單 / 可自訂流動性池逐步解說。
參考資源: