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

> Alle AMM v4 Instruktionen mit ihren Argumenten, den Pool- und OpenBook-Konten, die sie erwarten, sowie die 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>
  AMM v4 Instruktionen erwarten einheitlich sowohl eine **Pool-Seite** (AMM v4 Programm-Konten) als auch eine **Market-Seite** (OpenBook-Konten für den gebundenen Market). Das Weglassen oder Nicht-Abgleichen beider Konto-Sets führt zu einem Revert. Die unten aufgeführten Kontenlisten verwenden die Feldnamen aus dem Raydium SDK zur Verdeutlichung; die zugrunde liegende IDL verwendet teilweise `serum_*` Präfixe.
</Info>

## Instruktions-Übersicht

| Gruppe            | Instruktion           | Hinweise                                                                                                     |
| ----------------- | --------------------- | ------------------------------------------------------------------------------------------------------------ |
| Pool-Lebenszyklus | `Initialize2`         | Aktuelle Pool-Erstellungs-Instruktion (weiterhin funktionsfähig; UI standardisiert auf CPMM für neue Pools). |
| Liquidität        | `Deposit`             | Liquidität hinzufügen, LP erhalten.                                                                          |
| Liquidität        | `Withdraw`            | LP verbrennen, beide Seiten im Verhältnis empfangen.                                                         |
| Swap              | `SwapBaseIn`          | Exakte-Input-Swap (vollständiger Pfad: Vaults + OpenBook).                                                   |
| Swap              | `SwapBaseOut`         | Exakte-Output-Swap (vollständiger Pfad).                                                                     |
| Swap              | `SwapBaseInV2`        | Exakte-Input-Swap, der OpenBook umgeht — nur Vaults, weniger Konten.                                         |
| Swap              | `SwapBaseOutV2`       | Exakte-Output-Swap, die OpenBook umgeht.                                                                     |
| Wartung           | `SetParams`           | Admin: Pool-Parameter ändern.                                                                                |
| Wartung           | `WithdrawPnl`         | Aufgelaufene Protokoll-PnL in die PnL-Owner-Konten leeren.                                                   |
| Wartung           | `CreateConfigAccount` | Admin: Programm-Level `AmmConfig` PDA initialisieren.                                                        |
| Wartung           | `UpdateConfigAccount` | Admin: Programm-Level Config-Parameter ändern.                                                               |

Das SDK stellt Builder nur für benutzerfreundliche Instruktionen bereit. Wartungs-Instruktionen werden normalerweise vom Raydium Keeper aufgerufen.

## `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** (beschreibbar `W`, Unterzeichner `S`)

| #  | Name                         | W | S | Hinweise                                                   |
| -- | ---------------------------- | - | - | ---------------------------------------------------------- |
| 1  | `token_program`              |   |   | SPL Token.                                                 |
| 2  | `system_program`             |   |   |                                                            |
| 3  | `rent`                       |   |   |                                                            |
| 4  | `amm`                        | W |   | `AmmInfo` Konto (Seed-Key).                                |
| 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 |   | Creator's LP ATA.                                          |
| 15 | `pool_temp_lp_token_account` | W |   | Scratch-Konto.                                             |
| 16 | `market_program`             |   |   | OpenBook-Programm.                                         |
| 17 | `market`                     |   |   | OpenBook Market.                                           |
| 18 | `user_wallet`                | W | S | Creator. Bezahlt Miete und finanziert initiale 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 genommen werden.
* OpenBook-Orders wurden **noch nicht** gepostet; der erste `MonitorStep` postet das initiale Gitter.

**Häufige Fehler** — `InvalidInput` (nicht übereinstimmende Dezimalstellen, unsortiert), `NotApproved`, OpenBook-seitige `InvalidMarketState`.

## `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-Verhältnismäßigkeit. Mit den *effektiven* Reserven des Pools (Vaults + On-Book) berechnet das SDK die Coin/PC-Paarung, die die gegebene LP-Menge ergibt, und prüft sie gegen `max_*`. Reverts mit `ExceededSlippage`, wenn entweder Seite die Obergrenze überschreitet.

## `Withdraw`

LP verbrennen, beide Seiten empfangen.

**Argumente**

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

**Konten** — wie `Deposit` mit umgekehrter Richtung; `lp_mint` ist für den Burn beschreibbar, die Benutzer-ATAs sind Empfänger. Ein `MonitorStep`-ähnlicher Settle-From-OpenBook-Schritt findet intern statt, bevor die Verhältnismäßigkeits-Mathematik erfolgt, sodass die Rückgabe frische Reserven verwendet.

## `SwapBaseIn`

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

<Note>
  **Verwenden Sie die V2-Varianten für neuen Code.** Da AMM v4 Liquidität nicht mehr mit OpenBook teilt, sind die V1-Einstiegspunkte (`SwapBaseIn`, `SwapBaseOut`) — die immer noch den vollständigen Satz OpenBook-Konten zur Validierung erfordern — funktional redundant. Neue Integrationen sollten [`SwapBaseInV2` / `SwapBaseOutV2`](#swapbaseinv2-swapbaseoutv2) verwenden, die eine viel kleinere Kontenliste benötigen und den kanonischen Ausführungspfad heute darstellen. Die V1-Formen werden hier aus Vollständigkeit 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 Quellen-Token, gewinnt `amount_out ≥ minimum_amount_out` des Ziel-Token.
* `state_data.swap_*_in_amount` und `swap_*_out_amount` inkrementiert (für Analytik).
* `need_take_pnl_*` inkrementiert um den Protokoll-Gebühren-Anteil.

**Häufige Fehler** — `ExceededSlippage`, `InvalidInput`, `InvalidStatus`, `InvalidMarket`.

## `SwapBaseOut`

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

**Argumente**

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

## `SwapBaseInV2` / `SwapBaseOutV2`

Varianten-Swap-Einstiegspunkte, die **die OpenBook-Konten vollständig überspringen**. Die Mathematik ist identisch mit dem V1-Pfad, aber die Kontenliste schrumpft auf nur die AMM-Seite:

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

Die effektiven Reserven des Pools berücksichtigen immer noch Token, die auf OpenBook gepostet sind, daher ist die Quote-Mathematik unverändert. Verwenden Sie V2, um Compute zu sparen und das Übergeben der Market-Konten zu vermeiden, wenn Sie keinen OpenBook-Crank in derselben Transaktion benötigen. Der Raydium Router verwendet immer die V2-Form beim Routing durch AMM v4.

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

## `MonitorStep` (Legacy / inaktiv)

<Note>
  **Wird nicht mehr gecrankt.** AMM v4 teilt Liquidität nicht mehr mit OpenBook, daher hat `MonitorStep` nichts zu tun — der Pool hat keine Orders auf OpenBook gepostet, die settled, storniert oder ersetzt werden müssen. Die Instruktion bleibt im On-Chain-Programm aus Gründen der Abwärtskompatibilität erhalten, aber der Raydium Keeper ruft sie nicht mehr auf. Das manuelle Aufrufen ist effektiv ein No-Op (außer zum Aktualisieren von auf Null gesetztem State) und sollte von Integratoren nicht benötigt werden.
</Note>

Ursprünglich hat diese Instruktion die OpenBook-Interaktion des Pools gecrankt.

**Argumente**

```
plan_order_limit:   u16
place_order_limit:  u16
cancel_order_limit: u16
```

**Konten** — alles oben für einen Swap, plus administrative OpenBook-Konten.

**Ursprüngliche Auswirkung** (nicht mehr relevant in der Praxis):

* Settled gefüllte Orders (deren Erträge wurden von `market_coin_vault`/`market_pc_vault` durch OpenBook CPI in die Pool-Vaults verschoben).
* Stornierte veraltete Orders, deren Preise oder Größen nicht mehr mit `target_orders` übereinstimmten.
* Gepostete neue Orders, um die Lücke zwischen `target_orders` und `amm_open_orders` zu schließen.

Berechtigung erforderlich. Jedes Konto konnte es aufrufen; historisch tat der Raydium Keeper dies regelmäßig.

## `WithdrawPnl` / `TakePnl`

Admin-Sweep aufgelaufener Protokoll-Gebühren.

**Argumente**

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

**Konten** (gekürzt)

| #  | Name                      | W | S |                                         |
| -- | ------------------------- | - | - | --------------------------------------- |
| 1  | `token_program`           |   |   |                                         |
| 2  | `amm`                     | W |   |                                         |
| 3  | `amm_authority`           |   |   |                                         |
| 4  | `amm_config`              |   |   |                                         |
| 5  | `amm_open_orders`         | W |   |                                         |
| 6  | `pool_coin_token_account` | W |   |                                         |
| 7  | `pool_pc_token_account`   | W |   |                                         |
| 8  | `pnl_coin_token_account`  | W |   | Empfänger, gespeichert auf `AmmConfig`. |
| 9  | `pnl_pc_token_account`    | W |   |                                         |
| 10 | `pnl_owner`               |   | S | Admin Multisig.                         |
| 11 | `market_program`          |   |   |                                         |
| 12 | `market`                  | W |   |                                         |
| 13 | `market_event_queue`      | W |   |                                         |
| 14 | `market_coin_vault`       | W |   |                                         |
| 15 | `market_pc_vault`         | W |   |                                         |
| 16 | `market_vault_signer`     |   |   |                                         |

**Auswirkung**

* Überweist `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.

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

## `SetParams`

Admin-Parameter-Änderungen: Status-Bitmaske, Gitter-Tiefe, Mengen-Wellen, Gebühren (selten), etc. Wird vom Raydium Multisig aufgerufen. Argumente sind ein `param: u8` Tag + Payload, analog zu CPMM's `UpdateAmmConfig`.

## State-Change-Matrix

| Instruktion   | `lp_mint` Supply                   | Vaults                                   | PnL-Zähler   | OpenBook                           |
| ------------- | ---------------------------------- | ---------------------------------------- | ------------ | ---------------------------------- |
| `Initialize2` | initiale Supply an Creator geprägt | `+ init_coin_amount`, `+ init_pc_amount` | 0            | OpenOrders erstellt                |
| `Deposit`     | +                                  | + beide                                  | —            | Fills settlen                      |
| `Withdraw`    | −                                  | − beide                                  | —            | Fills settlen                      |
| `SwapBaseIn`  | —                                  | + in, − out                              | + pnl Anteil | möglicherweise Gitter neu gepostet |
| `SwapBaseOut` | —                                  | + in, − out                              | + pnl Anteil | möglicherweise Gitter neu gepostet |
| `MonitorStep` | —                                  | Fills settlen                            | —            | stornieren / posten                |
| `WithdrawPnl` | —                                  | − (pnl geleert)                          | 0            | —                                  |
| `SetParams`   | —                                  | —                                        | —            | —                                  |

## Wie es weitergehen

* [`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 Gebührenaufteilung.
* [`reference/error-codes`](/de/reference/error-codes) — Forward-Reference-Tabelle (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 — Konto-Validierungen auf der Market-Seite
