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 →
Raydium không chấp nhận các mint Token-2022 tùy ý. Cả CPMM và CLMM đều chạy ở chế độ danh sách cho phép nghiêm ngặt: chỉ một tập hợp nhỏ các tiện ích mở rộng được phép theo mặc định; mọi thứ khác bị từ chối khi tạo pool. Mỗi chương trình cho phép một mint riêng lẻ thông qua một cơ chế — một PDA đăng ký theo mint do admin quản lý. Cả hai chương trình cũng từng có các bypass được mã hóa cứng tại nhiều điểm; tất cả những cái đó đã bị xóa. Trang này là tài liệu tham khảo duy nhất cho những gì được thực thi và ở đâu, kèm theo trích dẫn từ mã nguồn chương trình.

Hỗ trợ cấp chương trình

Các kiểm tra danh sách cho phép nằm trong: Không có kiểm tra mint lúc swap trên CPMM hoặc CLMM — cổng chỉ kích hoạt khi tạo pool. Khi một pool tồn tại, các swap chỉ tin tưởng rằng các mint không thay đổi, điều này là chính xác đối với các phần bất biến của trạng thái mint Token-2022.

Đóng băng NFT vị trí CLMM cho các nhà phát hành bị hạn chế

Các tài khoản NFT vị trí vẫn không bị đóng băng theo mặc định. CLMM chỉ đóng băng một cái khi vị trí sử dụng đường dẫn mở V2 và freeze_authority hiện tại của ít nhất một mint vault xuất hiện trong danh sách frozen_position_nft_authorities::IDS được mã hóa cứng. Danh sách đó là những gì thay thế phát hiện token Superstate trước đó của CLMM, và nó mang cùng quyền hạn nhà phát hành mà heuristic cũ khớp. Đặt pool PDA làm freeze authority của mint NFT vị trí không phải là một lần đóng băng. Đây là một quy tắc quản lý vị trí, không phải danh sách cho phép tạo pool:
  • Pool có thể đã tồn tại và vẫn có thể hoán đổi.
  • Mint NFT vị trí sử dụng pool PDA CLMM làm freeze authority của chính nó; nhà phát hành cơ bản không kiểm soát NFT vị trí.
  • OpenPositionV2 bao gồm NFT vị trí SPL cổ điển trên tài sản pool Token-2022. OpenPositionWithToken22Nft bao gồm NFT vị trí Token-2022.
  • OpenPosition V1 không kiểm tra mint vault và không thể phục vụ tài sản Token-2022 bị hạn chế được nhắm mục tiêu bởi danh sách được gửi.
  • Các vị trí hiện có không thay đổi.
Các vị trí bị đóng băng vẫn có thể được quản lý bởi chủ sở hữu của chúng nhưng không thể được chuyển. ClosePosition làm tan băng và đốt nguyên tử khi client chuyển pool làm tài khoản còn lại đầu tiên. Xem products/clmm/ticks-and-positions.

Mint quote LaunchLab

Hai mint của LaunchLab được kiểm soát rất khác nhau, và sự bất đối xứng rất dễ bỏ lỡ.
  • Mint base — LaunchLab tạo nó. Mint base Token-2022 chỉ có thể truy cập được thông qua initialize_with_token_2022, và chương trình sẽ chỉ đính kèm MetadataPointer và (tùy chọn) TransferFeeConfig. Bất cứ thứ gì khác sẽ trả về NoSupportExtension. Một mint Token-2022 đã tồn tại không thể được cung cấp làm base. Khi TransferFeeConfig được đính kèm, transfer_fee_config_authority của mint là launch authority PDA cho đến khi tốt nghiệp, trong khi withdraw_withheld_authority của nó là transfer_fee_extension_auth được cấu hình của nền tảng từ khi tạo mint trở đi — chương trình launchpad tự nó không có lệnh withdraw-withheld. Xem products/launchlab/platform-config.
  • Mint quote — LaunchLab không tạo nó và không sàng lọc nó. CreateConfig chấp nhận tài khoản mint như được cung cấp, vì vậy không có tương đương is_supported_mint ở phía quote. Cổng duy nhất là những mint nào mà admin chọn liên kết với GlobalConfig.
