Zum Hauptinhalt springen

Documentation Index

Fetch the complete documentation index at: https://docs.raydium.io/llms.txt

Use this file to discover all available pages before exploring further.

Diese Seite wurde mit KI automatisch übersetzt. Maßgeblich ist stets die englische Version.Englische Version ansehen →
Raydium akzeptiert keine beliebigen Token-2022-Mints. CPMM und CLMM verwenden beide einen strikten Allowlist-Modus: Nur eine kleine Gruppe von Erweiterungen wird standardmäßig zugelassen; alles andere wird bei der Poolerstellung abgelehnt. Eine Handvoll vertrauenswürdiger Mints werden über hardcodierte Adressen zugelassen; CLMM unterstützt zusätzlich eine von Administratoren verwaltete Pro-Mint-Registry und eine Superstate-Token-Erkennung zur Laufzeit. Diese Seite ist das Nachschlagewerk für das, was durchgesetzt wird und wo, mit Quellcode-Zitaten.

Unterstützung auf Programmebene

ProgrammToken-2022 Base/Quote Mints?Modus
CPMMJa – kontrolliertStrikte Erweiterungs-Allowlist + 4-Mint-Whitelist.
CLMMJa – kontrolliertStrikte Erweiterungs-Allowlist + 6-Mint-Whitelist + Admin-Registry + Superstate-Erkennung.
AMM v4NeinProgramm existiert vor Token-2022; beide Mints müssen klassisches SPL Token sein.
Stable AMMNeinGleiche Einschränkungen wie AMM v4.
Farm v6Ja, teilweiseDer Reward-Mint kann Token-2022 sein (unterliegt der gleichen Allowlist, wenn eine Farm ein CPMM/CLMM LP umschließt); Benutzer-Stake-LP-Mints erben vom umschlossenen Pool.
LaunchLabJa, programmverwaltetDer Base-Mint kann Token-2022 sein, aber nur über die dedizierte initialize_with_token_2022-Instruktion; das Programm erstellt den Mint selbst mit MetadataPointer (immer) und optional TransferFeeConfig (Rate ≤ 5 %). Bereits bestehende Token-2022-Mints mit beliebigen Erweiterungen können nicht als Base verwendet werden.
Burn & EarnSpiegelt Pool-ProgrammErbt CPMM/CLMM-Kontrolle.
Die Allowlist-Prüfungen befinden sich in: Es gibt keine Swap-Zeit-Mint-Prüfung auf CPMM oder CLMM – die Kontrolle greift nur bei der Poolerstellung. 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.

CPMM- und CLMM-Erweiterungs-Allowlist

Nach den Kurz-Umgehungen der statischen Whitelist (siehe unten) durchläuft das Programm die Erweiterungen des Mints und lehnt den Mint ab, falls er eine beliebige Erweiterung trägt, die nicht in diesen fünf ist:
ErweiterungGrund für die Zulassung
TransferFeeConfigDie Pool-Mathematik subtrahiert die eingehende Gebühr; das Token-2022-Programm handhabt die ausgehende Gebühr. Siehe algorithms/token-2022-transfer-fees.
MetadataPointerDekorativ – verweist auf On-Chain-Metadaten.
TokenMetadataDekorativ – Inline-Metadaten.
InterestBearingConfigDer Pool sieht den Kapitalbetrag; der UI-Multiplikator ist nur ein Dekorator und der zugrunde liegende Saldo bleibt erhalten.
ScaledUiAmountGleiche Form wie Zinssteigerung – der Skalierungsfaktor gilt nur für die UI-Anzeige.
Alles, das nicht in dieser Liste ist – TransferHook, NonTransferable, ConfidentialTransferMint, PermanentDelegate, MintCloseAuthority, DefaultAccountState, GroupPointer, GroupMemberPointer, MemberPointer, Pausable usw. – führt dazu, dass is_supported_mint false zurückgibt und die Poolerstellung revertiert. Die relevanten Zeilen (CPMM, identische Form in CLMM):
for e in extensions {
    if e != ExtensionType::TransferFeeConfig
        && e != ExtensionType::MetadataPointer
        && e != ExtensionType::TokenMetadata
        && e != ExtensionType::InterestBearingConfig
        && e != ExtensionType::ScaledUiAmount
    {
        return Ok(false);
    }
}
Ok(true)
cp-swap/src/utils/token.rs:190–200

Umgehungswege

Ein Token-2022-Mint, der nicht in die Allowlist passt, kann immer noch über einen von drei expliziten Umgehungswegen 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.
ProgrammWhitelist-Mints
CPMMHVbpJAQGNpkgBaYBZQBR1t7yFdvaYVp2vCQQfKKEN4tM, Crn4x1Y2HUKko7ox2EZMT6N2t2ZyH7eKtwkBGVnhEq1g, FrBfWJ4qE5sCzKm3k3JaAtqZcXUh4LvJygDeketsrsH4, 2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo
CLMMDie gleichen vier, plus DAUcJBg4jSpVoEzASxYzdqHMUN8vuTpQyG2TvDcCHfZg, AUSD1jCcCyPLybk1YnvPWsHQSrZ46dxwoMniN4N2UEB9
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]. Falls diese PDA für den Mint existiert, wird er unabhängig vom Erweiterungs-Set zugelassen. Die PDA wird von CreateSupportMintAssociated (admin/create_support_mint_associated.rs) erstellt. Die Instruktion ist auf zwei Unterzeichner beschränkt:
  • crate::admin::ID – die Standard-Raydium-Admin-Autorität.
  • crate::create_support_mint_associated_owner::ID – eine dedizierte Autorität für diesen Zweck: RayVyjyJQz9vAi126A4sGexKnSU1XeZaHTRcM1mZMPY (Mainnet), rayf3nEbb3bnfN6RDGFpqPbjc5uUa3tRUzu6UVYrRx5 (Devnet).
Effekt: Das CLMM-Team kann einen bestimmten Token-2022-Mint zur Poolerstellung opt-in, ohne ein Programm-Upgrade durchzuführen. CPMM hat kein Äquivalent – seine Allowlist ist streng im Quellcode festgelegt.

3. Superstate-Erkennung – nur CLMM

CLMM hat einen dritten Weg speziell für Superstate-Vermögenswerte, 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-Token anhand ihrer Autorität-Form:
superstate_allowlist::ID == freeze_authority
    && *mint_account_info.owner == spl_token_2022::ID
    && default_account_state_freeze
    && maybe_permanent_delegate
raydium-clmm/programs/amm/src/util/token.rs:485 Ein Mint besteht diesen Prüfungszweig, wenn alle vier erfüllt sind:
  • Das verwaltende Programm ist das Token-2022-Programm.
  • Seine Freeze-Autorität entspricht superstate_allowlist::ID. Mainnet: 2Yq4T3mPNfjtEyTxSbRjRKqLf1pwbTasuCQrWe6QpM7x. Devnet: 3TRuL3MFvzHaUfQAb6EsSAbQhWdhmYrKxEiViVkdQfXu.
  • Seine DefaultAccountState-Erweiterung ist auf Frozen gesetzt.
  • Sein Permanent-Delegate ist auch superstate_allowlist::ID.
Dies ist eine Heuristik, keine Registry – jeder zukünftige Mint, den Superstate mit der gleichen Autorität-Form ausstellt, wird automatisch zugelassen.

Was die Umgehungswege nicht umgehen

Die Umgehungswege überspringen die Erweiterungs-Allowlist, aber das Programm erzwingt immer noch:
  • Der Mint wird von Token oder Token-2022 verwichtet. 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 im Vault mit der richtigen Menge.
Ein whitelist-oder PDA-registrierter Mint, der später beispielsweise 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 unterbrechen. Die Whitelist-Erstellung ist daher eine Aktion mit hohem Vertrauensfaktor.

„Blocked”-Semantik

Wenn is_supported_mint false zurückgibt, revertiert die Poolerstellung mit ErrorCode::NotSupportMint (CPMM) / ErrorCode::NotSupportMint (CLMM). Siehe reference/error-codes für die numerischen Codes. Bestehende Pools können diese Prüfung nicht rückwirkend fehlschlagen – die Kontrolle läuft nur bei der Erstellung. Mint-Erweiterungen sind unveränderlich für die Kategorien, die Raydium ablehnt (Transfer-Hook, Nicht-Übertragbar, Vertrauliche Übertragung können nicht nach der Erstellung 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 beliebiger CU-Verbrauch, beliebigen Fehlerbedingungen und der Fähigkeit, das aufrufende Programm erneut einzutreten. Es existiert keine sichere Sandbox. Einige DEXes führen Hook-Allowlisten; Raydium nicht.
  • NonTransferableTransfer schlägt immer fehl. Ein Pool kann keine Verwahrung übernehmen.
  • ConfidentialTransfer – Übertragsbeträge sind verschlüsselt; die Kurve kann den Swap nicht preisen.
  • PermanentDelegate – ein Inhaber des Delegates kann ein beliebiges Token-Konto, einschließlich des Pool-Vaults, leeren. 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 in Frozen-Status landen und erforderten Entsperrung pro Konto. Nur über Superstate-Erkennung zulässig, die davon ausgeht, dass der Emittent institutionelle Konten bei der Registrierung entsperrt.
  • Group/Member-Pointer – nicht aktiv schädlich, aber nicht überprüft. Standardmäßig nicht zulässig, um die Oberfläche eng zu halten.

Transfergebühren-Buchhaltung

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

maximumFee-Obergrenze

Token-2022-Transfergebühren sind pro Transfer begrenzt. Für einen 1-%-Mint mit einer 10.000-Token-Obergrenze zahlt eine 100.000.000-Token-Übertragung nur 10.000 an Gebühr. Das computeSwapAmount des SDK 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 Konfigurationen (older, newer) gleichzeitig auf dem Mint und TransferChecked wählt nach aktueller Epoch. CPMM SwapV2 und CLMM SwapV2 übergeben beide das vollständige Mint-Konto in accounts, daher liest das Programm die richtige Konfiguration ohne ein zusätzliches Lookup. Wenn Sie mehr als eine Epoch im Voraus über die Trade API oder das SDK notieren, kann die ausgeführte Gebühr von der zitierten Gebühr abweichen – begrenzt durch den maximum_fee_basis_points der älteren Konfiguration.

Zinsberechnung und ScaledUiAmount

Der Pool hält den Kapitalbetrag; der „UI-Betrag” ist der Kapitalbetrag multipliziert mit einem zeitabhängigen oder von Admin gesetzten Skalierungsfaktor. Die Swap-Mathematik operiert auf dem Kapital:
principal_in = ui_amount_in / ui_multiplier(now)
Das SDK konvertiert automatisch. Direkte RPC-Leser sollten pool.token0Vault.amount als Kapital behandeln.

Definition von „Token-2022-Pool”

Ein Pool ist ein Token-2022-Pool, falls ein beliebiger Mint programId == TokenzQdB... hat. Die API zeigt dies:
GET /pools/info/ids?ids=<POOL_ID>
{
  "data": [{
    "mintA": { "programId": "TokenzQdB...", "hasTransferFee": true, ... },
    "mintB": { "programId": "Tokenkeg...", ... }
  }]
}
Verwenden Sie programId zum Dispatcher und hasTransferFee, um eine UI-Warnung anzuzeigen.

SDK-Helfer

import { Raydium, TOKEN_2022_PROGRAM_ID } from "@raydium-io/raydium-sdk-v2";
import { ExtensionType, getExtensionTypes, unpackMint } from "@solana/spl-token";

const raydium = await Raydium.load({ owner, connection });

const acct = await connection.getAccountInfo(mintPubkey);
if (!acct) throw new Error("mint not found");
const mint = unpackMint(mintPubkey, acct, acct.owner);

if (acct.owner.equals(TOKEN_2022_PROGRAM_ID)) {
  const extensions = getExtensionTypes(mint.tlvData);
  const accepted = new Set([
    ExtensionType.TransferFeeConfig,
    ExtensionType.MetadataPointer,
    ExtensionType.TokenMetadata,
    ExtensionType.InterestBearingConfig,
    ExtensionType.ScaledUiAmount,
  ]);
  const rejecting = extensions.filter(e => !accepted.has(e));
  if (rejecting.length) {
    console.warn("Pool creation will revert unless this mint is whitelisted:", rejecting);
  }
}

Häufige Integrationsfehler

  • Nur die Programm-ID vorüberprüfen. Ein Mint kann Token-2022 sein und nicht unterstützt werden. Gehen Sie die Erweiterungsliste gegen die Allowlist (und die statische Whitelist) durch, bevor Sie die Poolerstellung zulassen.
  • Das SDK-Angebot vertrauen, wenn der Mint überhaupt nicht akzeptiert wird. Die Angebots-API weigert sich nicht anzubieten – die Poolerstellung ist das, was revertiert. Bestätigen Sie die is_supported_mint-Semantik offline, bevor Sie die Poolerstellung in Ihrer UI verfügbar machen.
  • Angebot ohne Transfergebühren-Haarschnitt. Ein 1-%-Transfergebü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-Angebot oder Trade API-Angebot – berechnen Sie die Gebühr niemals manuell allein aus der Pool-Gebührenebene.
  • Die Legacy-Swap-Instruktion auf einem Token-2022-Pool aufrufen. Swap stammt vor Token-2022. Verwenden Sie SwapV2, wann immer ein 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 zeigen; beide sind Raydium-feindselig.

Zukünftige Arbeiten

Solana-Ökosystem- und Protokoll-Roadmap-Punkte, die diese Matrix ändern würden:
  • Allow-listete Transfer-Hook-Programme auf Solana-Ebene (Ökosystem-Konvention entwickelt sich).
  • Vertrauliche-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 implementiert wird.

Verweise

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-Instruktion.
  • raydium-launchpad/programs/launchpad/src/instructions/initialize_with_token_2022.rs – LaunchLab Token-2022-Base-Mint-Erstellung.