Skip to main content
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 →
Bản phát hành này ghi lại hai thay đổi chương trình CLMM. Cả hai đều là bổ sung và tương thích ngược: các pool, position và open order hiện tại không bị ảnh hưởng, và các đường dẫn 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ột seed_index: u16 khá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ột Permission PDA được cấp bởi admin. Hai instruction admin, CreatePermissionPdaClosePermissionPda, quản lý các cấp phép đó.
  • OpenLimitOrder giờ đâ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ới NotApproved nế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ới payer trả 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

  • CreatePermissionPda khởi tạo một Permission PDA cho một permission_authority nhấ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.
Cả hai đều chấp nhận hoặc pubkey 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[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_vaultoutput_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 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_index khi 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 OpenLimitOrder của bạn, và hiển thị một thông báo rõ ràng khi NotApproved được trả về cho một account bị frozen.
  • Không có account-size hoặc layout break: PoolState có 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ần CreatePermissionedPool mới, CreatePermissionPda / ClosePermissionPda trong bảng instruction và ghi chú admin-gating, và danh sách account / preconditions / errors OpenLimitOrder được cập nhật.
  • products/clmm/accountsPermission trong danh mục và phần riêng của nó, trường PoolState.seed_index, trợ giúp PDA-derivation (derivePermissionedPool, derivePermission), và tham chiếu nhanh vòng đời.
  • security/admin-and-multisig — hàng permission_pda_admin mớ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.
Xác minh dựa trên:
  • 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).