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 laufen im strikten Allow-List-Modus: Nur eine kleine Menge von Erweiterungen wird standardmäßig akzeptiert; alles andere wird bei der Pool-Erstellung abgelehnt. Eine Handvoll vertrauenswürdiger Mints werden durch hardcodierte Adressen zugelassen; CLMM unterstützt zusätzlich eine von Administratoren verwaltete Pro-Mint-Registry und eine Laufzeit-Superstate-Token-Erkennung. Diese Seite ist die zentrale Referenz für das, was durchgesetzt wird und wo, mit Datei- und Zeilenzitaten aus dem 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 ein Vault-Mint die aktuelle freeze_authority hat, die der hardcodierten Liste eingeschränkter Emittenten entspricht. Die ursprüngliche Liste enthält die gleiche Authority, die vom Superstate-Erkennungspfad unten verwendet wird. Das Setzen der Pool-PDA als Freeze-Authority des Position-NFT-Mints ist selbst kein Einfrieren. Dies ist eine Position-Custody-Regel, keine weitere Pool-Erstellungs-Allow-List:
  • Der Pool kann bereits existieren und bleibt swappbar.
  • Der Position-NFT-Mint verwendet die CLMM-Pool-PDA als seine eigene Freeze-Authority; der zugrunde liegende Emittent kontrolliert den Position-NFT nicht.
  • 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 die Launch-Authority-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 hochgradig vertrauenswürdigen Aktion, mit der gleichen Begründung wie die CPMM- und CLMM-statischen Whitelists unten: Ein TransferHook-Quote-Mint würde seinen Hook bei jedem Kauf, Verkauf und Fee-Claim in jedem Pool ausführen, der darin zitiert wird, und ein PermanentDelegate-Quote-Mint würde dem Delegate ermöglichen, diese Pools’ Quote-Vaults 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.
  • 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 statischen Whitelist-Shortcuts (unten behandelt) 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 nicht in dieser Liste — 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:190–200

Bypass-Pfade

Ein Token-2022-Mint, der nicht in die Allow-List passt, kann immer noch durch einen von drei expliziten Bypasses zugelassen werden. Sie werden der Reihe nach versucht, bevor die Erweiterungsiteration ausgeführt wird.

1. Statische Mint-Whitelist

Ein konstantes MINT_WHITELIST-Array von Base58-Strings ist in jedem Programm hardcodiert. Wenn die Adresse des Mints übereinstimmt, gibt die Funktion sofort true zurück und es wird keine Erweiterungsprüfung durchgeführt. Diese Adressen sind in das Programm eingebacken; das Aktualisieren der Liste erfordert ein Programm-Upgrade über das 3/4-Upgrade-Multisig.

2. Pro-Mint-Registry — nur CLMM

CLMM konsultiert zusätzlich eine SupportMintAssociated-PDA mit Seed [b"support_mint", mint]. Wenn diese PDA für den Mint existiert, wird er unabhängig von seinem Erweiterungssatz zugelassen. Die PDA wird von CreateSupportMintAssociated (admin/create_support_mint_associated.rs) erstellt. Die Anweisung ist auf zwei Unterzeichner begrenzt:
  • crate::admin::ID — die Standard-Raydium-Admin-Authority.
  • crate::create_support_mint_associated_owner::ID — eine dedizierte Authority für diesen Zweck: RayVyjyJQz9vAi126A4sGexKnSU1XeZaHTRcM1mZMPY (Mainnet), rayf3nEbb3bnfN6RDGFpqPbjc5uUa3tRUzu6UVYrRx5 (Devnet).
Effekt: Das CLMM-Team kann einen bestimmten Token-2022-Mint für die Pool-Erstellung aktivieren, ohne ein Programm-Upgrade durchzuführen. CPMM hat kein Äquivalent — seine Allow-List ist streng quellcodiert.

3. Superstate-Erkennung — nur CLMM

CLMM hat einen dritten Pfad speziell für Superstates tokenisierte Assets, die die ScaledUiConfig-Erweiterung verwenden, die die Version von spl-token-2022, die in das CLMM-Programm verlinkt ist, nicht entpacken kann. Anstatt die Abhängigkeit zu aktualisieren, erkennt CLMM Superstate-Tokens an ihrer Authority-Form:
raydium-clmm/programs/amm/src/util/token.rs:485 Ein Mint besteht diesen Branch, wenn alle vier zutreffen:
  • Sein besitzendes Programm ist das Token-2022-Programm.
  • Seine Freeze-Authority entspricht superstate_allowlist::ID. Siehe reference/program-addresses für die Mainnet-Beta- und Devnet-Werte.
  • Seine DefaultAccountState-Erweiterung ist auf Frozen gesetzt.
  • Sein permanenter Delegate ist auch superstate_allowlist::ID.
