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 →
Jedes handelbare Asset auf Solana – einschließlich aller Base- und Quote-Assets von Raydium-Pools – ist ein Token, der von einem der beiden Programme gemünzt wird: dem Legacy-SPL-Token-Programm oder seinem Nachfolger Token-2022. Sie sind separate Programme unter separaten Adressen mit unterschiedlichen Account-Layouts und Extension-Semantiken. Raydium unterstützt beide, aber nicht überall: CPMM, CLMM und Farm v6 akzeptieren Token-2022-Mints; AMM v4 nicht. Das Verständnis dieser Aufteilung ist wesentlich, bevor Sie sich mit einem Pool integrieren.

Die beiden Programme

SPL TokenToken-2022
Program IDTokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DATokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
Gestartet20202022
Account-Größe (Token-Account)165 B165 B + Extensions (variabel)
ExtensionsNeinJa – 17+ offizielle Extensions
Legacy-KompatibilitätVollständigOpt-in pro Mint
Beide werden vom Solana Labs-Team (jetzt Anza) gepflegt und befinden sich im solana-program-library-Repository.

Warum zwei Programme?

SPL Token wurde für Vorwärtskompatibilität eingefroren – sein Bytecode ist praktisch unveränderbar und dient als saubere Grundlage für das gesamte Ökosystem. Mit wachsenden Use Cases (Stablecoins, die Transfergebühren wünschen, institutionelle Mints, die nuancierte Freeze-Authorities benötigen, NFTs, die Metadata-Pointer brauchen), führte das Solana-Team Token-2022 als separates, erweiterbares Programm ein, anstatt SPL Token zu aktualisieren. Dies bewahrt bestehende Integrationen und ermöglicht es jedem Mint, genau die Extensions zu aktivieren, die er braucht. Token-2022 ist eine strenge Obergruppe in Funktionalität, nicht im Adressraum: die beiden Programme existieren nebeneinander, und ein Mint unter einer bestimmten Adresse gehört zu genau einem von ihnen.

Account-Struktur

Mint-Account

Definiert die Identität eines Tokens. SPL-Token-Mint (82 Bytes):
u32   mint_authority_option
Pubkey mint_authority
u64   supply
u8    decimals
bool  is_initialized
u32   freeze_authority_option
Pubkey freeze_authority
Token-2022-Mint: gleiches Basis-Layout, plus null oder mehr Extension-TLV-Datensätze (Type-Length-Value) nach der Basis.

Token-Account

Hält einen Saldo eines bestimmten Mints für einen bestimmten Owner. SPL-Token-Account (165 Bytes):
Pubkey mint
Pubkey owner
u64    amount
u32    delegate_option
Pubkey delegate
u8     state         // initialized, frozen
u32    is_native_option
u64    is_native
u64    delegated_amount
u32    close_authority_option
Pubkey close_authority
Token-2022-Account: gleiches Basis-Layout, plus Extension-TLV-Datensätze, falls Extensions aktiv sind.

Token-2022-Extensions

Extensions sind modulare Funktionen, die Mints oder Accounts angehängt werden können. Jede Extension ist ein separater TLV-Datensatz. Die wichtigsten für Raydium:

Transfer fee

Der Mint kann eine prozentuale Gebühr auf jeden Transfer erheben. Die Gebühr geht an eine konfigurierte Withdraw-Authority. Unterstützt von Raydium CPMM und CLMM über SwapV2 – das Programm berücksichtigt die Gebühr bei der Berechnung von Wechselkursen, sodass die Pool-Mathematik kohärent bleibt.
let extension = TransferFeeConfig {
    transfer_fee_config_authority,
    withdraw_withheld_authority,
    withheld_amount: 0,
    older_transfer_fee: ...,
    newer_transfer_fee: ...,
};

Transfer hook

Der Mint zeigt auf ein Programm, das die Runtime bei jedem Transfer aufruft. Das Hook-Programm kann den Transfer ablehnen oder Nebenwirkungen verursachen (einen Compliance-Status aktualisieren, protokollieren, usw.). Raydium CPMM/CLMM rufen den Hook über SwapV2 auf – die Transaction enthält das Hook-Programm und alle zusätzlichen Accounts, die es benötigt.

Interest-bearing

Der On-Chain-Saldo bringt Zinsen zu einer konfigurierten Rate. Nur zur Anzeige (Salden erscheinen im Laufe der Zeit höher) anstatt eines echten Mints; die zugrunde liegende Supply ist unverändert.

