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

# TypeScript SDK

> @raydium-io/raydium-sdk-v2 – Installation, die vier Modulfassaden, Transaktionserstellung und typische Anfängerfehler.

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

  [Englische Version ansehen →](/sdk-api/typescript-sdk)
</Info>

<Info>
  **Versionsbanner.** Diese Seite dokumentiert `@raydium-io/raydium-sdk-v2@0.2.42-alpha`, die Version, die für alle Code-Beispiele dieser Website überprüft wurde (2026-04). Das SDK ist noch nicht 1.0, und die Typ-Oberfläche hat sich zwischen Versionen verändert – fixieren Sie Ihre Version.
</Info>

## Installation

```bash theme={null}
npm install @raydium-io/raydium-sdk-v2 @solana/web3.js @solana/spl-token
# oder
pnpm add @raydium-io/raydium-sdk-v2 @solana/web3.js @solana/spl-token
```

Das SDK ist in TypeScript geschrieben und wird mit `.d.ts` neben dem JS-Artefakt ausgeliefert. Minimale Toolchain: Node 18+, TypeScript 5.0+, `moduleResolution: "bundler"` oder `"node16"`.

## Initialisierung

Der Einstiegspunkt ist `Raydium.load`:

```ts theme={null}
import { Raydium } from "@raydium-io/raydium-sdk-v2";
import { Connection, Keypair, clusterApiUrl } from "@solana/web3.js";

const connection = new Connection(process.env.RPC_URL ?? clusterApiUrl("mainnet-beta"));
const owner      = Keypair.fromSecretKey(/* ... */);

const raydium = await Raydium.load({
  owner,
  connection,
  cluster: "mainnet",           // "mainnet" | "devnet"
  disableFeatureCheck: true,    // skip the SDK's startup feature-detect API call
  blockhashCommitment: "confirmed",
});
```

`Raydium.load` ist async, weil beim Start eine kleine `/config`-Payload von `api-v3.raydium.io` abgerufen wird (mit aktuellen `AmmConfig`-Konten, Gebührensätzen usw.). Setzen Sie `disableFeatureCheck: true` in Offline-Umgebungen; Sie müssen diese Werte dann manuell an einige Builder übergeben.

## Die vier Modulfassaden

Nach dem Laden zeigt das `raydium`-Objekt vier Modulfassaden, eine pro Produktoberfläche:

```ts theme={null}
raydium.cpmm       // CPMM-Pools: createPool, addLiquidity, withdrawLiquidity, swap, ...
raydium.clmm       // CLMM-Pools: createPool, openPositionFromBase, increasePositionFromBase,
                   //             decreaseLiquidity, harvestAllRewards, swap, ...
raydium.liquidity  // AMM v4-Pools: computeAmountOut, swap, addLiquidity, removeLiquidity, ...
raydium.farm       // Farm v3/v5/v6: deposit, withdraw, harvestAllRewards, create, setRewards
raydium.launchpad  // LaunchLab: createLaunchpad, buyExactIn, sellExactIn, graduate, ...
raydium.trade      // Multi-Pool-Routing: quotes, route-execution (Beta in 0.2.41)
raydium.token      // Helfer: Token-Liste abrufen, Metadaten, ATA-Erstellung
```

(Ja, insgesamt fünf Fassaden — „vier" ist die Art, wie Raydium sie öffentlich gruppiert, wobei `trade` und `token` als unterstützende Dienstprogramme fungieren.)

## Transaktions-Builder

Jede mutierende Funktion gibt einen Builder zurück, anstatt sofort auszuführen:

```ts theme={null}
const { execute, builder, transaction, innerTransactions, extInfo } =
  await raydium.cpmm.addLiquidity({
    poolInfo,
    amountInA,
    amountInB,
    slippage: 0.005,
    txVersion: TxVersion.V0,
  });
```

Zurückgegebene Felder:

* **`execute`** — eine Komfortfunktion, die signiert und sendet. Äquivalent zu `builder.execute`.
* **`builder`** — die `TxBuilder`-Instanz mit allen angesammelten Anweisungen und Unterzeichnern. Rufen Sie `.build()` auf, um ein `VersionedTransaction[]` zu erhalten; nützlich, wenn Sie Ihre eigenen Anweisungen einfügen oder mit externen Unterzeichnern signieren müssen.
* **`transaction` / `innerTransactions`** — die rohen Anweisungs-Arrays. Verwenden Sie diese beim Erstellen zusammengesetzter Multi-Program-Transaktionen.
* **`extInfo`** — produktspezifische Extras. Zum Beispiel gibt `createPool` `extInfo.poolId` zurück; `createLaunchpad` gibt die neue Launch-Status-PDA zurück.

`txVersion` steuert Legacy- vs. V0-Transaktionsformat. V0 (Address Lookup Tables) ist die Standard-Empfehlung – es ermöglicht größere Swaps in einer einzelnen Transaktion.

### Warum asynchrone Builder?

Fast jeder Builder ruft intern On-Chain-Status ab: Pool-Infos (für Quotes), Token-Programm-Besitz (für Token-2022 vs. SPL-Routing), Konto-Mietbefreiung (für ATA-Erstellung) usw. Das SDK zwischenspeichert aggressiv, aber der erste Aufruf für einen neuen Pool beinhaltet RPC-Roundtrips. Halten Sie eine lang lebende `raydium`-Instanz, um erneutes Abrufen zu vermeiden.

## CLMM-Moduls-Erweiterungen (neueste Version)

Die CLMM-Fassade erhielt Oberflächen für die neuen dynamischen Gebühren-, einseitigen Gebühren- und Limit-Order-Funktionen:

* **`raydium.clmm.createCustomizablePool`** — Obermenge von `createPool`, die `collectFeeOn`, `enableDynamicFee` und `dynamicFeeConfigId` akzeptiert. Verwenden Sie dies für alle neuen Pools, die die neuen Schalter benötigen; das klassische `createPool` funktioniert weiterhin für Pools mit Standardgebühren.
* **`raydium.clmm.openLimitOrder`** — öffnet eine Limit-Order mit einzelnem Tick auf einem Pool, der diese unterstützt. Nimmt `poolInfo`, `poolKeys`, `limitOrderConfig` (von `/main/clmm-limit-order-config`), `inputMint`, `inputAmount` und den Ziel-`tick`.
* **`raydium.clmm.increaseLimitOrder` / `decreaseLimitOrder`** — passt den unfüllten Teil einer bestehenden Order an. Das Verringern bricht bei einer vollständig gefüllten Order mit `InvalidOrderPhase` ab.
* **`raydium.clmm.settleLimitOrder` / `settleAllLimitOrder`** — wischt gefüllte Ausgabe zur ATA des Eigentümers. Entweder der Besitzer der Order oder der `limit_order_admin`-Keeper des Pools können diese aufrufen.
* **`raydium.clmm.closeLimitOrder` / `closeAllLimitOrder`** — schließt vollständig eingezogene Orders, um Miete zurückzubekommen.
* **`raydium.api.getClmmDynamicConfigs()` / `getClmmLimitOrderConfigs()`** — REST-Helfer, die die neuen Endpunkte `/main/clmm-dynamic-config` und `/main/clmm-limit-order-config` aufrufen.

Eine kleine Umorganisation verlagerte auch `utils/` nach `libraries/`. Code, der von `@raydium-io/raydium-sdk-v2/utils/...` importiert, sollte zu `@raydium-io/raydium-sdk-v2/libraries/...` wechseln. Das Top-Level-Paket-Barrel ist unverändert, daher sehen die meisten Benutzer die Umbenennung nie.

Umfassende TypeScript-Walkthroughs sind unter [`products/clmm/code-demos`](/de/products/clmm/code-demos) verfügbar.

## Häufige Anfängerfehler

### 1. Cluster-Mismatch

Die Startup-Konfiguration des SDK ist clusterspezifisch. Das Mischen von `cluster: "mainnet"` mit einer Devnet-`Connection` führt zu stillschweigendem Fehlrouting: Das SDK quoted gegen Mainnet-`AmmConfig`, sendet aber zu Devnet. Übergeben Sie immer beides.

### 2. Vergessen, ATAs vorher zu erstellen

Bei der ersten Interaktion mit einem Mint existiert das Associated Token Account des Benutzers möglicherweise nicht. Das SDK fügt automatisch eine `AssociatedTokenAccount::create`-Anweisung vorne ein, wenn es ein fehlendes ATA erkennt, was eine kleine Mietgebühr kostet. Wenn Ihre Brieftasche wenig SOL hat, schlägt dies lautlos fehl. Überprüfen und finanzieren Sie, bevor Sie es erneut versuchen.

### 3. Veraltetes `poolInfo`

`poolInfo` ist ein zwischengespeichertes Snapshot. Wenn sich der Pool-Status seit dem Abrufen geändert hat (ein großer Trade hat den Preis verschoben, beispielsweise), kann `minAmountOut` des Swaps gegen den alten Status berechnet werden und unter dem On-Chain-Amount-Out landen, was zu einer Reversion führt. Rufen Sie `poolInfo` unmittelbar vor der Erstellung hochwertiger Transaktionen erneut ab, oder verwenden Sie das `computeAmountOut` des SDK, das Reserven erneut abfragt.

### 4. Prioritätsgebühren

Das SDK fügt Compute-Unit-Preise standardmäßig nicht hinzu. In Hochlast-Fenster (neue Pool-Starts, Meme-Coin-Events) bedeutet dies, dass Ihre Transaktion mit vielen anderen konkurriert und möglicherweise nicht landet. Stellen Sie eine explizite `computeBudgetConfig` bereit:

```ts theme={null}
const { execute } = await raydium.cpmm.swap({
  poolInfo,
  inputAmount: new BN(...),
  swapResult: ...,
  slippage: 0.005,
  txVersion: TxVersion.V0,
  computeBudgetConfig: {
    units: 250_000,          // CU limit
    microLamports: 50_000,   // priority fee per CU
  },
});
```

Siehe [`integration-guides/priority-fee-tuning`](/de/integration-guides/priority-fee-tuning) für Sizing-Anleitung.

### 5. Slippage-Toleranz muss dem Pool-Typ entsprechen

CPMM und AMM v4 verwenden CPMM-Mathematik (niedrige Auswirkung bei normalen Trades). CLMM ist stückweise (Auswirkung springt bei Tick-Übergängen). Wenn Sie eine 0,5%-Slippage-Toleranz aus einem CPMM-Beispiel in einen CLMM-Swap kopieren, der mehrere Ticks kreuzt, wird die Transaktion wahrscheinlich revertiert. Das `computeAmountOut` des SDK gibt `priceImpact` zurück; dimensionieren Sie Ihre Toleranz darüber hinaus.

### 6. `BN` vs `number`

Alle Betragfelder im SDK sind `bn.js`-`BN`-Instanzen – nie JavaScript `number`. Das Konvertieren von Beträgen über `.toNumber()` schneidet stillschweigend bei `2^53` ab; für Werte über \~9 Billiarden (nicht ungewöhnlich bei 9-Dezimal-Mints) ergibt dies das falsche Ergebnis. Halten Sie alles in `BN`, bis das finale UI-Rendering.

## Versionierungspolitik

* `@raydium-io/raydium-sdk-v2` ist das einzige SDK, das Raydium verwaltet. Alle Dokumentationen, Demos und Integrationsleitfäden zielen darauf ab.
* Ein älteres v1-Paket (`@raydium-io/raydium-sdk`) existiert aus historischen Gründen auf npm. Die Wartung endete, nachdem CPMM und LaunchLab ausgeliefert wurden (v1 erhielt niemals Unterstützung für eines davon), und es gibt seit 2024 keine v1-Veröffentlichungen mehr. Behandeln Sie v1 als End-of-Life: Verwenden Sie es nicht für neuen Code und migrieren Sie alle verbleibenden v1-Integrationen zu v2.
* SDK v2 ist vor 1.0. Breaking Changes zwischen 0.x Minor-Versionen sind möglich; fixieren Sie die Version, die Sie überprüft haben, und überprüfen Sie die GitHub-Release-Noten beim Upgrade.

## Upgrade

Beim Upgrade zwischen SDK-Minor-Versionen:

1. Überprüfen Sie erneut den Rückgabetyp jedes Mutationsaufrufs – Formänderungen (z. B. `extInfo`) finden häufig statt.
2. Regenerieren Sie Abruf-Signaturen für `poolInfo` – ein Feld könnte umbenannt worden sein.
3. Überprüfen Sie Ihre Slippage-Handhabung erneut; das SDK hat zwischen Auto-Bound- und Opt-in-Bound-Verhalten zwischen Versionen gewechselt.
4. Wenn Sie `raydium.trade` (Routing) verwenden, überprüfen Sie die Route-Form erneut – es ist der instabilste Teil der Oberfläche.

## Hilfe erhalten

Für SDK- und API-Fragen:

* **GitHub Issues** — reichen Sie ein unter [github.com/raydium-io/raydium-sdk-V2/issues](https://github.com/raydium-io/raydium-sdk-V2/issues) für Bugs und Feature-Anfragen ein. Das Raydium-Team überwacht aktiv.
* **Discord** — `#dev-support`-Kanal unter [discord.gg/raydium](https://discord.gg/raydium) für synchrone Hilfe.
* **Telegram** — Entwickler-Chat verlinkt von [raydium.io](https://raydium.io) (vermeiden Sie unverifizierte Telegram-Gruppen).

Für Sicherheitsprobleme, **nicht** in öffentliche Kanäle posten — siehe [`security/disclosure`](/de/security/disclosure).

## Verweise

* [`sdk-api/rest-api`](/de/sdk-api/rest-api) — das HTTP-Pendant zum SDK.
* [`sdk-api/trade-api`](/de/sdk-api/trade-api) — vom Server erstellte Swap-Transaktionen.
* [`sdk-api/anchor-idl`](/de/sdk-api/anchor-idl) — Regenerieren von Clients direkt aus Program-IDLs.
* [`sdk-api/python-integration`](/de/sdk-api/python-integration) — Python-Äquivalent via `solana-py`.
* [`integration-guides/priority-fee-tuning`](/de/integration-guides/priority-fee-tuning) — Dimensionieren von `computeBudgetConfig`.

Quellen:

* [Raydium SDK v2 Quellcode](https://github.com/raydium-io/raydium-sdk-V2)
* Raydium SDK Release Notes.
