本頁內容由 AI 自動翻譯,所有內容以英文版本為準。查看英文版 →
本條目涵蓋即將推出的 CLMM 程式更新。在部署前已根據
raydium-clmm 的 chore/upgrade-anchor 分支(head a72f9e1)進行驗證。在依賴新指令或改變的 CreateAmmConfig 行為前,請確認已部署的程式。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。 - 新增一項錯誤代碼:
6052LamportsCalculateError。 代碼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/anchor0.32.1移至@anchor-lang/core1.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 鑄造也不可掃描,因為當位置開啟時其鑄造授權被撤銷。逐個資金池掃描。
該指令進行兩次傳遞,順序是固定的:
- 代幣程式 CPI 優先。 對於由 SPL Token 或 Token-2022 擁有的每個來源,非原生帳戶獲得
WithdrawExcessLamports(判別式38)。原生 wSOL 金庫獲得SyncNative→UnwrapLamports(判別式45)往返,以檢查包裝餘額等於其同步前值結束。如果不相等,呼叫失敗並返回LamportsCalculateError。SOL 端金庫保持其完整流動性,掃描過程中沒有交換報價改變。 - 直接扣款其次。 第 2 次傳遞先扣款
pool_state,然後扣款每個由 CLMM 程式擁有的來源,直至rent.minimum_balance(data_len)。
UnbalancedInstruction 中止,因此呼叫者可以按任意順序傳入來源。
錢包地址列在 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。
工具鏈與依賴項變更
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 升級歷史項目符號。