Điều đó làm cho việc liên kết mint quote Token-2022 là một hành động đáng tin cậy cao, vì cùng một lý do đăng ký mint dưới đây: mint quote TransferHook sẽ chạy hook của nó trên mỗi lần mua, bán và yêu cầu phí trong mỗi pool được trích dẫn trong nó, và mint quote PermanentDelegate sẽ cho phép delegate quét các vault quote của những pool đó. Cả hai đều không bị chương trình chặn. Những gì LaunchLab xử lý chính xác khi mint quote được liên kết:
  • Vault quote, cả hai vault phí và tài khoản token của người nhận phí chia sẻ được tạo trên chương trình của mint quote.
  • TransferFeeConfig ở phía quote được định giá vào cả bốn lệnh giao dịch, và giới hạn slippage được kiểm tra so với số tiền ròng của người trả tiền chứ không phải chuyển động brutto của vault. Xem products/launchlab/instructions.
  • PoolState.token_program_flag ghi lại các chương trình của cả hai mint — bit0 cho mint base, bit1 cho mint quote. Giải mã nó theo bit; byte không phải là boolean. Xem products/launchlab/accounts.
Lệnh Initialize không dùng nữa vẫn nhận chương trình quote chỉ dành cho kế thừa, vì vậy config với mint quote Token-2022 chỉ có thể truy cập được thông qua InitializeV2 và InitializeWithToken2022.

Danh sách cho phép tiện ích mở rộng CPMM và CLMM

Sau hai lối tắt được đề cập dưới đây, chương trình lặp qua các tiện ích mở rộng của mint và từ chối mint nếu nó mang bất kỳ tiện ích mở rộng nào khác ngoài năm cái này: Bất cứ thứ gì không có trong danh sách này — TransferHook, NonTransferable, ConfidentialTransferMint, PermanentDelegate, MintCloseAuthority, DefaultAccountState, GroupPointer, GroupMemberPointer, MemberPointer, Pausable, v.v. — khiến is_supported_mint trả về false và tạo pool hoàn nguyên. Các dòng liên quan (CPMM, hình dạng giống hệt trong CLMM):
— cp-swap/src/utils/token.rs

Đường dẫn bypass

Mint Token-2022 không phù hợp với danh sách cho phép vẫn có thể được chấp nhận, thông qua một cơ chế trong mỗi chương trình. Cả hai chương trình cũng từng có các bypass được mã hóa cứng trong quá khứ; không có cái nào sống sót. is_supported_mint bây giờ là byte-for-byte cùng một hàm trong cả hai chương trình: mint Token SPL kế thừa vượt qua, mint có PDA đăng ký vượt qua, và mọi thứ khác phải chỉ mang các tiện ích mở rộng được cho phép.

Bypass duy nhất: đăng ký mint

Cả hai chương trình tham khảo PDA SupportMintAssociated ở seed [b"support_mint", mint]. Nếu PDA đó tồn tại cho mint, mint được chấp nhận bất kể tập hợp tiện ích mở rộng của nó. Mỗi chương trình có bản sao riêng của PDA (chúng được dẫn xuất dưới các ID chương trình khác nhau), cặp CreateSupportMintAssociated / CloseSupportMintAssociated riêng của nó, và quyền hạn chuyên dụng riêng của nó cùng với admin được chia sẻ: Bốn khóa (CPMM và CLMM × mainnet và devnet) được liệt kê tại Các authority của registry support-mint. Trong cả hai chương trình, lệnh chấp nhận crate::admin::ID hoặc quyền hạn chuyên dụng của chương trình đó, và yêu cầu mint được sở hữu bởi Token-2022. Hiệu ứng: một mint Token-2022 cụ thể có thể được chọn vào tạo pool mà không cần nâng cấp chương trình — đó là lý do tại sao các danh sách được mã hóa cứng có thể biến mất. Mỗi chương trình tham khảo đăng ký từ mọi đường dẫn tạo pool mà nó có: CPMM từ Initialize và InitializeWithPermission (cái sau là những gì tốt nghiệp LaunchLab sử dụng, vì vậy mint đã đăng ký tốt nghiệp cũng như tạo), CLMM từ CreatePool, CreateCustomizablePool và CreatePermissionedPool.

