Skip to main content
本頁內容由 AI 自動翻譯,所有內容以英文版本為準。查看英文版 →
文件變更日誌條目。如需所有更新的索引,請參閱 reference/changelog。如需協議本身的歷史時間軸,請參閱 introduction/history-and-milestones
本版本記錄了兩項 CLMM 程式變更。兩者都是附加性的且向後相容:現有的池、頭寸和開放訂單不受影響,經典的 CreatePool / CreateCustomizablePool 路徑保持不變。

整合者速覽

  • 池 ID 現在可以是非規範的,受許可閘道保護。 過去每個 (amm_config, token_mint_0, token_mint_1) 只有一個 CLMM 池位址——PDA 種子將其固定。新指令 CreatePermissionedPool 將客戶端提供的非零 seed_index: u16 折疊到池 PDA 種子中,讓白名單運營者可以為同一交易對和費用層級建立多個池,每個池位於自己的位址。由於任意池位址是特權功能,付款人必須持有由管理員授予的 Permission PDA。兩項管理員指令 CreatePermissionPdaClosePermissionPda 管理這些授權。
  • OpenLimitOrder 現在驗證輸出端。 該指令接受三個額外帳戶——output_token_accountoutput_vaultoutput_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 初始化一個 Permission PDA。
  • ClosePermissionPda 關閉它並將租金退款給呼叫者,撤銷授權。已在該授權下建立的池不受影響。
兩者都接受程式 admin 公鑰專用的 permission_pda_admin 金鑰(主網和開發網上的不同常數)。請參閱 Admin keys and multisig → CLMM

PoolStateseed_index 欄位

兩個位元組從現有填充區域(padding: [u8; 6]seed_index: [u8; 2] + padding: [u8; 4])直接在 fee_on 之後被分割出來。總帳戶大小不變,不需要索引器遷移。 對於透過 CreatePool / CreateCustomizablePool 建立的池,seed_index[0, 0];對於許可制池,它攜帶建立者選擇的索引,並且需要在離線重新推導池位址。

OpenLimitOrder:輸出端帳戶和凍結帳戶防護

OpenLimitOrder 帳戶清單新增 output_token_accountoutput_vaultoutput_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 推導幫助程式(derivePermissionedPoolderivePermission),以及生命週期快速參考。
  • security/admin-and-multisig — CLMM 角色表中新的 permission_pda_admin 列和許可範圍說明。
  • reference/error-codes — 擴展的 NotApproved 描述。
驗證對象
  • raydium-clmm 原始碼(create_permissioned_pool.rsadmin/create_permission_pda.rsadmin/close_permission_pda.rsstates/permission.rsstates/pool.rslimit_order/open_limit_order.rslib.rs)。