本頁內容由 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 以拒絕輸入或輸出代幣帳戶被凍結的訂單。詳見指令 → CreatePermissionedPool和2026-07-30 變更日誌條目。
2026-08 版本新增針對選定 KYC 受限發行人池的條件頭寸凍結路徑。每個新頭寸 NFT 鑄造都使用池作為凍結權限,但 NFT 代幣帳戶預設保持未凍結且可轉讓。CLMM 僅在頭寸通過 OpenPositionV2 或 OpenPositionWithToken22Nft 打開且任一池鑄造的凍結權限與程式的受限發行人列表相符時才凍結它。所有者仍可管理流動性和關閉匹配頭寸,但無法轉讓其 NFT 或更改代幣帳戶所有者。現有頭寸不會被追溯凍結。詳見Tick 和頭寸 → 受限發行人頭寸和2026-08-17 變更日誌條目。
CLMM 的優勢
- 資本效率。 穩定幣對 LP 在平價附近 ±0.1% 範圍內集中流動性,相比相同交易對的 CPMM 池,每美元 TVL 的費用收益可高 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,但有不同的燃氣成本、不同的費用會計模型,且沒有可互換的 LP 代幣。如果你想要簡單的可互換 LP 池,使用 CPMM。
CLMM 與 CPMM 和 AMM v4 的差異
心智模型
將 CLMM 池視為三個疊加的數據結構:sqrt_price空間中的連續曲線。 池的價格表示為sqrt_price_x64,一個 Q64.64 定點數。交換沿著這條曲線行走;在 tick 邊界內,數學是標準的集中流動性 AMM 數學(詳見algorithms/clmm-math)。- 離散 tick 圖。 價格被量化為 tick —
1.0001的整數次冪。每個 tick 有已知的sqrt_price。頭寸將其端點引用為整數 tick 索引。Tick 索引被分組為固定大小的 tick 陣列以供存儲。 - 每頭寸費用和獎勵簿記。 每個頭寸存儲上次更新時的全局
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;轉出。
liquidity 金額縮放。
何時選擇 CLMM
在以下情況選擇 CLMM:- 你向穩定或均值回歸交易對(USDC/USDT、jitoSOL/SOL、wBTC/BTC)提供流動性,並希望在平價附近集中。
- 你是願意監控價格和重新平衡的做市商。
- 你特別需要每池激勵發放而無需建立獨立農場。
- 你需要每頭寸會計用於自己的 LP 產品(金庫、結構化產品等)。
- 你正在推出價格發現未知的新代幣。
- 你想要單個可互換 LP 代幣,可以質押、鎖定或組合。
- 你想要被動 LP 體驗。
- 你特別需要 AMM v4 在 OpenBook 上放置的混合 CLOB 深度。
- 你正在遷移現有 AMM v4 集成,且不開啟新頭寸。
頭寸是 NFT
CLMM 頭寸在鏈上由兩個帳戶表示:- 一個頭寸 NFT 鑄造,供應量為 1。
- 一個個人頭寸狀態帳戶,以 NFT 鑄造為鑰匙,持有頭寸的 tick、流動性和上次觀察的費用增長值。
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 中的打開/調整/交換/收集/限價單/可自訂池演練。
- Raydium CLMM 源代碼 —
raydium-io/raydium-clmm - Uniswap v3 白皮書(「Uniswap v3 Core」)用於 CLMM 直接繼承的數學
reference/program-addresses用於規範程式 ID

