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

# AMM v4 Instruktionen

> Jede AMM v4 Instruktion mit ihren Argumenten, den Pool- und OpenBook-Konten, die sie erwartet, sowie den Vor- und Nachbedingungen für jede.

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

  [Englische Version ansehen →](/products/amm-v4/instructions)
</Info>

<Info>
  Ab dem Programm-Upgrade 2026-07 wurde die OpenBook-/Serum-Abhängigkeit von AMM v4 **entfernt**. Die Legacy-v1-Instruktionen `SwapBaseIn` / `SwapBaseOut`, `Deposit` und `Withdraw` **behalten ihre alten Account-Layouts** für Rückwärtskompatibilität: Die Market-Konten werden weiterhin in ihren alten Positionen akzeptiert, aber sie werden **nicht mehr validiert oder verwendet** (kein CPI wird ausgegeben). Neue Integrationen sollten die V2-Swap-Einstiegspunkte verwenden, die die Market-Konten vollständig weglassen. Mehrere Instruktionen wurden entfernt und kehren jetzt zurück – siehe den [Changelog-Eintrag](/de/reference/changelog/2026-07-22-amm-v4-openbook-removal). Die Account-Listen unten verwenden die Feldnamen aus dem Raydium SDK; die zugrunde liegende IDL verwendet manchmal `serum_*`-Präfixe.
</Info>

## Instruktions-Übersicht

| Gruppe            | Instruktion           | Tag | Hinweise                                                                                     |
| ----------------- | --------------------- | --- | -------------------------------------------------------------------------------------------- |
| Pool-Lebenszyklus | `Initialize2`         | 1   | Einzige Pool-Erstellungs-Instruktion (UI setzt Standard auf CPMM für neue Pools).            |
| Liquidität        | `Deposit`             | 3   | Liquidität hinzufügen, LP erhalten. Layout unverändert (Market-Konten ignoriert).            |
| Liquidität        | `Withdraw`            | 4   | LP verbrennen, beide Seiten pro-rata erhalten. Layout unverändert (Market-Konten ignoriert). |
| Swap              | `SwapBaseIn`          | 9   | Exakte-Input-Swap. v1-Layout unverändert; Market-Konten akzeptiert aber ignoriert.           |
| Swap              | `SwapBaseOut`         | 11  | Exakte-Output-Swap. Wie oben.                                                                |
| Swap              | `SwapBaseInV2`        | 16  | **Empfohlen.** Exakte-Input-Swap ohne Market-Konten.                                         |
| Swap              | `SwapBaseOutV2`       | 17  | **Empfohlen.** Exakte-Output-Swap ohne Market-Konten.                                        |
| Wartung           | `SetParams`           | 6   | Admin: Pool-Parameter ändern. **Layout + `param`-Werte geändert** (Breaking).                |
| Wartung           | `WithdrawPnl`         | 7   | Aufgelaufene Protokoll-PnL einziehen. **Account-Layout geändert** (Breaking).                |
| Wartung           | `CreateConfigAccount` | 14  | Admin: Initialisiere die Programm-Level-`AmmConfig`-PDA.                                     |
| Wartung           | `UpdateConfigAccount` | 15  | Admin: Ändere Programm-Level-Config-Parameter.                                               |

Das SDK stellt Builder nur für die benutzerorientierten Instruktionen bereit. Wartungs-Instruktionen werden typischerweise vom Raydium-Keeper aufgerufen.

**Entfernt / nicht mehr aufrufbar** (sie kehren jetzt mit `unimplemented!` zurück, und ihre Client-Builder wurden gelöscht): `Initialize` (Tag 0, verwende `Initialize2`), `MonitorStep` (2), `MigrateToOpenBook` (5), `WithdrawSrm` (8), `PreInitialize` (10, verwende `Initialize2`), `SimulateInfo` (12), `AdminCancelOrders` (13).

## `Initialize2`

Starten Sie einen neuen AMM v4 Pool, der an einen bestehenden OpenBook-Market gebunden ist.

