本頁內容由 AI 自動翻譯,所有內容以英文版本為準。查看英文版 →
文件變更日誌條目。如需所有更新的索引,請參閱
reference/changelog。如需協議本身的歷史時間軸,請參閱 introduction/history-and-milestones。CreatePool / CreateCustomizablePool 路徑保持不變。
整合者速覽
- 池 ID 現在可以是非規範的,受許可閘道保護。 過去每個
(amm_config, token_mint_0, token_mint_1)只有一個 CLMM 池位址——PDA 種子將其固定。新指令CreatePermissionedPool將客戶端提供的非零seed_index: u16折疊到池 PDA 種子中,讓白名單運營者可以為同一交易對和費用層級建立多個池,每個池位於自己的位址。由於任意池位址是特權功能,付款人必須持有由管理員授予的PermissionPDA。兩項管理員指令CreatePermissionPda和ClosePermissionPda管理這些授權。 OpenLimitOrder現在驗證輸出端。 該指令接受三個額外帳戶——output_token_account、output_vault、output_vault_mint——如果擁有者的輸入或輸出代幣帳戶被凍結,則以NotApproved拒絕訂單。這保證最終成交可以交付,這對允許清單 / 預設凍結的 Token-2022 鑄幣(許可代幣)很重要。針對舊單邊帳戶清單構建的客戶端必須新增三個輸出帳戶。
程式中的變更
新指令:CreatePermissionedPool
形狀和參數與 CreateCustomizablePool 相同(它接受相同的 CreateCustomizableParams,因此單邊費用和動態費用選擇可用),加上:
- 一個
seed_index: u16參數,必須非零。它被附加(小端序)到池 PDA 種子:["pool", amm_config, token_mint_0, token_mint_1, seed_index.to_le_bytes()]。 - 一個
permission帳戶:PDA["permission", payer]。如果它不存在或不由程式擁有,Anchor 會拒絕呼叫——它的存在本身就是授權。 - 一個
pool_creator帳戶,記錄為pool_state.owner,可能與付費的payer不同。
seed_index = 0 仍保留給舊版池:對於這些池,種子元件會摺疊為空,重現經典的四種子位址,因此沒有現有池位址會改變。
請參閱 Instructions → CreatePermissionedPool。
新帳戶:Permission
一個能力帳戶,其存在就是授權。它只儲存建立它的 authority(加上填充)。PDA 種子:["permission", authority]。它只賦予呼叫 CreatePermissionedPool 的權利——它不能移動資金、更改費用或改變任何池。請參閱 Accounts → Permission。
新管理員指令:CreatePermissionPda / ClosePermissionPda
CreatePermissionPda為給定的permission_authority初始化一個PermissionPDA。ClosePermissionPda關閉它並將租金退款給呼叫者,撤銷授權。已在該授權下建立的池不受影響。
admin 公鑰或專用的 permission_pda_admin 金鑰(主網和開發網上的不同常數)。請參閱 Admin keys and multisig → CLMM。
PoolState:seed_index 欄位
兩個位元組從現有填充區域(padding: [u8; 6] → seed_index: [u8; 2] + padding: [u8; 4])直接在 fee_on 之後被分割出來。總帳戶大小不變,不需要索引器遷移。 對於透過 CreatePool / CreateCustomizablePool 建立的池,seed_index 是 [0, 0];對於許可制池,它攜帶建立者選擇的索引,並且需要在離線重新推導池位址。
OpenLimitOrder:輸出端帳戶和凍結帳戶防護
OpenLimitOrder 帳戶清單新增 output_token_account、output_vault 和 output_vault_mint。它們僅用於驗證——開放時不會從輸出端扣除。處理程式現在要求輸入和輸出代幣帳戶都未被凍結,否則返回 NotApproved(相同的代碼已在池禁用交換或限價單時返回)。這關閉了一個漏洞,即訂單可能針對永遠無法接收成交的代幣帳戶開放(例如預設凍結的 Token-2022 鑄幣的尚未解凍帳戶)。
請參閱 Instructions → OpenLimitOrder。
錯誤代碼
沒有新的錯誤代碼。現有的6000 NotApproved 現在另外涵蓋凍結的輸入/輸出代幣帳戶和 OpenLimitOrder 上的交換/限價單禁用情況,以及許可指令上的「簽署者既不是 admin 也不是 permission_pda_admin」情況。錯誤代碼表和編號在其他方面與 2026-05-18 版本 保持不變。請參閱 Error codes → CLMM。
遷移說明
- 讀取池位址:不要假設每個
(config, mint0, mint1)只有一個池。一個交易對現在可能有一個規範池加上一個或多個位於seed_index推導位址的許可制池。從 API / 索引器列舉池而不是推導單個 PDA,並在需要重新推導許可制池時儲存seed_index。 - 下達限價單:將三個輸出端帳戶新增到你的
OpenLimitOrder交易,並在為凍結帳戶返回NotApproved時顯示清晰的訊息。 - 無帳戶大小或佈局破壞:
PoolState大小相同;已停用的填充位元組現在保存seed_index。
更新的頁面
products/clmm/overview— 關於許可制多池和限價單防護的「新增功能」說明。products/clmm/instructions— 新的CreatePermissionedPool部分,指令表中的CreatePermissionPda/ClosePermissionPda和管理員閘道說明,以及更新的OpenLimitOrder帳戶清單 / 前置條件 / 錯誤。products/clmm/accounts— 清單中的Permission及其自己的部分,PoolState.seed_index欄位,PDA 推導幫助程式(derivePermissionedPool、derivePermission),以及生命週期快速參考。security/admin-and-multisig— CLMM 角色表中新的permission_pda_admin列和許可範圍說明。reference/error-codes— 擴展的NotApproved描述。
raydium-clmm原始碼(create_permissioned_pool.rs、admin/create_permission_pda.rs、admin/close_permission_pda.rs、states/permission.rs、states/pool.rs、limit_order/open_limit_order.rs、lib.rs)。

