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.
本頁內容由 AI 自動翻譯,所有內容以英文版本為準。查看英文版 →
一句話總結
CLMM —— Concentrated Liquidity Market Maker —— 是 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和數學 → 交換期間的限價訂單匹配。 - 單邊費用(
CollectFeeOn)。 池可配置為從輸入方獲取交換費(舊版行為,模式0)、總是從token_0獲取(1)或總是從token_1獲取(2)。當交易對的一方是規範計帳代幣時(如 USDC)很有用。詳見費用 → 單邊費用。 - 動態費用。 池可選擇啟用波動追蹤費用附加費,隨著 tick 快速移動而上升,並隨時間衰減。由每層
DynamicFeeConfig和每池DynamicFeeInfo校準。詳見費用 → 動態費用和數學 → 動態費用推導。
CreateCustomizablePool 在池創建時暴露了所有三個開關。經典的 CreatePool 繼續為沒有限價訂單或動態費用的預設費用池工作。
CLMM 為你帶來什麼
- 資本效率。 穩定幣對的 LP 在距平價 ±0.1% 範圍內集中流動性,每美元 TVL 可賺取的費用相比 CPMM 池高 100 倍以上。
- 持倉級費用計帳。 費用按持倉累積,而非按 LP mint。同一池上的兩個持倉根據其範圍和價格路徑賺取不同的費用金額。
- 每對交易對多個費用層。 一對交易對可以有多個 CLMM 池,每個池綁定不同的
AmmConfig,具有自己的交易費率和 tick 間距。Web UI 和路由器會顯示在當前價格具有最多流動性的層。 - 直接在池上激勵。 最多三個獎勵代幣流可以附加到池;持倉根據其貢獻的時間 × 範圍內流動性按比例收集獎勵。詳見
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 池視為三個疊加的數據結構: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 持倉在鏈上由兩個帳戶表示:- 一個供應量為 1 的持倉 NFT mint。
- 一個個人持倉狀態帳戶,以 NFT mint 為密鑰,儲存持倉的 tick、流動性和上次觀察到的費用增長值。
products/clmm/ticks-and-positions。
舊版 CLMM 還為每個
(pool, tick_lower, tick_upper) 創建了 ProtocolPositionState 帳戶以聚合該範圍的流動性。新版本不再創建或使用它 —— 該欄位仍然出現在 OpenPosition / IncreaseLiquidity / DecreaseLiquidity 帳戶列表上作為 UncheckedAccount 以供 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