Mint close authority

Ermöglicht das Schließen des Mints, sobald die Supply null erreicht.

Permanent delegate

Ein bestimmtes Wallet kann Tokens von jedem Account bedingungslos transferieren oder verbrennen. Raydium blockiert die Pool-Erstellung für Mints mit dieser Extension – sie ist nicht kompatibel mit der Invariante, dass Pool-Reserves nicht beschlagnahmt werden können.

Non-transferable

Tokens können nicht vom Account bewegt werden, auf dem sie gemünzt werden. Raydium blockiert die Pool-Erstellung – ein nicht handelbares Asset kann nicht das Base oder Quote eines LP-Pools sein.

Default account state

Neue Token-Accounts für diesen Mint sind standardmäßig gefroren und müssen von der Freeze-Authority entsperrt werden. Einsatzbar, aber selten.

Confidential transfer

Balance und Transfer-Beträge sind verschlüsselt. Raydium unterstützt keine Confidential-Transfer-Mints (Pool-Mathematik erfordert Klartext-Balances).

Metadata pointer + token metadata

Ersetzt Metaplex-Metadaten für Token-2022-Mints. Unterstützt für Raydium-Pool-Listings.

Group / Member pointer

Erklärt einen Mint als Mitglied einer Gruppe (z. B. eine NFT-Collection). Nur informativ; Raydium nutzt dies für die Anzeige. Siehe die offizielle Token-2022-Extensions-Seite für die vollständige Liste.

Welche Raydium-Produkte unterstützen was

ProduktSPL TokenToken-2022Hinweise
AMM v4JaNeinOpenBook-Integration erfordert SPL Token
CPMMJaJaErfordert SwapV2 für Token-2022-Pools
CLMMJaJaErfordert SwapV2 für Token-2022-Pools
Farm v6JaJaUnterstützt für Stake-Mint und Reward-Mints
LaunchLabJaJaAbgeschlossene CPMM-Pools erben Token-2022-Unterstützung
Mint-Berechtigung für Raydium-Pools – alle Extensions erlaubt sofern nicht aufgeführt:
  • Blockiert: non-transferable, permanent delegate, confidential transfer, default account state (in abgelehnten Konfigurationen).
  • Erlaubt mit Bedingungen (LP muss Risiko akzeptieren): transfer fee, transfer hook, freeze authority aktiv.
  • Vollständig erlaubt: interest-bearing, metadata pointer, group pointer, mint close authority.
Die getPoolInfoFromRpc-Response enthält die Extension-Flags des Mints – Clients sollten vor dem Liquidity-Providing überprüfen.

Token-Account-Standards

Associated Token Account (ATA)

Beide Programme teilen die Associated Token Account-Konvention: ein PDA, der von [owner, programId, mint] über das Associated Token Program (ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL) abgeleitet wird. Nahezu jeder Benutzer-Token-Account auf Solana ist ein ATA.
import { getAssociatedTokenAddressSync } from "@solana/spl-token";

// SPL Token
const ata = getAssociatedTokenAddressSync(mint, owner);

// Token-2022
const ata22 = getAssociatedTokenAddressSync(
  mint,
  owner,
  false,               // allowOwnerOffCurve
  TOKEN_2022_PROGRAM_ID,
);
Das ATA-Programm erstellt Accounts, die von dem entsprechenden Token-Programm basierend darauf besessen werden, welches Programm den Mint besitzt.

Nicht-ATA-Token-Accounts

Ein Wallet kann mehrere Token-Accounts für einen einzelnen Mint haben; ATA ist nur die Konvention. Pool-Vaults sind beispielsweise keine ATAs – sie sind PDAs des Pool-Programms, die die Pool-Reserves halten.

Erkennung, welchem Programm ein Mint angehört

Jeder Mint-Account hat ein owner-Feld, das entweder auf SPL Token oder Token-2022 verweist:
const mintInfo = await connection.getAccountInfo(mintPubkey);
if (mintInfo.owner.equals(TOKEN_PROGRAM_ID)) {
  console.log("SPL Token mint");
} else if (mintInfo.owner.equals(TOKEN_2022_PROGRAM_ID)) {
  console.log("Token-2022 mint");
}
Das Raydium SDK behandelt diese Erkennung automatisch – getPoolInfoFromRpc gibt die entsprechende programId pro Token zurück, damit Clients korrekte ATAs konstruieren können.

Swap-Anweisungen nach Programm