Các bypass đã bị xóa

Cả hai cơ chế được mã hóa cứng đều biến mất từ các chương trình được triển khai. Chúng được ghi lại ở đây chỉ vì các tích hợp được viết dựa trên hành vi cũ hơn có thể vẫn giả định chúng.

MINT_WHITELIST tĩnh — bị xóa

Một mảng hằng số của các địa chỉ mint base58 từng được sử dụng để tắt is_supported_mint trước khi lặp tiện ích mở rộng. CLMM của nó chứa sáu địa chỉ và bị xóa vào 2026-07-24; CPMM của nó chứa bốn cái đầu tiên của cùng một tập hợp và bị xóa trong bản nâng cấp 2026-09-09. Pool đã tồn tại cho một trong những mint này tiếp tục giao dịch — kiểm tra mint chỉ chạy khi tạo pool. Tạo một pool mới cho một cái bây giờ yêu cầu PDA đăng ký cho nó thay thế.

Phát hiện hình dạng quyền hạn Superstate — bị xóa

CLMM từng xác định tài sản được token hóa của Superstate bằng hình dạng quyền hạn của chúng chứ không phải theo địa chỉ: mint Token-2022 có freeze_authority và permanent delegate đều bằng superstate_allowlist::ID, với DefaultAccountState được đặt thành Frozen, đã được chấp nhận. Nó là một heuristic, vì vậy bất kỳ mint tương lai nào có cùng hình dạng sẽ được chấp nhận tự động. Nó bị xóa vào 2026-07-31, cùng với mô-đun superstate_allowlist. Những gì thay thế nó là hẹp hơn và phục vụ một mục đích khác: frozen_position_nft_authorities::IDS, không chấp nhận bất cứ thứ gì — nó quyết định xem NFT vị trí có bị đóng băng hay không, và được mô tả ở trên. Quyền hạn nhà phát hành duy nhất mà heuristic cũ khớp là mục nhập duy nhất trong danh sách đó.

Những gì các bypass không miễn trừ

Các bypass bỏ qua danh sách cho phép tiện ích mở rộng, nhưng chương trình vẫn thực thi:
  • Mint được sở hữu bởi Token hoặc Token-2022. Chương trình token tùy chỉ bị từ chối ở thượng nguồn.
  • Các vault pool được tạo với các tiện ích mở rộng ATA phù hợp cho pool Token-2022 (ImmutableOwner, v.v.).
  • Tất cả các chuyển giao đi qua transfer_checked — mint mang phí hạ cánh số tiền chính xác trong vault.
Mint được cho phép trong danh sách trắng hoặc đăng ký PDA mà sau đó thêm TransferHook không nhận được kiểm tra lúc swap; hook sẽ chỉ chạy trên mỗi chuyển giao và có thể làm gián đoạn swap. Đăng ký mint do đó là một hành động đáng tin cậy cao.

Ngữ nghĩa “Bị chặn”

Khi is_supported_mint trả về false, tạo pool hoàn nguyên với ErrorCode::NotSupportMint (CPMM) / ErrorCode::NotSupportMint (CLMM). Xem reference/error-codes cho các mã số. Các pool hiện có không thể hoàn nguyên kiểm tra này — cổng chỉ chạy khi tạo. Các tiện ích mở rộng mint là bất biến cho các danh mục Raydium từ chối (transfer hook, non-transferable, confidential transfer không thể được thêm sau khi tạo), vì vậy kiểm tra tĩnh là đủ.

