跳轉到主要內容

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 v4CPMMCLMM
曲線常數乘積常數乘積集中(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)。
  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 持倉在鏈上由兩個帳戶表示:
  • 一個供應量為 1 的持倉 NFT mint
  • 一個個人持倉狀態帳戶,以 NFT mint 為密鑰,儲存持倉的 tick、流動性和上次觀察到的費用增長值。
轉移 NFT 即轉移持倉 —— 個人持倉帳戶的權限是 NFT 所有者。這是 Uniswap v3 開創的相同模式,在 Solana 的帳戶模型中實現。詳細說明請見products/clmm/ticks-and-positions
舊版 CLMM 還為每個 (pool, tick_lower, tick_upper) 創建了 ProtocolPositionState 帳戶以聚合該範圍的流動性。新版本不再創建或使用它 —— 該欄位仍然出現在 OpenPosition / IncreaseLiquidity / DecreaseLiquidity 帳戶列表上作為 UncheckedAccount 以供 ABI 相容性,但程序不讀取或寫入它。聚合範圍簿記直接在 tick 端點(liquidity_grossliquidity_net)上。

接下來的內容

  • 帳戶 —— 池、配置、tick 陣列和持倉帳戶佈局。
  • Tick 和持倉 —— tick 圖、tick 間距、tick 陣列大小調整、基於 NFT 的持倉。
  • 數學 —— sqrt_price_x64、交換步進、fee_growth_inside 推導。
  • 指令 —— OpenPositionIncreaseLiquiditySwapCollectRewards、限價訂單族和 CreateCustomizablePool
  • 費用和獎勵 —— 按持倉費用模型、單邊費用模式、動態費用和三個獎勵槽。
  • 程式碼示例 —— TypeScript 中的開倉、調整、交換、收取、限價訂單和可自訂池演練。
資料來源: