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 →
Hỗ trợ cấp chương trình
Các kiểm tra danh sách cho phép nằm trong:
- CPMM:
is_supported_minttrongraydium-cp-swap/programs/cp-swap/src/utils/token.rs, được gọi từInitializevàInitializeWithPermission. - CLMM:
is_supported_minttrongraydium-clmm/programs/amm/src/util/token.rs, được gọi từCreatePool. - LaunchLab:
initialize_with_token_2022trongraydium-launchpad/programs/launchpad/src/instructions/initialize_with_token_2022.rs(mã nguồn không công khai).
Đó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í.
OpenPositionV2bao gồm NFT vị trí SPL cổ điển trên tài sản pool Token-2022.OpenPositionWithToken22Nftbao gồm NFT vị trí Token-2022.OpenPositionV1 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.
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èmMetadataPointervà (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. KhiTransferFeeConfigđược đính kèm,transfer_fee_config_authoritycủa mint là launch authority PDA cho đến khi tốt nghiệp, trong khiwithdraw_withheld_authoritycủ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. Xemproducts/launchlab/platform-config. - Mint quote — LaunchLab không tạo nó và không sàng lọc nó.
CreateConfigchấp nhận tài khoản mint như được cung cấp, vì vậy không có tương đươngis_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ớiGlobalConfig.
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. Xemproducts/launchlab/instructions.PoolState.token_program_flagghi 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. Xemproducts/launchlab/accounts.
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 PDASupportMintAssociated ở 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
TokenhoặcToken-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.
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”
Khiis_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 —
Transferluô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
Frozenvà 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 mangTransferFeeConfig, 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ạngfee, cùng vớiamountIn,amountOut,minAmountOut,executionPrice,priceImpactvàswapResultthô. - 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
getTransferAmountFeetrong@raydium-io/raydium-sdk-v2, trả vềGetTransferAmountFee:
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
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: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:
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_mintngoà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
Swapkế thừa trên pool Token-2022.Swapra đời trước Token-2022. Sử dụngSwapV2bấ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
TransferHookvàNonTransferabletrướ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ó.
Con trỏ
algorithms/token-2022-transfer-fees— toán học phí trong swap.products/cpmm/instructions—SwapV2,Initialize.products/clmm/instructions—SwapV2,CreatePool,CreateSupportMintAssociated.reference/error-codes— mã sốNotSupportMintcho mỗi chương trình.
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).