Raydiums CPMM und CLMM haben jeweils zwei Swap-Anweisungen:
AnweisungUnterstützte Mints
Swap / SwapBaseInput (Legacy)Nur SPL Token
SwapV2 / SwapBaseInputV2Beide SPL Token und Token-2022
SwapV2 benötigt zusätzliche Accounts: Mint-Accounts für beide Seiten, das Token-Programm für jede Seite (da sie unterschiedlich sein können) und – für Transfer-Hook-Mints – das Hook-Programm und seine erforderlichen Accounts. Clients sollten SwapV2 immer verwenden, wenn mindestens eine Seite Token-2022 ist; SwapV2 funktioniert auch für SPL-only-Pools, aber das Legacy-Swap ist günstiger in Compute. Das SDK wählt die richtige Variante automatisch aus.

Migration eines SPL-Token-Projekts zu Token-2022

Token-2022 ist kein Drop-in-Replacement auf Mint-Ebene – ein Mint unter Adresse X ist entweder SPL oder Token-2022, und das ist bei der Erstellung festgelegt. Zum „Migrieren” müssen Sie:
  1. Einen neuen Mint unter Token-2022 mit den gewünschten Extensions erstellen.
  2. Einen Swap-/Wrap-Mechanismus für Inhaber des alten SPL-Mints bereitstellen, um gegen den neuen zu tauschen.
  3. Alle LP-Pools, Farms und Integrationen aktualisieren, um auf den neuen Mint zu verweisen.
Das ist aufwändig. Die meisten Projekte, die unter SPL gestartet wurden, bleiben unter SPL, es sei denn, ein spezifischer Extension-Bedarf erzwingt den Umzug.

Praktisches Beispiel: Erstellen eines Token-2022-Mints mit Transfer Fee

import {
  Connection, Keypair, SystemProgram, Transaction, sendAndConfirmTransaction,
} from "@solana/web3.js";
import {
  TOKEN_2022_PROGRAM_ID, ExtensionType, createInitializeMintInstruction,
  getMintLen, createInitializeTransferFeeConfigInstruction,
} from "@solana/spl-token";

const connection = new Connection("https://api.mainnet-beta.solana.com");
const payer      = Keypair.generate();
const mint       = Keypair.generate();

const extensions    = [ExtensionType.TransferFeeConfig];
const mintLen       = getMintLen(extensions);
const rentLamports  = await connection.getMinimumBalanceForRentExemption(mintLen);

const tx = new Transaction().add(
  SystemProgram.createAccount({
    fromPubkey:       payer.publicKey,
    newAccountPubkey: mint.publicKey,
    space:            mintLen,
    lamports:         rentLamports,
    programId:        TOKEN_2022_PROGRAM_ID,
  }),
  createInitializeTransferFeeConfigInstruction(
    mint.publicKey,
    payer.publicKey,                  // transfer fee authority
    payer.publicKey,                  // withdraw-withheld authority
    50,                               // 50 bps = 0.5%
    BigInt(1_000_000),                // max fee per transfer (smallest units)
    TOKEN_2022_PROGRAM_ID,
  ),
  createInitializeMintInstruction(
    mint.publicKey,
    9,                                // decimals
    payer.publicKey,                  // mint authority
    null,                             // freeze authority
    TOKEN_2022_PROGRAM_ID,
  ),
);

await sendAndConfirmTransaction(connection, tx, [payer, mint]);
Dieser Mint kann in einen Raydium-CPMM-Pool aufgenommen werden; Swapper zahlen die 0,5%-Transfergebühr zusätzlich zur Swap-Gebühr des Pools.

Sicherheitsüberlegungen

Bevor Sie Liquidität in oder durch einen Token-2022-Mint tauschen:
  • Überprüfen Sie freeze_authority. Falls nicht null und von einer zentralisierten Partei gehalten, können sie Ihren ATA (und möglicherweise den Pool-Vault) einfrieren.
  • Überprüfen Sie transfer_hook. Das Hook-Programm kann Transfers willkürlich blockieren – DYOR über die Hook-Quelle.
  • Überprüfen Sie transfer_fee. Berücksichtigen Sie die Gebühr in der erwarteten Swap-Ausgabe.
  • Überprüfen Sie permanent_delegate und non_transferable. Raydiums Programm lehnt diese ab, aber überprüfen Sie dies, wenn Sie eine benutzerdefinierte Integration erstellen.
Siehe security/oracle-and-token-risks für das vollständige Risikakeptanz-Framework.

Zeiger

Quellen: