跳轉到主要內容
本頁內容由 AI 自動翻譯,所有內容以英文版本為準。查看英文版 →
下一個 CLMM 版本新增三項流動性池級功能。這些功能在建立流動性池時可選加入,並與現有流動性池和頭寸向後相容。

整合者速覽

  • 限價單現在是一級 CLMM 原語。流動性提供者可以在支援限價單的流動性池上開設單一 tick 訂單;當交換穿過該 tick 時,訂單按 FIFO 順序成交,離線守護者(limit_order_admin)可以結算已成交的輸出,無需所有者在線。七個新 SDK 方法(openLimitOrderincreaseLimitOrderdecreaseLimitOrdersettleLimitOrdercloseLimitOrdercloseAllLimitOrdersettleAllLimitOrder)和三個新 Temp API 端點(位於 /limit-order/ 下)涵蓋完整流程。
  • **單邊費用(CollectFeeOn)**讓流動性池可以從輸入側收取交換費用(舊版,模式 0)、始終從 token_0 收取(模式 1)、或始終從 token_1 收取(模式 2)。當交易對的一側是規範會計代幣時很有用。
  • 動態費用讓流動性池可選加入波動率追蹤附加費,隨著快速 tick 移動而上升,並隨時間衰減,由每層 DynamicFeeConfig 和每個流動性池 DynamicFeeInfo 校準。新的 /main/clmm-dynamic-config 端點公開層級列表。
  • 新指令 CreateCustomizablePool 在流動性池建立時公開所有三個旋鈕。經典 CreatePool 繼續用於預設費用、無限價單流動性池。
  • 索引器破壞性變更PoolState 上的按方向成交量計數器(swap_in_amount_token_{0,1}swap_out_amount_token_{0,1})和終身費用計數器(total_fees_token_{0,1}total_fees_claimed_token_{0,1})已退役至填充區,為 fee_ondynamic_fee_info 騰出空間。直接讀取這些欄位的索引器必須遷移到鏈上 Observation 環或 API。

為什麼這很重要(對交易者、流動性提供者和整合者)

  • 交易者在長尾和事件驅動交易對上獲得更緊密的報價:動態費用讓流動性池從接收者吸收波動率附加費,無需流動性提供者主動擴大範圍,限價單階梯在特定價格加深鏈上流動性,無需承諾全範圍資本。
  • 流動性提供者獲得第三種策略,與集中範圍和全範圍頭寸並列:停泊精確價格訂單,在價格到訪時成交,結算為報價代幣。已成交部分無需主動重新平衡。
  • 整合者可以確定性地建模動態費用流動性池——演算法和參數完全在鏈上,校準層級可查詢,交換路徑形狀不變(僅每步費用變化)。

程式中的變更

新帳戶

  • DynamicFeeConfig——每層校準記錄(篩選週期、衰減週期、縮減因子、動態費用控制、最大波動率累加器)。由 CreateDynamicFeeConfig(管理員)建立,在啟用動態費用時由 CreateCustomizablePool 參考。
  • LimitOrderState——每個訂單帳戶(PDA 種子:[owner, limit_order_nonce, order_nonce])持有流動性池、tick、邊、輸入金額、未成交比率、FIFO 隊列階段和簿記快照。生命週期是隱式的(filled_amount vs total_amount,加上帳戶存在):Open → Filled → Settled → Closed
  • LimitOrderNonce——每個(所有者、nonce_index)單調遞增計數器,取得限價單 PDA 種子。nonce_index: u8 讓同一所有者將訂單分割為最多 256 個獨立 nonce 流。
帳戶 → DynamicFeeConfig 和 DynamicFeeInfo帳戶 → LimitOrderState

PoolState 重構

