Diese Seite wurde mit KI automatisch übersetzt. Maßgeblich ist stets die englische Version.Englische Version ansehen →
Raydium akzeptiert keine beliebigen Token-2022-Mints. Sowohl CPMM als auch CLMM arbeiten im strikten Allow-List-Modus: Standardmäßig passiert nur eine kleine Menge von Erweiterungen; alles andere wird bei der Pool-Erstellung abgelehnt. Jedes Programm lässt einen einzelnen Mint durch einen Mechanismus zu — eine von Administratoren verwaltete Pro-Mint-Registry-PDA. Beide Programme hatten auch an verschiedenen Stellen hardcodierte Bypasses; alle wurden inzwischen gelöscht. Diese Seite ist die Einzelseiten-Referenz für das, was durchgesetzt wird und wo, mit Verweisen auf den Programmquellcode.
Unterstützung auf Programmebene
Die Allow-List-Prüfungen befinden sich in:
- CPMM:
is_supported_mintinraydium-cp-swap/programs/cp-swap/src/utils/token.rs, aufgerufen vonInitializeundInitializeWithPermission. - CLMM:
is_supported_mintinraydium-clmm/programs/amm/src/util/token.rs, aufgerufen vonCreatePool. - LaunchLab:
initialize_with_token_2022inraydium-launchpad/programs/launchpad/src/instructions/initialize_with_token_2022.rs(Quellcode nicht öffentlich verfügbar).
CLMM-Position-NFT-Einfrieren für eingeschränkte Emittenten
Position-NFT-Konten bleiben standardmäßig aufgetaut. CLMM friert einen nur ein, wenn die Position einen V2-Open-Pfad verwendet und mindestens eine Vault-Mint der aktuellenfreeze_authority in der hardcodierten frozen_position_nft_authorities::IDS-Liste erscheint. Diese Liste ersetzte CLMMs frühere Superstate-Token-Erkennung und trägt die gleiche Emittenten-Autorität, die die alte Heuristik abgeglichen hat. Das Setzen der Pool-PDA als Freeze-Autorität des Position-NFT-Mints ist selbst kein Einfrieren. Dies ist eine Position-Custody-Regel, keine Pool-Erstellungs-Allowlist:
- Der Pool kann bereits existieren und bleibt tauschbar.
- Der Position-NFT-Mint verwendet die CLMM-Pool-PDA als seine eigene Freeze-Autorität; der zugrunde liegende Emittent kontrolliert den Position-NFT nicht.
OpenPositionV2deckt klassische SPL-Position-NFTs über Token-2022-Pool-Assets ab.OpenPositionWithToken22Nftdeckt Token-2022-Position-NFTs ab.OpenPositionV1 inspiziert Vault-Mints nicht und kann die Token-2022-eingeschränkten Assets, auf die die ausgelieferte Liste abzielt, nicht bedienen.- Bestehende Positionen bleiben unverändert.
ClosePosition taut auf und brennt atomar, wenn der Client den Pool als das erste verbleibende Konto übergibt. Siehe products/clmm/ticks-and-positions.
LaunchLab-Quote-Mints
Die beiden Mints von LaunchLab sind sehr unterschiedlich gated, und die Asymmetrie ist leicht zu übersehen.- Base-Mint — LaunchLab erstellt ihn. Ein Token-2022-Base-Mint ist nur über
initialize_with_token_2022erreichbar, und das Programm wird nurMetadataPointerund (optional)TransferFeeConfiganhängen. Alles andere gibtNoSupportExtensionzurück. Ein bereits vorhandener Token-2022-Mint kann überhaupt nicht als Base bereitgestellt werden. WennTransferFeeConfigangehängt ist, ist dietransfer_fee_config_authoritydes Mints die Launch-Autorität-PDA bis zur Graduation, während seinewithdraw_withheld_authoritydie konfiguriertetransfer_fee_extension_authder Plattform ab der Mint-Erstellung ist — das Launchpad-Programm selbst hat keine Withdraw-Withheld-Anweisung. Sieheproducts/launchlab/platform-config. - Quote-Mint — LaunchLab erstellt ihn nicht und prüft ihn nicht.
CreateConfigakzeptiert das Mint-Konto wie gegeben, daher gibt es keinis_supported_mint-Äquivalent auf der Quote-Seite. Das einzige Gate ist, welche Mints ein Admin an eineGlobalConfigbindet.
TransferHook-Quote-Mint würde seinen Hook bei jedem Kauf, Verkauf und Gebührenanspruch in jedem Pool, der darin notiert ist, ausführen, und ein PermanentDelegate-Quote-Mint würde dem Delegaten erlauben, die Quote-Vaults dieser Pools zu leeren. Keines wird vom Programm blockiert.
Was LaunchLab korrekt handhabt, sobald ein Quote-Mint gebunden ist:
- Der Quote-Vault, beide Fee-Vaults und das Token-Konto des Share-Fee-Empfängers werden auf dem eigenen Programm des Quote-Mints erstellt.
TransferFeeConfigauf der Quote-Seite wird in alle vier Trade-Anweisungen eingepreist, und die Slippage-Grenze wird gegen den Netto-Betrag des Zahlers statt gegen die Brutto-Bewegung des Vaults geprüft. Sieheproducts/launchlab/instructions.PoolState.token_program_flagzeichnet die Programme beider Mints auf — Bit0 für den Base-Mint, Bit1 für den Quote-Mint. Dekodieren Sie es pro Bit; das Byte ist kein Boolean. Sieheproducts/launchlab/accounts.
Initialize-Anweisung nimmt immer noch ein Legacy-Only-Quote-Programm, daher ist eine Config mit einem Token-2022-Quote-Mint nur über InitializeV2 und InitializeWithToken2022 erreichbar.
CPMM- und CLMM-Erweiterungs-Allowlist
Nach den zwei Kurzschlüssen, die unten behandelt werden, iteriert das Programm die Erweiterungen des Mints und lehnt den Mint ab, wenn er eine Erweiterung trägt, die nicht diese fünf sind:
Alles, was nicht auf dieser Liste steht —
TransferHook, NonTransferable, ConfidentialTransferMint, PermanentDelegate, MintCloseAuthority, DefaultAccountState, GroupPointer, GroupMemberPointer, MemberPointer, Pausable usw. — führt dazu, dass is_supported_mint false zurückgibt und die Pool-Erstellung zurückgerollt wird.
Die relevanten Zeilen (CPMM, identische Form in CLMM):
cp-swap/src/utils/token.rs
Bypass-Pfade
Ein Token-2022-Mint, der nicht in die Allowlist passt, kann immer noch zugelassen werden, durch einen Mechanismus in jedem Programm. Beide Programme hatten auch in der Vergangenheit hardcodierte Bypasses; keiner von ihnen überlebt.is_supported_mint ist jetzt Byte-für-Byte die gleiche Funktion in beiden Programmen: Legacy-SPL-Token-Mints passieren, ein Mint mit einer Registry-PDA passiert, und alles andere muss nur erlaubte Erweiterungen tragen.
Der einzige Bypass: die Pro-Mint-Registry
Beide Programme konsultieren eineSupportMintAssociated-PDA bei Seed [b"support_mint", mint]. Wenn diese PDA für den Mint existiert, wird der Mint unabhängig von seinem Erweiterungssatz zugelassen.
Jedes Programm hat seine eigene Kopie der PDA (sie leiten unter verschiedenen Programm-IDs ab), sein eigenes CreateSupportMintAssociated/CloseSupportMintAssociated-Paar und seine eigene dedizierte Autorität neben dem gemeinsamen Admin:
Die vier Schlüssel (CPMM und CLMM × Mainnet und Devnet) sind unter Support-Mint-Registry-Autoritäten aufgeführt.
In beiden Programmen akzeptiert die Anweisung entweder crate::admin::ID oder die dedizierte Autorität dieses Programms und erfordert, dass der Mint von Token-2022 besessen wird. Effekt: Ein spezifischer Token-2022-Mint kann ohne Programm-Upgrade in die Pool-Erstellung aufgenommen werden — deshalb konnten die hardcodierten Listen gehen.
Jedes Programm konsultiert die Registry von jedem Pool-Erstellungs-Pfad, den es hat: CPMM von Initialize und InitializeWithPermission (letzteres ist das, was LaunchLab-Graduationen verwenden, daher graduiert ein registrierter Mint sowie erstellt), CLMM von CreatePool, CreateCustomizablePool und CreatePermissionedPool.
Die entfernten Bypasses
Beide hardcodierten Mechanismen sind aus den bereitgestellten Programmen verschwunden. Sie werden hier nur dokumentiert, weil Integrationen, die gegen das ältere Verhalten geschrieben wurden, sie möglicherweise immer noch annehmen.Statische MINT_WHITELIST — entfernt
Ein konstantes Array von Base58-Mint-Adressen, das früher is_supported_mint vor der Erweiterungsiteration kurzschloss. CLMMs hielt sechs Adressen und wurde am 2026-07-24 gelöscht; CPMMs hielt die ersten vier der gleichen Menge und wurde im Upgrade 2026-09-09 gelöscht.
Ein Pool, der bereits für einen dieser Mints existiert, bleibt im Handel — die Mint-Prüfung wird nur bei der Pool-Erstellung ausgeführt. Das Erstellen eines neuen Pools für einen erfordert stattdessen eine Registry-PDA dafür.
Superstate-Autoritäts-Form-Erkennung — entfernt
CLMM identifizierte Superstates tokenisierte Assets kurzzeitig anhand ihrer Autoritäts-Form statt anhand der Adresse: Ein Token-2022-Mint, dessenfreeze_authority und permanenter Delegat beide superstate_allowlist::ID gleich waren, mit DefaultAccountState auf Frozen gesetzt, wurde zugelassen. Es war eine Heuristik, daher würde jeder zukünftige Mint mit der gleichen Form automatisch zugelassen worden sein.
Es wurde am 2026-07-31 zusammen mit dem superstate_allowlist-Modul gelöscht. Was es ersetzte, ist enger und dient einem anderen Zweck: frozen_position_nft_authorities::IDS, das nichts zulässt — es entscheidet, ob eine Position-NFT eingefroren wird, und wird oben beschrieben. Die eine Emittenten-Autorität, die die alte Heuristik abgeglichen hat, ist der eine Eintrag in dieser Liste.
Was die Bypasses nicht verzeihen
Die Bypasses überspringen die Erweiterungs-Allowlist, aber das Programm erzwingt immer noch:- Der Mint wird von entweder
TokenoderToken-2022besessen. Ein benutzerdefiniertes Token-Programm wird vorgelagert abgelehnt. - Die Pool-Vaults werden mit den richtigen ATA-Erweiterungen für Token-2022-Pools erstellt (
ImmutableOwnerusw.). - Alle Transfers gehen durch
transfer_checked— gebührentragende Mints landen den richtigen Betrag im Vault.
TransferHook hinzufügt, erhält keine Swap-Zeit-Prüfung; der Hook würde einfach bei jedem Transfer ausgeführt und könnte Swaps blockieren. Das Registrieren eines Mints ist daher eine vertrauenswürdige Aktion.
„Blockiert”-Semantik
Wennis_supported_mint false zurückgibt, wird die Pool-Erstellung mit ErrorCode::NotSupportMint (CPMM) / ErrorCode::NotSupportMint (CLMM) zurückgerollt. Siehe reference/error-codes für die numerischen Codes.
Bestehende Pools können diese Prüfung nicht rückwirkend fehlschlagen — das Gate wird nur bei der Erstellung ausgeführt. Mint-Erweiterungen sind unveränderlich für die Kategorien, die Raydium ablehnt (Transfer-Hook, nicht übertragbar, vertrauliche Übertragung können nach der Erstellung nicht hinzugefügt werden), daher ist die statische Prüfung ausreichend.
Warum jede ausgeschlossene Erweiterung ausgeschlossen ist
- TransferHook — ruft ein benutzerdefiniertes Programm bei jedem Transfer auf, mit beliebigem CU-Verbrauch, beliebigen Fehlerbedingungen und der Möglichkeit, das aufrufende Programm erneut einzugeben. Es gibt keine sichere Sandbox. Einige DEXes führen Hook-Allowlists; Raydium nicht.
- NonTransferable —
Transferschlägt immer fehl. Ein Pool kann keine Verwahrung übernehmen. - ConfidentialTransfer — Übertragsbeträge sind verschlüsselt; die Kurve kann den Swap nicht bewerten.
- PermanentDelegate — ein Inhaber des Delegaten kann jedes Token-Konto leeren, einschließlich des Pool-Vaults. Nur durch Registrierung des Mints zulässig, was ist, wie ein vertrauenswürdiger Emittent (z. B. eine regulierte Stablecoin) Fall für Fall eingebunden wird.
- MintCloseAuthority — der Mint kann geschlossen werden; bestehende Pools werden unbrauchbar. Standardmäßig nicht zulässig.
- DefaultAccountState (Frozen) — Pool-ATAs würden im
Frozen-Status landen und müssen pro Konto aufgetaut werden. Nur durch Registrierung des Mints zulässig, was davon ausgeht, dass der Emittent institutionelle Konten bei der Registrierung auftaut. - Group/Member-Pointer — nicht aktiv schädlich, aber ungeprüft. Standardmäßig nicht zulässig, um die Oberfläche eng zu halten.
Gebührenabrechnung übertragen
Für Mints mitTransferFeeConfig bewegt sich bei jedem Swap, Deposit und Withdraw weniger als der nominale Betrag. Zwei separate Zahlen sind beteiligt, und das SDK hält sie auseinander:
- Die Pool-Gebühr (LP + Protokoll + Fonds + Creator) kommt aus der Kurve.
raydium.cpmm.computeSwapAmount({ ... })gibt sie alsfeezurück, zusammen mitamountIn,amountOut,minAmountOut,executionPrice,priceImpactund dem rohenswapResult. - Die Token-2022-Übertragsgebühr kommt vom Mint, nicht vom Pool. Sie wird von den
getTransferAmountFee-Helfern in@raydium-io/raydium-sdk-v2berechnet, die eineGetTransferAmountFeezurückgeben:
computePairAmount gibt inputAmountFee und anotherAmount als GetTransferAmountFee-Werte zurück.
Eine korrekte UI zeigt:
- den Eingabebetrag plus seine Übertragsgebühr als „Sie senden”
- den Ausgabebetrag minus seine Übertragsgebühr als „Sie erhalten”
- die Pool-Gebühr als separate Zeile — es ist nicht die Token-2022-Gebühr
amountIn → amountOut zeigt, unterschätzt die Kosten. Übergeben Sie epochInfo vom Cluster an diese Helfer, anstatt sie zu cachen; die Epoch ist das, was zwischen der older- und newer-Gebührenconfig eines Mints wählt.
maximumFee-Obergrenze
Token-2022-Übertragsgebühren sind pro Übertrag begrenzt. Für einen 1%-Mint mit einer 10.000-Token-Obergrenze zahlt eine 100.000.000-Token-Übertragung nur 10.000 in Gebühren. Das SDK computeSwapAmount wendet die Obergrenze an; direkte Programmaufrufer müssen sie replizieren.
Epoch-Übergang
Eine Mint-Autorität kann eine Gebührensatz-Änderung planen, die in der nächsten Epoch aktiviert wird. Während des Übergangsfensters leben zwei Configs (older, newer) gleichzeitig auf dem Mint und TransferChecked wählt nach aktueller Epoch. Sowohl CPMM SwapV2 als auch CLMM SwapV2 übergeben das vollständige Mint-Konto in accounts, daher liest das Programm die richtige Config ohne zusätzliche Suche.
Wenn Sie mehr als eine Epoch im Voraus über die Trade-API oder SDK zitieren, kann die ausgeführte Gebühr von der zitierten Gebühr abweichen — begrenzt durch die maximum_fee_basis_points der älteren Config.
Zinsträger und ScaledUiAmount
Der Pool hält den Hauptbetrag; der „UI-Betrag” ist der Hauptbetrag multipliziert mit einem zeitabhängigen oder von Admin gesetzten Skalierungsfaktor. Swap-Mathematik arbeitet mit Hauptbetrag:pool.token0Vault.amount als Hauptbetrag behandeln.
„Token-2022-Pool”-Definition
Ein Pool ist ein Token-2022-Pool, wenn einer MintprogramId == TokenzQdB... hat. Die API zeigt dies:
programId zum Dispatch und hasTransferFee zum Anzeigen einer UI-Warnung.
SDK-Helfer
Häufige Integrationsfehler
- Nur die Programm-ID vorab-flighting. Ein Mint kann Token-2022 und nicht unterstützt sein. Gehen Sie die Erweiterungsliste gegen die Allowlist durch und prüfen Sie auf die Registry-PDA des Mints, bevor Sie die Pool-Erstellung zulassen.
- Der SDK-Quote vertrauen, wenn der Mint überhaupt nicht akzeptiert wird. Die Quote-API weigert sich nicht zu zitieren — Pool-Erstellung ist das, was zurückgerollt wird. Bestätigen Sie
is_supported_mint-Semantik offline, bevor Sie die Pool-Erstellung in Ihrer UI verfügbar machen. - Zitieren ohne den Übertragsgebühren-Haarschnitt. Ein 1%-Übertragsgebühren-Mint auf beiden Seiten eines 0,25%-CPMM-Pools hat eine effektive Gebühr von etwa 2,25%, nicht 0,25%. Verwenden Sie das SDK-Quote oder Trade-API-Quote — berechnen Sie die Gebühr niemals manuell nur aus der Pool-Gebühren-Stufe.
- Die Legacy-
Swap-Anweisung auf einem Token-2022-Pool aufrufen.Swapstammt aus der Zeit vor Token-2022. Verwenden SieSwapV2, wenn einer der Mints Token-2022 ist. - Automatisches Auflisten neuer Token-2022-Mints. Wallets und Aggregatoren sollten auf
TransferHookundNonTransferableprüfen, bevor sie einen Mint Benutzern anzeigen; beide sind Raydium-feindselig.
Zukünftige Arbeit
Solana-Ökosystem- und Protokoll-Roadmap-Elemente, die diese Matrix ändern würden:- Auf Solana-Ebene erlaubte Transfer-Hook-Programme (Ökosystem-Konvention entwickelt sich).
- Vertrauliche-Transfer-kompatible AMMs (Forschungsstadium).
- Breitere CPMM-Pro-Mint-Registry (Parität mit CLMM).
- Ein öffentlicher Lesepfad für die Registry, damit eine UI „nicht unterstützt” von „nicht unterstützt aber registriert” unterscheiden kann, ohne die PDA selbst abzuleiten.
Zeiger
algorithms/token-2022-transfer-fees— Gebühren-Mathematik in Swaps.products/cpmm/instructions—SwapV2,Initialize.products/clmm/instructions—SwapV2,CreatePool,CreateSupportMintAssociated.reference/error-codes—NotSupportMint-Numerische Codes pro Programm.
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— Pro-Mint-Registry-Anweisung.raydium-launchpad/programs/launchpad/src/instructions/initialize_with_token_2022.rs— LaunchLab-Token-2022-Base-Mint-Erstellung.raydium-launchpad/programs/launchpad/src/instructions/admin/create_config.rs— LaunchLab-Quote-Mint-Bindung (keine Erweiterungsprüfung).