**Argumente**

```
nonce:        u8
open_time:    u64
init_pc_amount:   u64
init_coin_amount: u64
```

**Konten** (schreibbar `W`, Unterzeichner `S`)

| #  | Name                         | W | S | Hinweise                                                    |
| -- | ---------------------------- | - | - | ----------------------------------------------------------- |
| 1  | `token_program`              |   |   | SPL Token.                                                  |
| 2  | `system_program`             |   |   |                                                             |
| 3  | `rent`                       |   |   |                                                             |
| 4  | `amm`                        | W |   | `AmmInfo`-Konto (Seed-Schlüssel).                           |
| 5  | `amm_authority`              |   |   | Programm-PDA.                                               |
| 6  | `amm_open_orders`            | W |   | OpenBook `OpenOrders` (Seed).                               |
| 7  | `lp_mint`                    | W |   |                                                             |
| 8  | `coin_mint`                  |   |   |                                                             |
| 9  | `pc_mint`                    |   |   |                                                             |
| 10 | `pool_coin_token_account`    | W |   |                                                             |
| 11 | `pool_pc_token_account`      | W |   |                                                             |
| 12 | `pool_withdraw_queue`        | W |   |                                                             |
| 13 | `pool_target_orders_account` | W |   |                                                             |
| 14 | `pool_lp_token_account`      | W |   | LP-ATA des Erstellers.                                      |
| 15 | `pool_temp_lp_token_account` | W |   | Scratch-Konto.                                              |
| 16 | `market_program`             |   |   | OpenBook-Programm.                                          |
| 17 | `market`                     |   |   | OpenBook-Market.                                            |
| 18 | `user_wallet`                | W | S | Ersteller. Zahlt Miete und finanziert die erste Einzahlung. |
| 19 | `user_token_coin`            | W |   |                                                             |
| 20 | `user_token_pc`              | W |   |                                                             |

**Nachbedingungen**

* `lp_supply = sqrt(init_coin_amount × init_pc_amount) − INIT_BURN`, wobei `INIT_BURN` ≈ 100 LP-Einheiten aus dem Verkehr gezogen werden.
* Es werden keine OpenBook-Aufträge gepostet (das Order-Book-Gitter wurde entfernt). `market_program` / `market` werden weiterhin übergeben, aber nur als Referenzfelder gespeichert; `coin_lot_size` / `pc_lot_size` / `min_size` werden auf `0` initialisiert.

**Häufige Fehler** — `InvalidInput` (nicht übereinstimmende Dezimalstellen, nicht sortiert), `NotAllowed`.

## `Deposit`

Liquidität hinzufügen.

**Argumente**

```
max_coin_amount: u64
max_pc_amount:   u64
base_side:       u64    // 0 = Basis auf Coin, 1 = Basis auf PC
// (einige SDK-Varianten akzeptieren auch other_amount_min)
```

**Konten** (gekürzt)

| #  | Name                      | W | S |
| -- | ------------------------- | - | - |
| 1  | `token_program`           |   |   |
| 2  | `amm`                     | W |   |
| 3  | `amm_authority`           |   |   |
| 4  | `amm_open_orders`         |   |   |
| 5  | `amm_target_orders`       | W |   |
| 6  | `lp_mint`                 | W |   |
| 7  | `pool_coin_token_account` | W |   |
| 8  | `pool_pc_token_account`   | W |   |
| 9  | `market`                  |   |   |
| 10 | `user_coin_token_account` | W |   |
| 11 | `user_pc_token_account`   | W |   |
| 12 | `user_lp_token_account`   | W |   |
| 13 | `user_owner`              |   | S |

**Mathematik** — Standard pro-rata. Mit den *effektiven* Reserven des Pools (Vaults + On-Book) berechnet das SDK das Coin/PC-Paar, das die angegebene LP-Menge ergibt, und prüft es gegen `max_*`. Kehrt mit `ExceededSlippage` zurück, wenn eine Seite die Obergrenze überschreitet.

## `Withdraw`

LP verbrennen, beide Seiten erhalten.

**Argumente**

```
amount: u64    // Zu verbrennende LP
```

**Konten** — wie `Deposit` mit umgekehrter Richtung; `lp_mint` ist schreibbar zum Verbrennen, die Benutzer-ATAs sind Empfänger. Das Account-Layout ist unverändert (Market-Konten werden weiterhin positionell übergeben, ignoriert). Es gibt keinen Settle-from-OpenBook-Schritt mehr – die Pro-Rata-Mathematik verwendet die Vault-Salden direkt.

## `SwapBaseIn`

Exakte-Input-Swap. Immer ein **AMM-Pfad**-Swap (wird nicht durch OpenBook-Matching weitergeleitet).

<Note>
  **Verwenden Sie die V2-Varianten für neuen Code.** Da die OpenBook-Abhängigkeit von AMM v4 entfernt wurde, erwarten die V1-Einstiegspunkte (`SwapBaseIn`, `SwapBaseOut`) weiterhin die vollständige 17-Account-Liste (oder 18 mit dem optionalen Target-Orders-Konto), aber die OpenBook/Market-Konten werden jetzt **positionell akzeptiert und ignoriert** – sie werden nicht validiert und kein CPI wird ausgegeben. Das Übergeben einer falschen Account-*Anzahl* kehrt weiterhin mit `WrongAccountsNumber` zurück, aber der Market-Account-*Inhalt* wird nicht mehr überprüft. Neue Integrationen sollten [`SwapBaseInV2` / `SwapBaseOutV2`](#swapbaseinv2-swapbaseoutv2) verwenden, die eine viel kleinere Account-Liste benötigen und den kanonischen Ausführungspfad heute darstellen. Die V1-Formen werden hier der Vollständigkeit halber und zum Lesen bestehender On-Chain-Transaktionen dokumentiert.
</Note>

**Argumente**

```
amount_in:            u64
minimum_amount_out:   u64
```

**Konten** (gekürzt)

| #  | Name                        | W | S |
| -- | --------------------------- | - | - |
| 1  | `token_program`             |   |   |
| 2  | `amm`                       | W |   |
| 3  | `amm_authority`             |   |   |
| 4  | `amm_open_orders`           | W |   |
| 5  | `amm_target_orders`         | W |   |
| 6  | `pool_coin_token_account`   | W |   |
| 7  | `pool_pc_token_account`     | W |   |
| 8  | `market_program`            |   |   |
| 9  | `market`                    | W |   |
| 10 | `market_bids`               | W |   |
| 11 | `market_asks`               | W |   |
| 12 | `market_event_queue`        | W |   |
| 13 | `market_coin_vault`         | W |   |
| 14 | `market_pc_vault`           | W |   |
| 15 | `market_vault_signer`       |   |   |
| 16 | `user_source_token_account` | W |   |
| 17 | `user_dest_token_account`   | W |   |
| 18 | `user_owner`                |   | S |

**Mathematik** — siehe [`products/amm-v4/math`](/de/products/amm-v4/math).

**Vorbedingungen**

* `amm.status` erlaubt Swap (Bit 0 der Status-Bitmaske nicht gesetzt).
* `amm.state_data.pool_open_time <= now`.
* `amount_in > 0`.
* `user_source_token_account` hält mindestens `amount_in`.

**Nachbedingungen**

* Benutzer verliert `amount_in` des Quell-Tokens, gewinnt `amount_out ≥ minimum_amount_out` des Ziel-Tokens.
* `need_take_pnl_*` erhöht um den Protokoll-Fee-Anteil.
* Hinweis: Die `state_data.swap_*_in_amount` / `swap_*_out_amount` Analytics-Zähler werden **nicht mehr aktualisiert** – ihre Werte sind eingefroren. Verwenden Sie Trade-Logs für Volume-Analytics.

**Häufige Fehler** — `ExceededSlippage`, `InvalidInput`, `InvalidStatus`, `NotAllowed` (Coin/PC-Mint identisch).

## `SwapBaseOut`

Exakte-Output, Umkehrung von `SwapBaseIn`. Gleiche Konten.

**Argumente**

```
max_amount_in: u64
amount_out:    u64
```

## `SwapBaseInV2` / `SwapBaseOutV2`

Varianten-Swap-Einstiegspunkte (Tags **16** / **17**), die **die OpenBook-Konten vollständig überspringen**. Die Mathematik ist identisch mit dem V1-Pfad, aber die Account-Liste schrumpft auf nur die AMM-Seite und den Benutzer – **8 Konten, und `amm_open_orders` wird nicht übergeben**:

| # | Name                        | W | S |
| - | --------------------------- | - | - |
| 1 | `token_program`             |   |   |
| 2 | `amm`                       | W |   |
| 3 | `amm_authority`             |   |   |
| 4 | `pool_coin_token_account`   | W |   |
| 5 | `pool_pc_token_account`     | W |   |
| 6 | `user_source_token_account` | W |   |
| 7 | `user_dest_token_account`   | W |   |
| 8 | `user_owner`                |   | S |

Pool-Reserven sind jetzt die Vault-Salden (minus ausstehende PnL), daher ist die Quote-Mathematik unkompliziert und identisch mit dem v1-Pfad. Verwenden Sie V2, um Compute zu sparen und das Übergeben der (jetzt ignorierten) Market-Konten zu vermeiden. Der Raydium-Router verwendet immer die V2-Form beim Routing durch AMM v4.

Die Argumente sind die gleichen wie die V1-Formen (`amount_in / minimum_amount_out` für `SwapBaseInV2`; `max_amount_in / amount_out` für `SwapBaseOutV2`).

## `MonitorStep` und andere entfernte Instruktionen

<Warning>
  **Entfernt – nicht mehr aufrufbar.** Ab dem Upgrade 2026-07 wurde `MonitorStep` (Tag 2) aus dem Programm entfernt und **kehrt jetzt zurück** (`unimplemented!`), wenn es aufgerufen wird. Sein Client-Builder wurde ebenfalls gelöscht. Das Gleiche gilt für `MigrateToOpenBook` (5), `WithdrawSrm` (8), `SimulateInfo` (12), `AdminCancelOrders` (13) und die Legacy-Pool-Erstellungs-Einstiegspunkte `Initialize` (0) / `PreInitialize` (10) – verwenden Sie stattdessen `Initialize2`.
</Warning>

Historisch betrieb `MonitorStep` die OpenBook-Interaktion des Pools: Es siedelte gefüllte Aufträge an (bewegte Erlöse aus den Market-Vaults in die Pool-Vaults über OpenBook CPI), stornierte veraltete Aufträge und postete neue Aufträge, um die Lücke zwischen `target_orders` und `amm_open_orders` zu schließen. Mit der entfernten OpenBook-Abhängigkeit gibt es nichts mehr zu betreiben und die Instruktion ist weg. Jeder Keeper oder jede Integration, die sie noch aufruft, muss den Aufruf entfernen.

## `WithdrawPnl` / `TakePnl`

Admin-Einzug aufgelaufener Protokoll-Gebühren.

**Argumente**

* `WithdrawPnl` nimmt keine Argumente; es liest `need_take_pnl_*` und bewegt diese genauen Beträge.

<Warning>
  **Breaking Change (nur Admin).** Die Account-Liste sank von 17 (+1 optional) auf **10** – `amm_open_orders` und alle sechs Market-Konten wurden entfernt – **ohne Kompatibilitäts-Parsing**. Das alte Layout ist nicht ausgerichtet (altes #5 war `amm_open_orders`, jetzt `pool_coin_token_account`) und schlägt mit Fehlern wie `InvalidCoinVault` fehl. Admin-Tools müssen aktualisiert werden.
</Warning>

**Konten** (neues 10-Account-Layout)

| #  | Name                      | W | S |                 |
| -- | ------------------------- | - | - | --------------- |
| 1  | `token_program`           |   |   |                 |
| 2  | `amm`                     | W |   |                 |
| 3  | `amm_config`              |   |   |                 |
| 4  | `amm_authority`           |   |   |                 |
| 5  | `pool_coin_token_account` | W |   |                 |
| 6  | `pool_pc_token_account`   | W |   |                 |
| 7  | `pnl_coin_token_account`  | W |   | Empfänger.      |
| 8  | `pnl_pc_token_account`    | W |   |                 |
| 9  | `pnl_owner`               |   | S | Admin-Multisig. |
| 10 | `amm_target_orders`       | W |   |                 |

**Effekt**

* Überträgt `need_take_pnl_coin` von `pool_coin_token_account` zu `pnl_coin_token_account`.
* Gleiches für PC.
* Setzt `need_take_pnl_coin` und `need_take_pnl_pc` auf Null.
* **Logik-Änderung**: Wenn der Vault-Saldo nicht ausreicht, um aufgelaufene PnL zu decken, gibt die Instruktion direkt `TakePnlError` zurück (sie manipuliert nicht mehr den Order-Book-Status).

Keine Änderung der Reserven, da aufgelaufene PnL bereits aus der Invariante ausgeschlossen war.

## `SetParams`

Admin-Parameter-Änderungen, aufgerufen vom Raydium-Multisig. Argumente sind ein `param: u8`-Tag + Payload.

<Warning>
  **Breaking Change (nur Admin).** Die Account-Liste wurde auf nur `[amm (W), admin (S)]` reduziert (die Authority, Open-Orders, Target-Orders, Vault und alle Market-Konten wurden entfernt). Das `param`-Enum wurde **neu nummeriert und gekürzt**: `Status` = 0, `State` = 1, `Fees` = **2** (war 9), `SetOpenTime` = **3** (war 11). Alle Order-Book-Grid-Parameter und `AmmOwner`, `LastOrderDistance`, `UpdateOpenOrder` wurden entfernt, und die `SetParamsInstruction`-Struktur verlor `new_pubkey` und `last_order_distance`. Admin-Tools müssen aktualisiert werden.
</Warning>

## Zustandsänderungs-Matrix

Die OpenBook-Spalte ist weg – keine Instruktion berührt mehr ein Order-Book.

| Instruktion                     | `lp_mint`-Angebot                 | Vaults                                   | PnL-Zähler   |
| ------------------------------- | --------------------------------- | ---------------------------------------- | ------------ |
| `Initialize2`                   | Init-Angebot an Ersteller geprägt | `+ init_coin_amount`, `+ init_pc_amount` | 0            |
| `Deposit`                       | +                                 | + beide                                  | —            |
| `Withdraw`                      | −                                 | − beide                                  | —            |
| `SwapBaseIn` / `SwapBaseInV2`   | —                                 | + rein, − raus                           | + pnl-Anteil |
| `SwapBaseOut` / `SwapBaseOutV2` | —                                 | + rein, − raus                           | + pnl-Anteil |
| `WithdrawPnl`                   | —                                 | − (pnl eingezogen)                       | 0            |
| `SetParams`                     | —                                 | —                                        | —            |

## Nächste Schritte

* [`products/amm-v4/code-demos`](/de/products/amm-v4/code-demos) — TypeScript-Beispiele für Swap- und LP-Flows.
* [`products/amm-v4/fees`](/de/products/amm-v4/fees) — `WithdrawPnl`-Details und die Fee-Aufteilung.
* [`reference/error-codes`](/de/reference/error-codes) — Vorwärts-Referenztabelle (AMM v4-Fehler sind auf dieser Seite aufgelistet).

Quellen:

* [Raydium AMM-Programm — `raydium-io/raydium-amm`](https://github.com/raydium-io/raydium-amm)
* Raydium SDK v2 `Liquidity`-Modul
* OpenBook-Programm – Account-Validierungen auf der Market-Seite
