Halaman ini diterjemahkan secara otomatis oleh AI. Versi bahasa Inggris adalah acuan resmi.Lihat versi bahasa Inggris →
Raydium tidak menerima mint Token-2022 sembarangan. CPMM dan CLMM keduanya menjalankan mode daftar izin ketat: hanya serangkaian kecil ekstensi yang lolos secara default; semuanya ditolak saat pembuatan pool. Setiap program mengakui mint individual melalui satu mekanisme — PDA registri per-mint yang dikelola admin. Kedua program juga membawa bypass yang dikodekan keras di berbagai titik; semua itu telah dihapus. Halaman ini adalah referensi satu halaman untuk apa yang ditegakkan dan di mana, dengan kutipan ke sumber program.
Dukungan tingkat program
Pemeriksaan daftar izin berada di:
- CPMM:
is_supported_mintdalamraydium-cp-swap/programs/cp-swap/src/utils/token.rs, dipanggil dariInitializedanInitializeWithPermission. - CLMM:
is_supported_mintdalamraydium-clmm/programs/amm/src/util/token.rs, dipanggil dariCreatePool. - LaunchLab:
initialize_with_token_2022dalamraydium-launchpad/programs/launchpad/src/instructions/initialize_with_token_2022.rs(sumber tidak tersedia untuk publik).
Pembekuan NFT posisi CLMM untuk penerbit terbatas
Akun NFT posisi tetap tidak beku secara default. CLMM membekukan satu hanya ketika posisi menggunakan jalur terbuka V2 dan setidaknya satufreeze_authority mint vault saat ini muncul dalam daftar frozen_position_nft_authorities::IDS yang dikodekan keras. Daftar itu adalah apa yang menggantikan deteksi token Superstate CLMM sebelumnya, dan membawa otoritas penerbit yang sama dengan heuristik lama yang cocok. Menetapkan pool PDA sebagai freeze_authority mint NFT posisi bukan pembekuan itu sendiri. Ini adalah aturan penjagaan posisi, bukan daftar izin pembuatan pool:
- Pool sudah dapat ada dan tetap dapat ditukar.
- Mint NFT posisi menggunakan pool PDA CLMM sebagai
freeze_authority-nya sendiri; penerbit yang mendasar tidak mengendalikan NFT posisi. OpenPositionV2mencakup NFT posisi SPL klasik atas aset pool Token-2022.OpenPositionWithToken22Nftmencakup NFT posisi Token-2022.OpenPositionV1 tidak memeriksa mint vault dan tidak dapat melayani aset terbatas Token-2022 yang ditargetkan oleh daftar yang dikirim.- Posisi yang ada tidak berubah.
ClosePosition mencairkan dan membakar secara atomik ketika klien melewatkan pool sebagai akun pertama yang tersisa. Lihat products/clmm/ticks-and-positions.
Mint quote LaunchLab
Dua mint LaunchLab dibatasi sangat berbeda, dan asimetrinya mudah terlewatkan.- Mint base — LaunchLab membuatnya. Mint base Token-2022 hanya dapat dicapai melalui
initialize_with_token_2022, dan program hanya akan melampirkanMetadataPointerdan (secara opsional)TransferFeeConfig. Apa pun yang lain mengembalikanNoSupportExtension. Mint Token-2022 yang sudah ada tidak dapat disuplai sebagai base sama sekali. KetikaTransferFeeConfigdilampirkan,transfer_fee_config_authoritymint adalah PDA otoritas peluncuran hingga kelulusan, sementarawithdraw_withheld_authority-nya adalahtransfer_fee_extension_authplatform yang dikonfigurasi dari pembuatan mint seterusnya — program launchpad itu sendiri tidak memiliki instruksi withdraw-withheld. Lihatproducts/launchlab/platform-config. - Mint quote — LaunchLab tidak membuatnya dan tidak menyaringnya.
CreateConfigmenerima akun mint sebagaimana diberikan, jadi tidak ada setarais_supported_mintdi sisi quote. Satu-satunya gating adalah mint mana yang dipilih admin untuk diikat keGlobalConfig.
TransferHook akan menjalankan hook-nya pada setiap pembelian, penjualan, dan klaim biaya di setiap pool yang dikutip di dalamnya, dan mint quote PermanentDelegate akan membiarkan delegasi menyapu vault quote pool tersebut. Tidak satupun yang diblokir oleh program.
Apa yang LaunchLab tangani dengan benar setelah mint quote diikat:
- Vault quote, kedua vault biaya, dan akun token penerima biaya saham dibuat pada program mint quote itu sendiri.
TransferFeeConfigdi sisi quote diperhitungkan dalam keempat instruksi perdagangan, dan batas slippage diperiksa terhadap jumlah bersih pembayar daripada pergerakan vault kotor. Lihatproducts/launchlab/instructions.PoolState.token_program_flagmencatat program kedua mint — bit0 untuk mint base, bit1 untuk mint quote. Dekode per bit; byte bukan boolean. Lihatproducts/launchlab/accounts.
Initialize yang sudah usang masih mengambil program quote warisan saja, jadi config dengan mint quote Token-2022 hanya dapat dicapai melalui InitializeV2 dan InitializeWithToken2022.
Daftar izin ekstensi CPMM dan CLMM
Setelah dua shortcut yang tercakup di bawah, program mengulangi ekstensi mint dan menolak mint jika membawa ekstensi apa pun selain lima ini:
Apa pun yang tidak dalam daftar ini —
TransferHook, NonTransferable, ConfidentialTransferMint, PermanentDelegate, MintCloseAuthority, DefaultAccountState, GroupPointer, GroupMemberPointer, MemberPointer, Pausable, dll. — menyebabkan is_supported_mint mengembalikan false dan pembuatan pool kembali.
Baris yang relevan (CPMM, bentuk identik di CLMM):
cp-swap/src/utils/token.rs
Jalur bypass
Mint Token-2022 yang tidak sesuai dengan daftar izin masih dapat diterima, melalui satu mekanisme di setiap program. Kedua program juga membawa bypass yang dikodekan keras di masa lalu; tidak satupun yang bertahan.is_supported_mint sekarang byte-for-byte fungsi yang sama di kedua program: mint SPL Token warisan lolos, mint dengan PDA registri lolos, dan semuanya harus membawa hanya ekstensi yang diizinkan.
Satu-satunya bypass: registri per-mint
Kedua program berkonsultasi dengan PDASupportMintAssociated pada seed [b"support_mint", mint]. Jika PDA itu ada untuk mint, mint diterima terlepas dari set ekstensinya.
Setiap program memiliki salinannya sendiri dari PDA (mereka berasal di bawah ID program yang berbeda), pasangan CreateSupportMintAssociated / CloseSupportMintAssociated sendiri, dan otoritas khusus sendiri bersama admin bersama:
Empat kunci (CPMM dan CLMM × mainnet dan devnet) tercantum di bawah Support-mint registry authorities.
Di kedua program instruksi menerima baik crate::admin::ID atau otoritas khusus program itu, dan memerlukan mint dimiliki oleh Token-2022. Efek: mint Token-2022 tertentu dapat dipilih ke dalam pembuatan pool tanpa upgrade program — itulah mengapa daftar yang dikodekan keras bisa hilang.
Setiap program berkonsultasi dengan registri dari setiap jalur pembuatan pool yang dimilikinya: CPMM dari Initialize dan InitializeWithPermission (yang terakhir adalah apa yang digunakan kelulusan LaunchLab, jadi mint terdaftar lulus serta membuat), CLMM dari CreatePool, CreateCustomizablePool dan CreateCustomizablePoolV2.
Mekanisme bypass yang dihapus
Kedua mekanisme hardcoded telah dihapus dari program yang di-deploy. Mekanisme ini didokumentasikan di sini hanya karena integrasi yang ditulis terhadap perilaku lama mungkin masih mengasumsikannya.Static MINT_WHITELIST — dihapus
Sebuah array konstanta dari alamat mint base58 yang digunakan untuk short-circuit is_supported_mint sebelum iterasi extension. CLMM menyimpan enam alamat dan dihapus pada 2026-07-24; CPMM menyimpan empat alamat pertama dari set yang sama dan dihapus dalam upgrade 2026-09-09.
Pool yang sudah ada untuk salah satu mint ini tetap dapat melakukan trading — pemeriksaan mint hanya berjalan saat pembuatan pool. Membuat pool baru untuk salah satu mint sekarang memerlukan registry PDA untuk mint tersebut.
Deteksi bentuk authority Superstate — dihapus
CLMM sempat mengidentifikasi aset tokenisasi Superstate berdasarkan bentuk authority mereka daripada berdasarkan alamat: mint Token-2022 yangfreeze_authority dan permanent delegate keduanya sama dengan superstate_allowlist::ID, dengan DefaultAccountState diatur ke Frozen, diterima. Ini adalah heuristik, jadi mint apa pun di masa depan dengan bentuk yang sama akan diterima secara otomatis.
Ini dihapus pada 2026-07-31, bersama dengan modul superstate_allowlist. Apa yang menggantinya lebih sempit dan melayani tujuan yang berbeda: frozen_position_nft_authorities::IDS, yang tidak menerima apa pun — ini menentukan apakah position NFT menjadi frozen, dan dijelaskan di atas. Satu-satunya issuer authority yang cocok dengan heuristik lama adalah satu-satunya entri dalam daftar itu.
Apa yang tidak dilewati oleh bypass
Bypass melewati extension allow-list, tetapi program masih memberlakukan:- Mint dimiliki oleh
TokenatauToken-2022. Program token kustom ditolak upstream. - Pool vault dibuat dengan extension ATA yang tepat untuk pool Token-2022 (
ImmutableOwner, dll.). - Semua transfer melalui
transfer_checked— mint yang membawa biaya mendarat dengan jumlah yang tepat di vault.
TransferHook kemudian tidak mendapatkan pemeriksaan saat swap; hook akan berjalan pada setiap transfer dan dapat merusak swap. Mendaftarkan mint adalah tindakan yang memerlukan kepercayaan tinggi.
Semantik “Blocked”
Ketikais_supported_mint mengembalikan false, pembuatan pool kembali dengan ErrorCode::NotSupportMint (CPMM) / ErrorCode::NotSupportMint (CLMM). Lihat reference/error-codes untuk kode numerik.
Pool yang sudah ada tidak dapat secara retroaktif gagal pemeriksaan ini — gate hanya berjalan saat pembuatan. Extension mint tidak dapat diubah untuk kategori yang ditolak Raydium (transfer hook, non-transferable, confidential transfer tidak dapat ditambahkan setelah pembuatan), jadi pemeriksaan statis sudah cukup.
Mengapa setiap extension yang dikecualikan dikecualikan
- TransferHook — memanggil program kustom pada setiap transfer, dengan konsumsi CU yang sewenang-wenang, kondisi kegagalan yang sewenang-wenang, dan kemampuan untuk memasuki kembali program yang memanggil. Tidak ada sandbox yang aman. Beberapa DEX mempertahankan hook allow-list; Raydium tidak.
- NonTransferable —
Transferselalu gagal. Pool tidak dapat mengambil alih. - ConfidentialTransfer — jumlah transfer dienkripsi; kurva tidak dapat menentukan harga swap.
- PermanentDelegate — pemegang delegate dapat menyapu akun token apa pun, termasuk pool vault. Hanya dapat diterima dengan mendaftarkan mint, yang merupakan cara issuer terpercaya (misalnya stablecoin yang diatur) di-onboard kasus per kasus.
- MintCloseAuthority — mint dapat ditutup; pool yang ada menjadi tidak dapat digunakan. Dilarang secara default.
- DefaultAccountState (Frozen) — pool ATA akan mendarat dalam status
Frozendan memerlukan thawing per akun. Hanya dapat diterima dengan mendaftarkan mint, yang mengasumsikan issuer mencairkan akun institusional saat pendaftaran. - Group/Member pointers — tidak secara aktif berbahaya, tetapi belum ditinjau. Dilarang secara default untuk menjaga permukaan tetap sempit.
Akuntansi transfer-fee
Untuk mint yang membawaTransferFeeConfig, setiap swap, deposit, dan withdraw memindahkan lebih sedikit dari jumlah nominal. Dua angka terpisah terlibat, dan SDK menjaganya tetap terpisah:
- Pool fee (LP + protokol + dana + kreator) berasal dari kurva.
raydium.cpmm.computeSwapAmount({ ... })mengembalikannya sebagaifee, bersama denganamountIn,amountOut,minAmountOut,executionPrice,priceImpactdanswapResultmentah. - Token-2022 transfer fee berasal dari mint, bukan pool. Ini dihitung oleh helper
getTransferAmountFeedi@raydium-io/raydium-sdk-v2, yang mengembalikanGetTransferAmountFee:
computePairAmount mengembalikan inputAmountFee dan anotherAmount sebagai nilai GetTransferAmountFee.
UI yang benar menampilkan:
- jumlah input plus transfer
fee-nya sebagai “Anda mengirim” - jumlah output minus transfer
fee-nya sebagai “Anda menerima” - pool
feesebagai baris terpisah — ini bukan Token-2022 fee
amountIn → amountOut meremehkan biaya. Lewatkan epochInfo dari cluster ke helper ini daripada meng-cache-nya; epoch adalah yang memilih antara older dan newer fee config mint.
Batas maximumFee
Token-2022 transfer fee dibatasi per transfer. Untuk mint 1% dengan batas 10.000 token, transfer 100.000.000 token hanya membayar 10.000 dalam biaya. SDK computeSwapAmount menerapkan batas; pemanggil program langsung harus mereplikasi batas.
Transisi epoch
Otoritas mint dapat menjadwalkan perubahan fee-rate yang diaktifkan pada epoch berikutnya. Selama jendela transisi, dua config (older, newer) hidup di mint secara bersamaan dan TransferChecked memilih berdasarkan epoch saat ini. CPMM SwapV2 dan CLMM SwapV2 keduanya melewatkan akun mint lengkap di accounts, jadi program membaca config yang tepat tanpa lookup tambahan.
Jika Anda mengutip lebih dari satu epoch sebelumnya melalui Trade API atau SDK, biaya yang dieksekusi dapat berbeda dari biaya yang dikutip — dibatasi oleh maximum_fee_basis_points config yang lebih lama.
Interest-bearing dan ScaledUiAmount
Pool menyimpan jumlah pokok; “UI amount” adalah pokok dikalikan dengan faktor skala yang bergantung waktu atau diatur admin. Matematika swap beroperasi pada pokok:pool.token0Vault.amount sebagai pokok.
Definisi “Token-2022 pool”
Pool adalah Token-2022 pool jika salah satu mint memilikiprogramId == TokenzQdB.... API menampilkan ini:
programId untuk dispatch, dan hasTransferFee untuk menampilkan peringatan UI.
SDK helpers
Kesalahan integrasi umum
- Pre-flighting hanya program ID. Mint dapat menjadi Token-2022 dan tidak didukung. Jalan-jalan daftar extension terhadap allow-list, dan periksa registry PDA mint, sebelum memungkinkan pembuatan pool.
- Mempercayai quote SDK ketika mint tidak diterima sama sekali. Quote API tidak menolak untuk mengutip — pembuatan pool adalah yang kembali. Konfirmasi semantik
is_supported_mintoff-chain sebelum mengekspos pembuatan pool di UI Anda. - Mengutip tanpa potongan transfer-fee. Mint transfer-fee 1% di kedua sisi pool CPMM 0,25% memiliki biaya efektif sekitar 2,25%, bukan 0,25%. Gunakan quote SDK atau quote Trade API — jangan pernah hitung biaya secara manual dari tier biaya pool saja.
- Memanggil instruksi
Swaplegacy pada pool Token-2022.Swapmendahului Token-2022. GunakanSwapV2kapan pun salah satu mint adalah Token-2022. - Auto-listing mint Token-2022 baru. Dompet dan agregator harus memeriksa
TransferHookdanNonTransferablesebelum menampilkan mint kepada pengguna; keduanya tidak ramah Raydium.
Pekerjaan di masa depan
Item roadmap ekosistem Solana dan protokol yang akan mengubah matriks ini:- Program transfer-hook yang di-allow-list di level Solana (konvensi ekosistem berkembang).
- AMM yang kompatibel dengan confidential-transfer (tahap penelitian).
- Registry per-mint CPMM yang lebih luas (paritas dengan CLMM).
- Jalur baca publik untuk registry, sehingga UI dapat membedakan “tidak didukung” dari “tidak didukung tetapi terdaftar” tanpa menurunkan PDA itu sendiri.
Pointer
algorithms/token-2022-transfer-fees— matematika biaya dalam swap.products/cpmm/instructions—SwapV2,Initialize.products/clmm/instructions—SwapV2,CreatePool,CreateSupportMintAssociated.reference/error-codes— kode numerikNotSupportMintper program.
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— instruksi registry per-mint.raydium-launchpad/programs/launchpad/src/instructions/initialize_with_token_2022.rs— pembuatan base-mint Token-2022 LaunchLab.raydium-launchpad/programs/launchpad/src/instructions/admin/create_config.rs— pengikatan quote-mint LaunchLab (tidak ada pemeriksaan extension).

