Skip to main content
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: Nur eine kleine Menge von Erweiterungen passiert standardmäßig; alles andere wird bei der Pool-Erstellung abgelehnt. Jedes Programm lässt einen einzelnen Mint durch einen Mechanismus zu — ein von Administratoren verwaltetes Pro-Mint-Registry-PDA. Beide Programme hatten auch an verschiedenen Stellen hardcodierte Bypässe; 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: Es gibt keine Swap-Zeit-Mint-Prüfung auf CPMM oder CLMM — das Gate wird nur bei der Pool-Erstellung aktiviert. Sobald ein Pool existiert, vertrauen Swaps darauf, dass sich die Mints nicht geändert haben, was für die unveränderlichen Teile des Token-2022-Mint-Status korrekt ist.

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-freeze_authority in der hardcodierten frozen_position_nft_authorities::IDS-Liste erscheint. Diese Liste ist das, was CLMMs frühere Superstate-Token-Erkennung ersetzt hat, und sie trägt die gleiche Emittenten-Autorität, die die alte Heuristik abgeglichen hat. Das Pool-PDA als Freeze-Autorität des Position-NFT-Mints zu setzen, ist selbst kein Einfrieren. Dies ist eine Position-Custody-Regel, keine Pool-Erstellungs-Allowlist:
  • Der Pool kann bereits existieren und bleibt swappbar.
  • Der Position-NFT-Mint verwendet das CLMM-Pool-PDA als seine eigene Freeze-Autorität; der zugrunde liegende Emittent kontrolliert nicht das Position-NFT.
  • OpenPositionV2 deckt klassische SPL-Position-NFTs über Token-2022-Pool-Assets ab. OpenPositionWithToken22Nft deckt Token-2022-Position-NFTs ab.
  • OpenPosition V1 inspiziert Vault-Mints nicht und kann nicht die Token-2022-eingeschränkten Assets bedienen, auf die die ausgelieferte Liste abzielt.
  • Bestehende Positionen bleiben unverändert.
Eingefrorene Positionen bleiben von ihrem Besitzer verwaltbar, können aber nicht übertragen werden. ClosePosition taut auf und brennt atomar, wenn der Client den Pool als erstes verbleibendes 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_2022 erreichbar, und das Programm wird nur MetadataPointer und (optional) TransferFeeConfig anhängen. Alles andere gibt NoSupportExtension zurück. Ein bereits vorhandener Token-2022-Mint kann überhaupt nicht als Base bereitgestellt werden. Wenn TransferFeeConfig angehängt ist, ist die transfer_fee_config_authority des Mints das Launch-Autorität-PDA bis zur Graduation, während seine withdraw_withheld_authority die konfigurierte transfer_fee_extension_auth der Plattform ab der Mint-Erstellung ist — das Launchpad-Programm selbst hat keine Withdraw-Withheld-Anweisung. Siehe products/launchlab/platform-config.
  • Quote-Mint — LaunchLab erstellt ihn nicht und screent ihn nicht. CreateConfig akzeptiert das Mint-Konto wie gegeben, daher gibt es kein is_supported_mint-Äquivalent auf der Quote-Seite. Das einzige Gate ist, welche Mints ein Admin an eine GlobalConfig bindet.
Das macht das Binden eines Token-2022-Quote-Mints zu einer hochvertrauenswürdigen Aktion, aus dem gleichen Grund wie das Registrieren eines Mints unten: Ein TransferHook-Quote-Mint würde seinen Hook bei jedem Kauf, Verkauf und Gebührenanspruch in jedem Pool ausführen, der darin zitiert wird, und ein PermanentDelegate-Quote-Mint würde dem Delegaten erlauben, diese Pools’ Quote-Vaults zu fegen. 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.
  • TransferFeeConfig auf der Quote-Seite wird in alle vier Trade-Anweisungen eingepreist, und die Slippage-Grenze wird gegen den Netto-Betrag des Zahlers statt gegen die Bruttobewegung des Vaults geprüft. Siehe products/launchlab/instructions.
  • PoolState.token_program_flag zeichnet 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. Siehe products/launchlab/accounts.
Die veraltete 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 irgendeine Erweiterung außer diesen fünf trägt: 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 Bypässe; 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 einem Registry-PDA passiert, und alles andere muss nur allowlist-Erweiterungen tragen.

Der einzige Bypass: das Pro-Mint-Registry

Beide Programme konsultieren ein SupportMintAssociated-PDA bei Seed [b"support_mint", mint]. Wenn dieses PDA für den Mint existiert, wird der Mint unabhängig von seinem Erweiterungssatz zugelassen. Jedes Programm hat seine eigene Kopie des 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 aufgelistet. 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 das 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 er erstellt), CLMM von CreatePool, CreateCustomizablePool und CreateCustomizablePoolV2.

Die entfernten Umgehungen

Beide hardcodierten Mechanismen sind aus den bereitgestellten Programmen entfernt. Sie werden hier nur dokumentiert, weil Integrationen, die gegen das ältere Verhalten geschrieben wurden, sie möglicherweise noch voraussetzen.

Statische MINT_WHITELIST — entfernt

Ein konstantes Array von Base58-Mint-Adressen, das is_supported_mint vor der Extension-Iteration kurzschließen sollte. CLMM enthielt sechs Adressen und wurde am 24.07.2026 gelöscht; CPMM enthielt die ersten vier derselben Menge und wurde im Upgrade vom 09.09.2026 gelöscht. Ein Pool, der bereits für einen dieser Mints existiert, bleibt handelbar — die Mint-Prüfung läuft nur bei der Pool-Erstellung. Das Erstellen eines neuen Pools für einen dieser Mints erfordert stattdessen eine Registry-PDA dafür.

Superstate-Autoritätsform-Erkennung — entfernt

CLMM identifizierte Superstates tokenisierte Assets kurzzeitig anhand ihrer Autoritätsform statt nach Adresse: Ein Token-2022-Mint, dessen freeze_authority und permanenter Delegat beide gleich superstate_allowlist::ID waren, mit DefaultAccountState auf Frozen gesetzt, wurde zugelassen. Es war eine Heuristik, daher wäre jeder zukünftige Mint mit derselben Form automatisch zugelassen worden. Sie wurde am 31.07.2026 zusammen mit dem superstate_allowlist-Modul gelöscht. Was sie 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 erfasste, ist der eine Eintrag in dieser Liste.

Was die Umgehungen nicht aufheben

Die Umgehungen überspringen die Extension-Allowlist, aber das Programm erzwingt weiterhin:
  • Der Mint wird entweder von Token oder Token-2022 besessen. Ein benutzerdefiniertes Token-Programm wird vorgelagert abgelehnt.
  • Die Pool-Vaults werden mit den richtigen ATA-Extensions für Token-2022-Pools erstellt (ImmutableOwner usw.).
  • Alle Transfers gehen durch transfer_checked — gebührentragende Mints landen den richtigen Betrag im Vault.
Ein whitelisteter oder PDA-registrierter Mint, der z. B. später einen 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 Aktion mit hohem Vertrauen.

Semantik von „Blocked”

Wenn is_supported_mint false zurückgibt, wird die Pool-Erstellung mit ErrorCode::NotSupportMint (CPMM) / ErrorCode::NotSupportMint (CLMM) rückgängig gemacht. Siehe reference/error-codes für die numerischen Codes. Bestehende Pools können diese Prüfung nicht rückwirkend fehlschlagen — das Gate läuft nur bei der Erstellung. Mint-Extensions sind unveränderlich für die Kategorien, die Raydium ablehnt (Transfer Hook, Non-Transferable, Confidential Transfer können nach der Erstellung nicht hinzugefügt werden), daher ist die statische Prüfung ausreichend.

Warum jede ausgeschlossene Extension 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 — Transfer schlägt immer fehl. Ein Pool kann keine Verwahrung übernehmen.
  • ConfidentialTransfer — Transfer-Beträge sind verschlüsselt; die Kurve kann den Swap nicht bewerten.
  • PermanentDelegate — ein Inhaber des Delegaten kann jedes Token-Konto, einschließlich des Pool-Vaults, leeren. Nur durch Registrierung des Mints zulässig, 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-Zustand landen und müssen pro Konto aufgetaut werden. Nur durch Registrierung des Mints zulässig, was voraussetzt, dass der Emittent institutionelle Konten bei der Registrierung auftaut.
  • Group/Member pointers — nicht aktiv schädlich, aber nicht überprüft. Standardmäßig nicht zulässig, um die Angriffsfläche klein zu halten.

Transfer-Gebühren-Buchhaltung