Dies ist eine Heuristik, keine Registry — jeder zukünftige Mint, den Superstate mit der gleichen Authority-Form ausgibt, wird automatisch zugelassen.

Was die Bypasses nicht verzeihen

Die Bypasses überspringen die Erweiterungs-Allow-List, aber das Programm erzwingt immer noch:
  • Der Mint wird von entweder Token oder Token-2022 besessen. Ein benutzerdefiniertes Token-Programm wird vorgelagert abgelehnt.
  • Die Pool-Vaults werden mit den richtigen ATA-Erweiterungen 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. Whitelisting ist daher eine hochgradig vertrauenswürdige Aktion.

„Blocked”-Semantik

Wenn is_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, Non-Transferable, Confidential-Transfer 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-Allow-Lists; Raydium nicht.
  • NonTransferableTransfer schlägt immer fehl. Ein Pool kann keine Custody übernehmen.
  • ConfidentialTransfer — Transfer-Beträge sind verschlüsselt; die Kurve kann den Swap nicht bewerten.
  • PermanentDelegate — ein Inhaber des Delegates kann jedes Token-Konto leeren, einschließlich des Pool-Vaults. Nur über die statische Whitelist für vertrauenswürdige Emittenten zulässig (z. B. regulierte Stablecoins).
  • 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 über Superstate-Erkennung zulässig, die 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.

Transfer-Gebühren-Buchhaltung

Für Mints mit TransferFeeConfig bewegt jeder Swap, jede Einzahlung und jede Auszahlung weniger als den nominalen Betrag. Das SDK zeigt beide Hälften der Berechnung:
Eine korrekte UI zeigt:
  • amountIn + token2022FeeIn als „Sie senden”
  • amountOut - token2022FeeOut als „Sie erhalten”
  • feeAmount als die Pool-Gebühr (LP + Protokoll), die von der Token-2022-Transfer-Gebühr getrennt ist
Eine naive UI, die nur amountIn → amountOut zeigt, unterschätzt die Kosten.

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ühr. Das computeSwapAmount des SDK wendet die Obergrenze an; direkte Programm-Aufrufer müssen sie replizieren.

Epoch-Übergang

Eine Mint-Authority 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 aktuellem 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 über die Trade-API oder das SDK mehr als eine Epoch im Voraus 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 dem Hauptbetrag:
Das SDK konvertiert automatisch. Direkte RPC-Leser sollten pool.token0Vault.amount als Hauptbetrag behandeln.

„Token-2022-Pool”-Definition

Ein Pool ist ein Token-2022-Pool, wenn einer der Mints 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-flighting. Ein Mint kann Token-2022 und nicht unterstützt sein. Gehen Sie die Erweiterungsliste gegen die Allow-List (und die statische Whitelist) durch, bevor Sie die Pool-Erstellung zulassen.
  • Das SDK-Zitat vertrauen, wenn der Mint überhaupt nicht akzeptiert wird. Die Zitat-API weigert sich nicht zu zitieren — Pool-Erstellung ist das, was zurückgerollt wird. Bestätigen Sie die is_supported_mint-Semantik offline, bevor Sie die Pool-Erstellung in Ihrer UI verfügbar machen.
  • Zitieren ohne den 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.
  • Die Legacy-Swap-Anweisung auf einem Token-2022-Pool aufrufen. Swap stammt aus der Zeit vor Token-2022. Verwenden Sie SwapV2, wenn einer der Mints 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 Arbeit

Solana-Ökosystem- und Protokoll-Roadmap-Elemente, die diese Matrix ändern würden:
  • Allow-listed Transfer-Hook-Programme auf Solana-Ebene (Ökosystem-Konvention entwickelt sich).
  • Confidential-Transfer-kompatible AMMs (Forschungsphase).
  • Breitere CPMM-Pro-Mint-Registry (Parität mit CLMM).
  • Abhängigkeits-Upgrade, damit die ScaledUiConfig-Dekodierung von CLMM ohne die Superstate-Heuristik funktioniert.
Diese Seite wird aktualisiert, wenn einer davon landet.

Zeiger

Quellen:
  • raydium-cp-swap/programs/cp-swap/src/utils/token.rsMINT_WHITELIST, is_supported_mint.
  • raydium-clmm/programs/amm/src/util/token.rsMINT_WHITELIST, superstate_allowlist, is_superstate_token, is_supported_mint.
  • 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).