Tại sao mỗi tiện ích mở rộng bị loại trừ

  • TransferHook — gọi một chương trình tùy chỉnh trên mỗi chuyển giao, với tiêu thụ CU tùy ý, điều kiện thất bại tùy ý, và khả năng nhập lại chương trình gọi. Không có sandbox an toàn nào tồn tại. Một số DEX duy trì danh sách cho phép hook; Raydium không.
  • NonTransferable — Transfer luôn thất bại. Pool không thể chiếm quyền quản lý.
  • ConfidentialTransfer — số tiền chuyển giao được mã hóa; đường cong không thể định giá swap.
  • PermanentDelegate — người nắm giữ delegate có thể quét bất kỳ tài khoản token nào, bao gồm vault pool. Chỉ có thể chấp nhận bằng cách đăng ký mint, đó là cách nhà phát hành đáng tin cậy (ví dụ: stablecoin được quy định) được onboarded từng trường hợp một.
  • MintCloseAuthority — mint có thể được đóng; các pool hiện có trở nên không sử dụng được. Bị cấm theo mặc định.
  • DefaultAccountState (Frozen) — pool ATA sẽ hạ cánh ở trạng thái Frozen và yêu cầu thawing cho mỗi tài khoản. Chỉ có thể chấp nhận bằng cách đăng ký mint, giả định rằng nhà phát hành thaw các tài khoản tổ chức khi đăng ký.
  • Group/Member pointers — không gây hại tích cực, nhưng chưa được xem xét. Bị cấm theo mặc định để giữ bề mặt hẹp.

Kế toán phí chuyển giao

Đối với mint mang TransferFeeConfig, mỗi swap, deposit và withdraw di chuyển ít hơn số tiền danh nghĩa. Hai số riêng biệt liên quan, và SDK giữ chúng riêng biệt:
  • Phí pool (LP + giao thức + quỹ + người tạo) đến từ đường cong. raydium.cpmm.computeSwapAmount({ ... }) trả về nó dưới dạng fee, cùng với amountIn, amountOut, minAmountOut, executionPrice, priceImpact và swapResult thô.
  • Phí chuyển giao Token-2022 đến từ mint, không phải pool. Nó được tính toán bởi các trợ giúp getTransferAmountFee trong @raydium-io/raydium-sdk-v2, trả về GetTransferAmountFee:
Deposit và withdraw bề mặt nó trực tiếp: computePairAmount trả về inputAmountFee và anotherAmount dưới dạng giá trị GetTransferAmountFee. UI chính xác hiển thị:
  • số tiền đầu vào cộng phí chuyển giao của nó dưới dạng “bạn gửi”
  • số tiền đầu ra trừ phí chuyển giao của nó dưới dạng “bạn nhận”
  • phí pool dưới dạng dòng riêng — nó không phải là phí Token-2022
UI ngây thơ chỉ hiển thị amountIn → amountOut làm giảm chi phí. Chuyển epochInfo từ cluster vào các trợ giúp này chứ không phải lưu vào bộ nhớ cache; epoch là những gì chọn giữa cấu hình phí older và newer của mint.

Giới hạn maximumFee

Phí chuyển giao Token-2022 được giới hạn cho mỗi chuyển giao. Đối với mint 1% với giới hạn 10.000 token, chuyển giao 100.000.000 token chỉ trả 10.000 phí. SDK computeSwapAmount áp dụng giới hạn; những người gọi chương trình trực tiếp phải sao chép nó.

Chuyển đổi epoch

Quyền hạn mint có thể lên lịch thay đổi tỷ lệ phí kích hoạt ở epoch tiếp theo. Trong cửa sổ chuyển đổi, hai cấu hình (older, newer) sống trên mint cùng một lúc và TransferChecked chọn theo epoch hiện tại. Cả SwapV2 CPMM và SwapV2 CLMM đều chuyển toàn bộ tài khoản mint trong accounts, vì vậy chương trình đọc cấu hình chính xác mà không cần tra cứu thêm. Nếu bạn trích dẫn nhiều hơn một epoch trước thông qua Trade API hoặc SDK, phí được thực thi có thể khác với phí được trích dẫn — được giới hạn bởi maximum_fee_basis_points của cấu hình cũ hơn.

