Trang này được dịch tự động bằng AI. Phiên bản tiếng Anh là bản chính thức.Xem bản tiếng Anh →
CreatePool / CreateCustomizablePool cổ điển vẫn không thay đổi.
TL;DR cho các nhà tích hợp
- Pool ID giờ đây có thể không phải là canonical, đằng sau một cổng quyền hạn. Trước đây chỉ có đúng một địa chỉ CLMM pool cho mỗi
(amm_config, token_mint_0, token_mint_1)— các seed PDA đã ghim nó. Một instruction mới,CreatePermissionedPool, gộp mộtseed_index: u16khác không do client cung cấp vào các seed pool PDA, vì vậy một operator được phép có thể thiết lập nhiều pool cho cùng một cặp và fee tier, mỗi cái ở địa chỉ riêng của nó. Vì các địa chỉ pool tùy ý là một khả năng có quyền hạn, người trả phí phải giữ mộtPermissionPDA được cấp bởi admin. Hai instruction admin,CreatePermissionPdavàClosePermissionPda, quản lý các cấp phép đó. OpenLimitOrdergiờ đây xác thực phía output. Instruction nhận ba account bổ sung —output_token_account,output_vault,output_vault_mint— và từ chối order vớiNotApprovednếu token account input hoặc output của chủ sở hữu bị frozen. Điều này đảm bảo rằng fill cuối cùng có thể được giao, điều này quan trọng đối với các mint Token-2022 có allow-list / default-frozen (token được phép). Các client được xây dựng dựa trên danh sách account một phía cũ phải thêm ba account output.
Những gì đã thay đổi trong chương trình
Instruction mới: CreatePermissionedPool
Cùng hình dạng và tham số với CreateCustomizablePool (nó nhận cùng CreateCustomizableParams, vì vậy single-sided fee và dynamic-fee opt-in đều có sẵn), cộng với:
- Một tham số
seed_index: u16, phải khác không. Nó được nối thêm (little-endian) vào các seed pool PDA:["pool", amm_config, token_mint_0, token_mint_1, seed_index.to_le_bytes()]. - Một account
permission: PDA["permission", payer]. Anchor từ chối lệnh gọi nếu nó không tồn tại hoặc không được sở hữu bởi chương trình — sự tồn tại của nó chính là sự ủy quyền. - Một account
pool_creatorđược ghi lại làpool_state.owner, có thể khác vớipayertrả phí.
seed_index = 0 vẫn được dành riêng cho các pool cũ: đối với những cái đó, thành phần seed sụp đổ thành rỗng, tái tạo địa chỉ bốn seed cổ điển, vì vậy không có địa chỉ pool hiện tại nào thay đổi.
Xem Instructions → CreatePermissionedPool.
Account mới: Permission
Một account khả năng mà sự tồn tại của nó chính là cấp phép. Nó chỉ lưu trữ authority mà nó được tạo cho (cộng với padding). Seed PDA: ["permission", authority]. Nó cấp quyền gọi CreatePermissionedPool và không gì khác — nó không thể di chuyển quỹ, thay đổi phí hoặc thay đổi bất kỳ pool nào. Xem Accounts → Permission.
Instruction admin mới: CreatePermissionPda / ClosePermissionPda
CreatePermissionPdakhởi tạo mộtPermissionPDA cho mộtpermission_authoritynhất định.ClosePermissionPdađóng nó và hoàn lại tiền thuê cho người gọi, thu hồi cấp phép. Các pool đã được tạo theo cấp phép đó không bị ảnh hưởng.
admin của chương trình hoặc một khóa permission_pda_admin chuyên dụng (một hằng số khác biệt trên mainnet so với devnet). Xem Admin keys and multisig → CLMM.
PoolState: trường seed_index
Hai byte được tạo ra từ một vùng padding hiện tại (padding: [u8; 6] → seed_index: [u8; 2] + padding: [u8; 4]) ngay sau fee_on. Tổng kích thước account không thay đổi, và không cần migration indexer. Đối với các pool được tạo thông qua CreatePool / CreateCustomizablePool, seed_index là [0, 0]; đối với các pool được phép, nó mang chỉ số được chọn của người tạo và được yêu cầu để re-derive địa chỉ pool ngoài chuỗi.
OpenLimitOrder: output-side account và frozen-account guard
Danh sách account OpenLimitOrder nhận output_token_account, output_vault và output_vault_mint. Chúng chỉ được sử dụng để xác thực — không có output nào bị debit khi mở. Handler giờ đây yêu cầu rằng cả input và output token account đều không bị frozen, nếu không sẽ trả về NotApproved (cùng mã đã được trả về khi pool có swap hoặc limit-order bị vô hiệu hóa). Điều này đóng một khoảng trống nơi một order có thể được mở chống lại một token account mà không bao giờ có thể nhận được fill (ví dụ: một account chưa được thaw cho một mint Token-2022 default-frozen).
Xem Instructions → OpenLimitOrder.
Mã lỗi
Không có mã lỗi mới. Mã6000 NotApproved hiện tại giờ đây bổ sung bao gồm các trường hợp frozen input/output token account và các trường hợp swap/limit-order-disabled trên OpenLimitOrder, và trường hợp “signer không phải là admin cũng không phải là permission_pda_admin” trên các instruction quyền hạn. Bảng mã lỗi và đánh số khác không thay đổi từ bản phát hành 2026-05-18. Xem Error codes → CLMM.
Ghi chú migration
- Đọc địa chỉ pool: không giả định một pool cho mỗi
(config, mint0, mint1). Một cặp giờ đây có thể có một pool canonical cộng với một hoặc nhiều pool được phép ở các địa chỉ được derive từseed_index. Liệt kê các pool từ API / indexer thay vì derive một PDA duy nhất, và lưu trữseed_indexkhi bạn cần re-derive một pool được phép. - Đặt limit order: thêm ba account phía output vào giao dịch
OpenLimitOrdercủa bạn, và hiển thị một thông báo rõ ràng khiNotApprovedđược trả về cho một account bị frozen. - Không có account-size hoặc layout break:
PoolStatecó cùng kích thước; các byte padding đã loại bỏ giờ đây giữseed_index.
Trang được cập nhật
products/clmm/overview— ghi chú “What’s new” về permissioned multi-pools và limit-order guard.products/clmm/instructions— phầnCreatePermissionedPoolmới,CreatePermissionPda/ClosePermissionPdatrong bảng instruction và ghi chú admin-gating, và danh sách account / preconditions / errorsOpenLimitOrderđược cập nhật.products/clmm/accounts—Permissiontrong danh mục và phần riêng của nó, trườngPoolState.seed_index, trợ giúp PDA-derivation (derivePermissionedPool,derivePermission), và tham chiếu nhanh vòng đời.security/admin-and-multisig— hàngpermission_pda_adminmới và giải thích phạm vi quyền hạn trong bảng vai trò CLMM.reference/error-codes— mô tảNotApprovedđược mở rộng.
- Mã nguồn
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).

