Skip to main content
本頁內容由 AI 自動翻譯,所有內容以英文版本為準。查看英文版 →
本條目涵蓋即將推出的 CLMM 程式更新。在部署前已根據 raydium-clmm 的 chore/upgrade-anchor 分支(head a72f9e1)進行驗證。在依賴新指令或改變的 CreateAmmConfig 行為前,請確認已部署的程式。
CLMM 現在獲得與 CPMM 和 LaunchLab 在 2026-09-09 推出的相同框架升級。Anchor 從 0.32.1 升級至 =1.0.2,建置工具鏈從 Agave 2.3.0 升級至 3.1.10。隨之而來的是兩項管理員端變更:新增 CollectExcessLamports 指令,以及 CreateAmmConfig 中的固定費用所有者。 交易者、流動性提供者、限價單使用者或資金池建立者呼叫的每項指令都保持其帳戶列表、參數與數學運算不變。

整合者速覽

  • 未改變任何使用者面向的指令。 CreatePool、CreateCustomizablePool、CreatePermissionedPool、所有 OpenPosition* / IncreaseLiquidity* / DecreaseLiquidity* 路徑、ClosePosition、Swap / SwapV2 / SwapRouterBaseIn、五項限價單指令與獎勵指令在網路上的位元組完全相同。未改變任何帳戶佈局。
  • 新增一項指令:CollectExcessLamports。 此指令僅限管理員使用,不接受任何參數。每次呼叫掃描一個資金池:資金池自身的 PoolState 始終被掃描,資金池 PDA 為其金庫簽署(你在 remaining_accounts 中傳入)。remaining_accounts 中任何其他 CLMM 擁有的帳戶也會被掃描。詳見 products/clmm/instructions。
  • 新增一項錯誤代碼:6052 LamportsCalculateError。 代碼 6000–6051 保持不變。
  • CreateAmmConfig 不再將簽署者複製到 owner / fund_owner。 新配置獲得硬編碼的 protocol_fee_owner 與 fund_fee_owner 金鑰。在主網上,這些是已儲存在所有 21 個現有配置上的相同兩個金鑰。現有的 AmmConfig 帳戶保持不變,因此請繼續從帳戶讀取這些欄位。
  • 重新整理你的 IDL。 它新增一項指令與一項錯誤變體,共 39 項指令與 53 項錯誤。
  • 你現在可以在一個 crate 中放置 CPMM 與 CLMM。 兩個儲存庫在其 chore/upgrade-anchor 分支上都固定 anchor-lang / anchor-spl =1.0.2,因此單一程式可以 CPI 到兩者。詳見 sdk-api/rust-cpi。
  • TypeScript 客戶端套件已重新命名。 測試套件從 @coral-xyz/anchor 0.32.1 移至 @anchor-lang/core 1.0.2。

CollectExcessLamports

SIMD-0437 的第 1 步在 2026 年 9 月 3 日於主網啟動。在步驟前建立的每個 CLMM 帳戶現在都過度資金化,只有 CLMM 程式可以將 lamports 移出其擁有的帳戶。這涵蓋資金池金庫、獎勵金庫、PoolState、AmmConfig、ObservationState、TickArrayBitmapExtension 等。 該指令接受四個固定帳戶,然後在 remaining_accounts 中接受任意數量的來源帳戶: 資金池是簽署授權,而非程式範圍的 PDA。 CPMM 使用一個全域 vault_and_lp_mint_auth_seed 授權簽署。CLMM 代幣金庫由其 PoolState 擁有,因此單次呼叫只能為第 2 個位置中傳入的資金池簽署。每個代幣程式來源必須以該資金池作為其授權:token_vault_0、token_vault_1 或資金池的獎勵金庫之一。來自另一個資金池或使用者代幣帳戶的代幣帳戶會失敗代幣程式的所有者檢查並回滾整個指令。程式不會跳過它。位置 NFT 鑄造也不可掃描,因為當位置開啟時其鑄造授權被撤銷。逐個資金池掃描。 該指令進行兩次傳遞,順序是固定的:
  1. 代幣程式 CPI 優先。 對於由 SPL Token 或 Token-2022 擁有的每個來源,非原生帳戶獲得 WithdrawExcessLamports(判別式 38)。原生 wSOL 金庫獲得 SyncNative → UnwrapLamports(判別式 45)往返,以檢查包裝餘額等於其同步前值結束。如果不相等,呼叫失敗並返回 LamportsCalculateError。SOL 端金庫保持其完整流動性,掃描過程中沒有交換報價改變。
  2. 直接扣款其次。 第 2 次傳遞先扣款 pool_state,然後扣款每個由 CLMM 程式擁有的來源,直至 rent.minimum_balance(data_len)。
由任何其他程式擁有的來源會被無聲跳過。這個兩次傳遞順序是 CPMM 在 2026-09-19 採用的。CLMM 從其首次發布就有此順序。如果 PDA 在 CPI 前被扣款,執行時會以 UnbalancedInstruction 中止,因此呼叫者可以按任意順序傳入來源。
程式擁有的傳遞不檢查帳戶屬於哪個資金池或使用者。 任何由 CLMM 程式擁有的帳戶都符合條件,包括某些使用者支付租金的帳戶:PersonalPositionState、LimitOrderState 與 TickArrayState。只有超過租金豁免最低額的超額部分會移動。帳戶保持其資料並保持租金豁免。當位置或訂單稍後關閉時,程式退款帳戶此時持有的任何餘額。掃描後,該餘額是當前租金最低額。
錢包地址列在 reference/program-addresses。