Für Mints mit TransferFeeConfig bewegt jeder Swap, jede Einzahlung und jede Auszahlung weniger als den nominalen 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 als fee zurück, zusammen mit amountIn, amountOut, minAmountOut, executionPrice, priceImpact und dem rohen swapResult.
  • Die Token-2022-Transfer-Gebühr kommt vom Mint, nicht vom Pool. Sie wird von den getTransferAmountFee-Helfern in @raydium-io/raydium-sdk-v2 berechnet, die ein GetTransferAmountFee zurückgeben:
Einzahlung und Auszahlung zeigen es direkt: computePairAmount gibt inputAmountFee und anotherAmount als GetTransferAmountFee-Werte zurück. Eine korrekte UI zeigt:
  • den Eingabebetrag plus seine Transfer-fee als „Sie senden”
  • den Ausgabebetrag minus seine Transfer-fee als „Sie erhalten”
  • die Pool-fee als separate Zeile — es ist nicht die Token-2022-Gebühr
Eine naive UI, die nur amountIn → amountOut zeigt, unterschätzt die Kosten. Übergeben Sie epochInfo vom Cluster an diese Helfer, anstatt sie zu cachen; die Epoche ist das, was zwischen der older und newer Fee-Config eines Mints wählt.

maximumFee-Obergrenze

Token-2022-Transfer-Gebühren sind pro Transfer begrenzt. Für einen 1%-Mint mit einer 10.000-Token-Obergrenze zahlt ein 100.000.000-Token-Transfer nur 10.000 an Gebühren. Das SDK’s computeSwapAmount wendet die Obergrenze an; direkte Programm-Aufrufer müssen sie replizieren.

Epoche-Übergang

Eine Mint-Autorität kann eine Gebührensatzänderung planen, die in der nächsten Epoche aktiviert wird. Während des Übergangsfensters leben zwei Configs (older, newer) gleichzeitig auf dem Mint und TransferChecked wählt nach aktueller Epoche. 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 Epoche im Voraus über die Trade API oder das SDK zitieren, kann die ausgeführte Gebühr von der zitierten Gebühr abweichen — begrenzt durch die maximum_fee_basis_points der älteren Config.

Zinstragende 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 dem Hauptbetrag:
Das SDK konvertiert automatisch. Direkte RPC-Leser sollten pool.token0Vault.amount als Hauptbetrag behandeln.

Definition von „Token-2022-Pool”

Ein Pool ist ein Token-2022-Pool, wenn entweder Mint programId == TokenzQdB... hat. Die API zeigt dies:
Verwenden Sie programId zum Dispatchen und hasTransferFee zum Anzeigen einer UI-Warnung.

SDK-Helfer

Häufige Integrationsfehler

  • Nur die Programm-ID vorab prüfen. Ein Mint kann Token-2022 und nicht unterstützt sein. Gehen Sie die Extension-Liste gegen die Allowlist durch und prüfen Sie auf die Registry-PDA des Mints, bevor Sie die Pool-Erstellung zulassen.
  • Dem SDK-Zitat vertrauen, wenn der Mint überhaupt nicht akzeptiert wird. Die Zitat-API weigert sich nicht zu zitieren — Pool-Erstellung ist das, was rückgängig gemacht wird. Bestätigen Sie die is_supported_mint-Semantik offline, bevor Sie die Pool-Erstellung in Ihrer UI verfügbar machen.
  • Zitieren ohne Transfer-Gebühren-Haarschnitt. Ein 1%-Transfer-Gebü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-Zitat oder Trade-API-Zitat — berechnen Sie die Gebühr niemals manuell nur aus der Gebühren-Stufe des Pools.
  • Aufrufen der Legacy-Swap-Anweisung auf einem Token-2022-Pool. Swap stammt aus der Zeit vor Token-2022. Verwenden Sie SwapV2, wenn entweder Mint Token-2022 ist.
  • Automatisches Auflisten neuer Token-2022-Mints. Wallets und Aggregatoren sollten auf TransferHook und NonTransferable prüfen, bevor sie einen Mint Benutzern anzeigen; beide sind Raydium-feindselig.

Zukünftige Arbeiten

Solana-Ökosystem- und Protokoll-Roadmap-Elemente, die diese Matrix ändern würden:
  • Allowlisted Transfer-Hook-Programme auf Solana-Ebene (Ökosystem-Konvention entwickelt sich).
  • Confidential-Transfer-kompatible AMMs (Forschungsphase).
  • 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.
Diese Seite wird aktualisiert, wenn etwas davon umgesetzt wird.

Verweise

Quellen:
  • 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 Extension-Prüfung).