> ## 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.

# SPL Token und Token-2022

> Die beiden Token-Standards, auf denen Raydium operiert — das Legacy-SPL-Token-Programm und das erweiterte Token-2022-Programm. Was beide sind, wie sie sich unterscheiden und welche Raydium-Produkte welche unterstützen.

<Info>
  **Diese Seite wurde mit KI automatisch übersetzt. Maßgeblich ist stets die englische Version.**

  [Englische Version ansehen →](/solana-fundamentals/spl-token-and-token-2022)
</Info>

<Info>
  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.
</Info>

## Die beiden Programme

|                               | SPL Token                                     | Token-2022                                    |
| ----------------------------- | --------------------------------------------- | --------------------------------------------- |
| Program ID                    | `TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA` | `TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb` |
| Gestartet                     | 2020                                          | 2022                                          |
| Account-Größe (Token-Account) | 165 B                                         | 165 B + Extensions (variabel)                 |
| Extensions                    | Nein                                          | Ja – 17+ offizielle Extensions                |
| Legacy-Kompatibilität         | Vollständig                                   | Opt-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.

```rust theme={null}
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](https://spl.solana.com/token-2022/extensions) für die vollständige Liste.

## Welche Raydium-Produkte unterstützen was

| Produkt   | SPL Token | Token-2022 | Hinweise                                                 |
| --------- | --------- | ---------- | -------------------------------------------------------- |
| AMM v4    | Ja        | Nein       | OpenBook-Integration erfordert SPL Token                 |
| CPMM      | Ja        | Ja         | Erfordert `SwapV2` für Token-2022-Pools                  |
| CLMM      | Ja        | Ja         | Erfordert `SwapV2` für Token-2022-Pools                  |
| Farm v6   | Ja        | Ja         | Unterstützt für Stake-Mint und Reward-Mints              |
| LaunchLab | Ja        | Ja         | Abgeschlossene 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.

```ts theme={null}
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:

```ts theme={null}
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:

| Anweisung                         | Unterstützte Mints             |
| --------------------------------- | ------------------------------ |
| `Swap` / `SwapBaseInput` (Legacy) | Nur SPL Token                  |
| `SwapV2` / `SwapBaseInputV2`      | Beide 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

```ts theme={null}
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`](/de/security/oracle-and-token-risks) für das vollständige Risikakeptanz-Framework.

## Zeiger

* [`solana-fundamentals/account-model`](/de/solana-fundamentals/account-model) – das allgemeine Account-Modell.
* [`reference/token-2022-support`](/de/reference/token-2022-support) – Token-2022-Spezifika für CPMM und CLMM.
* [`security/oracle-and-token-risks`](/de/security/oracle-and-token-risks) – Risiken von böswilligen Mint-Extensions.

Quellen:

* [SPL Token Docs](https://spl.solana.com/token).
* [Token-2022 Docs](https://spl.solana.com/token-2022) – vollständige Extension-Liste.
* [Associated Token Account](https://spl.solana.com/associated-token-account).