CreateAmmConfig 寫入固定費用所有者

在此版本前,create_amm_config 從呼叫簽署者設定兩個費用所有者欄位:
現在它寫入程式自身的常數:
CreateAmmConfig 仍然限制於 crate::admin::ID。在此版本前,每個新費用層級都以管理員開始於兩個欄位中,並必須使用 UpdateAmmConfig 參數 3 / 4 進行輪換。現在它以操作錢包開始。在主網上,常數是已儲存為 owner / fund_owner 在所有 21 個現有配置上的相同金鑰。程式現在寫入操作過去手動設定的值。 收集簽署者不變。CollectProtocolFee 接受 amm_config.owner 或 crate::admin::ID,CollectFundFee 接受 amm_config.fund_owner 或 crate::admin::ID,在此版本前後都是如此。 在 devnet 上,兩個常數解析為相同金鑰。詳見 reference/program-addresses。
這不是遷移。 每個現有 AmmConfig 保持其已有的 owner 與 fund_owner。讀取欄位而非硬編碼常數或管理員金鑰。

工具鏈與依賴項變更

Anchor 1.0 在 CPI 呼叫位置的變更與 CPMM 整合者已處理的相同。CpiContext::new 接受程式的 Pubkey 而非其 AccountInfo,Context 有一個生命週期參數而非四個。在客戶端 crate 中,RequestBuilder::instructions() 現在返回 Vec<Instruction> 而無 Result,system_program 移至 solana-system-interface。詳見 sdk-api/rust-cpi。 無鏈上效果的建置系統細節:
  • Localnet 管理員。 localnet 功能不再編譯由已提交夾具支持的固定測試金鑰。相反,它在建置時從 CLMM_LOCALNET_ADMIN 環境變數讀取管理員,yarn test:local-admin 從你的本地錢包設定此變數。夾具的 .gitignore 例外已移除。
  • 發布設定檔。 programs/amm/Cargo.toml 中的重複 [profile.release] 區塊已刪除。Cargo 忽略工作區根外的 [profile],因此根區塊已是生效的,程式級 panic = "abort" 從未被應用。
  • Anchor.toml。 seeds = false 變為 resolution = true 加 skip-lint = false,陳舊的 [registry] URL 已移除。
  • Lints。 programs/amm/Cargo.toml 為 Anchor 與 Solana 巨集發出的功能 cfg 新增 [lints.rust] unexpected_cfgs 允許清單。
  • README。 在此分支上 README 仍告訴你從 coral-xyz/anchor 執行 rustup default 1.86.0 與 avm install 0.32.1。改為遵循 Anchor.toml 與 solana-fundamentals/toolchain。

未改變的內容

  • 每個帳戶佈局。 PoolState、AmmConfig、TickArrayState、TickArrayBitmapExtension、PersonalPositionState、ObservationState、LimitOrderState、DynamicFeeConfig、Permission 與 SupportMintAssociated 保持相同的大小與偏移。
  • 錯誤代碼 6000–6051。
  • 交換、流動性、費用、動態費用與限價單數學。 CollectExcessLamports 移動從未是任何資金池儲備一部分的 lamports。
  • 位置 NFT 凍結來自 2026-08-17,包括資金池作為凍結授權規則與 ClosePosition 解凍路徑。
  • spl_memo。 DecreaseLiquidityV2 的備忘錄程式約束從 spl_memo::id() 移至 anchor_spl::memo::ID。兩者命名相同地址;anchor-spl 只是重新命名了匯出。
  • 程式 ID。

更新的頁面

  • products/clmm/instructions:升級橫幅;CollectExcessLamports 部分含其帳戶列表、兩次傳遞分派表與每個資金池範圍;清單、管理員閘控與狀態變更矩陣列;CollectProtocolFee / CollectFundFee 上的費用所有者註記。
  • products/clmm/accounts:AmmConfig 所有者註釋與 CreateAmmConfig 寫入內容的註記。
  • products/clmm/code-demos:版本橫幅與 Rust CPI 骨架移至 Anchor 1.0。
  • products/cpmm/code-demos:移除「無法與 CLMM 共享 crate」註記。
  • reference/error-codes:6052 已記錄。
  • reference/program-addresses:新增「CLMM 費用所有者錢包」部分;CLMM 新增至「超額 lamports 收集錢包」。
  • sdk-api/rust-cpi、sdk-api/anchor-idl、solana-fundamentals/toolchain:raydium-clmm 的 Anchor 1.0 固定,crate 分割警告已停用。
  • solana-fundamentals/rent-and-reclaimable-rent:CLMM 新增至「Raydium 程式在其自身端掃描的內容」。
  • security/admin-and-multisig:CLMM 超額 lamports 收集者角色。
  • protocol-overview/versions-and-migration:CLMM 升級歷史項目符號。