Lãi suất và ScaledUiAmount

Pool giữ số tiền gốc; “số tiền UI” là số tiền gốc nhân với hệ số tỷ lệ phụ thuộc thời gian hoặc được đặt bởi admin. Toán học swap hoạt động trên gốc:
SDK chuyển đổi tự động. Những người đọc RPC trực tiếp nên coi pool.token0Vault.amount là gốc.

Định nghĩa “Pool Token-2022”

Pool là pool Token-2022 nếu bất kỳ mint nào có programId == TokenzQdB.... API bề mặt này:
Sử dụng programId để điều phối, và hasTransferFee để bề mặt cảnh báo UI.

Trợ giúp SDK

Lỗi tích hợp phổ biến

  • Chỉ pre-flighting ID chương trình. Mint có thể là Token-2022 và không được hỗ trợ. Đi bộ danh sách tiện ích mở rộng so với danh sách cho phép, và kiểm tra PDA đăng ký của mint, trước khi cho phép tạo pool.
  • Tin tưởng vào trích dẫn SDK khi mint không được chấp nhận. API trích dẫn không từ chối trích dẫn — tạo pool là những gì hoàn nguyên. Xác nhận ngữ nghĩa is_supported_mint ngoài chuỗi trước khi bề mặt tạo pool trong UI của bạn.
  • Trích dẫn mà không cắt tóc phí chuyển giao. Mint phí chuyển giao 1% ở cả hai bên của pool CPMM 0,25% có phí hiệu quả khoảng 2,25%, không phải 0,25%. Sử dụng trích dẫn SDK hoặc trích dẫn Trade API — không bao giờ tính toán phí thủ công từ tầng phí pool một mình.
  • Gọi lệnh Swap kế thừa trên pool Token-2022. Swap ra đời trước Token-2022. Sử dụng SwapV2 bất cứ khi nào mint nào là Token-2022.
  • Tự động liệt kê mint Token-2022 mới. Ví và bộ tổng hợp nên kiểm tra TransferHook và NonTransferable trước khi bề mặt mint cho người dùng; cả hai đều không thân thiện với Raydium.

Công việc trong tương lai

Các mục lộ trình hệ sinh thái Solana và giao thức sẽ thay đổi ma trận này:
  • Các chương trình transfer-hook được cho phép ở cấp độ Solana (quy ước hệ sinh thái đang phát triển).
  • AMM tương thích chuyển giao bí mật (giai đoạn nghiên cứu).
  • Đăng ký mint CPMM rộng hơn (tương đương với CLMM).
  • Đường dẫn đọc công khai cho đăng ký, vì vậy UI có thể cho biết “không được hỗ trợ” từ “không được hỗ trợ nhưng đã đăng ký” mà không cần dẫn xuất PDA tự nó.
Trang này sẽ được cập nhật khi bất kỳ cái nào hạ cánh.

Con trỏ

Nguồn:
  • raydium-cp-swap/programs/cp-swap/src/utils/token.rs — is_supported_mint, support_mint_associated_is_initialized.
  • raydium-clmm/programs/amm/src/util/token.rs — is_supported_mint, support_mint_associated_is_initialized, frozen_position_nft_authorities, position_nft_must_freeze.
  • raydium-clmm/programs/amm/src/instructions/admin/create_support_mint_associated.rs — lệnh đăng ký mint.
  • raydium-launchpad/programs/launchpad/src/instructions/initialize_with_token_2022.rs — tạo mint base Token-2022 LaunchLab.
  • raydium-launchpad/programs/launchpad/src/instructions/admin/create_config.rs — liên kết mint quote LaunchLab (không có kiểm tra tiện ích mở rộng).