欄位組舊佈局新佈局
按方向成交量計數器swap_in_amount_token_0swap_out_amount_token_0swap_in_amount_token_1swap_out_amount_token_1折疊至 padding5: [u128; 4]
終身費用計數器total_fees_token_0total_fees_claimed_token_0total_fees_token_1total_fees_claimed_token_1折疊至 padding6: [u64; 4]
單邊費用fee_on: u8(0 = FromInput、1 = Token0Only、2 = Token1Only)
動態費用dynamic_fee_info: DynamicFeeInfo(嵌入)
總帳戶大小不變。索引器:將成交量追蹤從 PoolState 切換至 Observation 環或 API。已退役的計數器在現有流動性池上未清零(它們持有最後碰巧攜帶的任何內容),因此升級後重新讀取它們將返回過時資料。

TickState 新增(無破壞性變更)

四個新欄位添加在 TickState 末尾,替換其部分尾部填充:
  • order_phase: u64——計數器,消除此 tick 處限價單隊列的歧義。
  • orders_amount: u64——此 tick 處所有開放訂單承諾的總輸入(並非全部完全未成交)。
  • part_filled_orders_remaining: u64——目前被交換消費的隊列中仍未成交的輸入。
  • unfilled_ratio_x64: u128——Q64.64 比率,用於計算每個訂單的成交份額。
Tick 陣列佈局、大小和 PDA 種子不變。

新指令

  • CreateDynamicFeeConfig(管理員)——建立校準的 DynamicFeeConfig 層級。權限:與 CreateAmmConfig 相同的財務多簽。
  • UpdateDynamicFeeConfig(管理員)——更新現有層級的參數。
  • CreateCustomizablePool——流動性池建立進入點,公開 collect_fee_onenable_dynamic_feedynamic_fee_config。與 CreatePool 共存;我們建議任何需要新旋鈕的新流動性池使用 CreateCustomizablePool
  • OpenLimitOrder——開設單一 tick 限價單。碰撞 LimitOrderNonce,分配 LimitOrderState,將訂單插入 tick 處的 FIFO 隊列。
  • IncreaseLimitOrder / DecreaseLimitOrder——調整訂單的未成交部分。在完全成交的訂單上以 InvalidOrderPhase 還原。
  • SettleLimitOrder——掃除已成交輸出至所有者的 ATA。呼叫者可以是所有者或流動性池的 limit_order_admin 守護者。
  • CloseLimitOrder——關閉完全結算的訂單以回收租金。

SwapV2 行為變更

交換路徑本身形狀不變,但沿途現在發生三件事:
  1. 動態費用(啟用時):流動性池的 DynamicFeeInfo 在每步更新(衰減 → 累積 → 上限),產生的附加費添加在該步的基本費用之上。
  2. 限價單匹配(當步驟穿過具有開放訂單的初始化 tick 時):交換輸入的一部分被 FIFO 消費以填充該 tick 處的隊列,unfilled_ratio_x64 原子更新。
  3. 單邊費用路由(當 fee_on != 0 時):費用從 token_0token_1 取得,無論交換方向如何,而不是始終從輸入側取得。
當流動性池以舊版預設值建立時,這些都是無操作。見指令 → SwapV2以了解更新的狀態變更矩陣。

新錯誤代碼

此版本中 ErrorCode 列舉被重新編號:五個舊版變體(LOKZeroMintAmountInvalidLiquidityTransactionTooOldInvalidRewardDesiredAmount)被移除,十一個新變體被附加。因為 Anchor 從 6000 開始按列舉順序編號錯誤,移除位置處或之後的每個錯誤代碼都已移位——硬編碼數字代碼的用戶端需要重新對應。 新代碼為:
  • 6040 OrderAlreadyFilled
  • 6041 InvalidOrderPhase
  • 6042 InvalidLimitOrderAmount
  • 6043 OrderPhaseSaturated
  • 6044 InvalidDynamicFeeConfigParams
  • 6045 InvalidFeeOn
  • 6046 ZeroSqrtPrice
  • 6047 ZeroLiquidity
  • 6048 MissingBaseFlag
  • 6049 MissingMintAccount
  • 6050 MissingTokenProgram2022
完整字串和所有 CLMM 錯誤的移位後表格在錯誤代碼中。

SDK 中的變更(@raydium-io/raydium-sdk-v2

  • raydium.clmm 上的新方法createCustomizablePoolopenLimitOrderincreaseLimitOrderdecreaseLimitOrdersettleLimitOrdersettleAllLimitOrdercloseLimitOrdercloseAllLimitOrder
  • raydium.api 上的新 REST 輔助程式getClmmDynamicConfigsgetClmmLimitOrderConfigs
  • 新型別CollectFeeOn 列舉、DynamicFeeConfigDynamicFeeInfoLimitOrderStateLimitOrderConfig
  • 內部重組utils/ 移至 libraries/。套件桶不變;僅 @raydium-io/raydium-sdk-v2/utils/... 下的深層匯入需更新至 …/libraries/...
端到端 TypeScript 逐步解說位於products/clmm/code-demos

API 中的變更

  • api-v3——/main/ 下的兩個新端點:
    • GET /main/clmm-dynamic-config——DynamicFeeConfig 層級列表。
    • GET /main/clmm-limit-order-config——每個流動性池的限價單設定。
  • temp-api-v1——/limit-order/ 下的三個新端點:
    • GET /limit-order/order/list?wallet=…——錢包目前停泊的訂單(開放和部分成交,從索引器的 Redis 快取提供;相同負載透過 totalAmount / filledAmount / pendingSettle 涵蓋兩個階段)。
    • GET /limit-order/history/order/list-by-user?wallet=…——錢包的歷史限價單。可選篩選:poolIdmint1mint2hideCancel。透過 nextPageId / size(最多 100)游標分頁。
    • GET /limit-order/history/event/list-by-pda?pda=…——每個 PDA 事件日誌(open / increase / decrease / settle / close),用於一個或多個逗號分隔的限價單 PDA。透過 nextPageId / size(最多 100)游標分頁。
所有五個都在 API 參考標籤中記錄。

權限表面

limit_order_admin 是離線操作守護者,不是多簽。它只能在現有訂單上呼叫 SettleLimitOrderCloseLimitOrder,結算的輸出始終進入所有者的 ATA。它無法變更流動性池欄位、開設或修改訂單,或為任何其他事項簽名。見管理員金鑰和多簽 → CLMM

更新的頁面

  • products/clmm/overview——新「最新消息」部分和更新的後續步驟指標。
  • products/clmm/accounts——三個新帳戶、PoolState 重構與遷移警告、TickState 新增、新 PDA 輔助程式。
  • products/clmm/instructions——七個新指令、SwapV2 行為附錄、更新的狀態變更矩陣。
  • products/clmm/fees——單邊費用部分、動態費用部分與參數表。
  • products/clmm/math——限價單匹配虛擬代碼、動態費用推導。
  • products/clmm/code-demos——createCustomizablePool 演示、完整限價單逐步解說、新陷阱。
  • algorithms/clmm-math——多 tick 交換迴圈中限價單匹配和動態費用的交叉參考。
  • sdk-api/typescript-sdk——CLMM 模組新增部分、utils/libraries/ 遷移注記。
  • api-reference/openapi/api-v3.yaml——兩個新端點與回應架構。
  • api-reference/openapi/temp-api-v1.yaml——三個新限價單端點(/limit-order/order/list/limit-order/history/order/list-by-user/limit-order/history/event/list-by-pda)與其請求和回應架構。
  • api-reference/api-v3/overview——新 CLMM 設定端點的注記。
  • api-reference/temp-api-v1/overview——新活躍訂單、按使用者歷史和按 PDA 事件端點的注記。
  • reference/error-codes——十一個新 CLMM 錯誤代碼(6040–6050)加上五個移除的舊版代碼;移除點之後的數字代碼已移位。
  • security/admin-and-multisig——新 DynamicFeeConfig 管理員列和 limit_order_admin 守護者列,含有界權限說明。
驗證對象
  • raydium-clmm 原始碼。
  • @raydium-io/raydium-sdk-v2 原始碼。
  • api-v3temp-api-v1 原始碼。