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

> Das vollständige Kontoinventar eines AMM v4 Pools — AmmInfo, TargetOrders, OpenOrders, Vaults, LP Mint, Authority — sowie die OpenBook-Konten, an die der Pool gebunden ist.

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

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

<Info>
  AMM v4 ist deutlich kontofreudiger als CPMM oder CLMM, da jede Operation OpenBook-Zustand berührt. Diese Seite unterteilt die Konten in „Pool-eigene" und „OpenBook-eigene" Abschnitte, damit ein Integrator schnell sehen kann, welche Seite welche ist.
</Info>

## Bestand

Ein AMM v4 Pool bindet sich bei der Erstellung an genau einen OpenBook Market. Die vollständige aktuelle Ansicht ist:

| Kategorie         | Konto                                | Besitzer        | Rolle                                                                                                  |
| ----------------- | ------------------------------------ | --------------- | ------------------------------------------------------------------------------------------------------ |
| Pool              | `AmmInfo`                            | AMM v4 Programm | Pool-Zustand: aufgelaufene Gebühren, Status, Referenzen zu Vaults und OpenBook Market.                 |
| Pool              | `amm_authority`                      | AMM v4 Programm | Vom Programm verwalteter PDA, der Vault-Bewegungen signiert. Von allen AMM v4 Pools gemeinsam genutzt. |
| Pool              | `amm_open_orders`                    | OpenBook        | Das OpenOrders-Konto des Pools auf OpenBook für diesen Market.                                         |
| Pool              | `amm_target_orders`                  | AMM v4 Programm | Pool-seitige Gitterliste von Limit-Order-Zielen zum Zurückposten auf OpenBook.                         |
| Pool              | `pool_coin_token_account`            | SPL Token       | Vault auf Coin-Seite des Pools (ATA von `amm_authority`).                                              |
| Pool              | `pool_pc_token_account`              | SPL Token       | Vault auf PC-Seite des Pools.                                                                          |
| Pool              | `lp_mint`                            | SPL Token       | Fungibles LP Mint.                                                                                     |
| Pool              | `pool_withdraw_queue`                | AMM v4 Programm | Legacy-Warteschlange für verzögerte Abhebungen; wird leer gehalten.                                    |
| Pool              | `pool_temp_lp`                       | AMM v4 Programm | Hilfs-LP-Konto, das während `Initialize` verwendet wird.                                               |
| Market (OpenBook) | `serum_market`                       | OpenBook        | Der Market selbst (Base/Quote Mints, Vault Signer, etc.).                                              |
| Market            | `serum_bids`, `serum_asks`           | OpenBook        | Die Bid- und Ask-Warteschlangen.                                                                       |
| Market            | `serum_event_queue`                  | OpenBook        | Ausstehende Ereignisse (Fills, Stornierungen).                                                         |
| Market            | `serum_coin_vault`, `serum_pc_vault` | SPL Token       | OpenBooks Market-Level-Vaults.                                                                         |
| Market            | `serum_vault_signer`                 | OpenBook        | Market-Level PDA, der `serum_*_vault` Bewegungen signiert.                                             |

Hinweis: Das Präfix „serum" wird in AMMs v4 IDL und Feldnamen aus Gründen der Abwärtskompatibilität beibehalten. Es bezieht sich auf den OpenBook Market von heute.

## `AmmInfo`

Das Root-State-Konto des Pools. Groß (≈ 752 Bytes), weil es sowohl Pool- als auch OpenBook-Referenzen inline trägt.

```rust theme={null}
// programs/amm/src/state.rs (gekürzt; Feldordnung / Namen folgen dem IDL)
pub struct AmmInfo {
    pub status: u64,           // Bitmaske: Swap/Deposit/Withdraw/Crank aktiviert
    pub nonce:  u64,           // Bump zur Ableitung von amm_authority
    pub order_num: u64,
    pub depth: u64,
    pub coin_decimals: u64,
    pub pc_decimals:   u64,
    pub state:         u64,    // interne Zustandsmaschine
    pub reset_flag:    u64,
    pub min_size:      u64,
    pub vol_max_cut_ratio: u64,
    pub amount_wave: u64,
    pub coin_lot_size: u64,    // spiegelt OpenBook Market
    pub pc_lot_size:   u64,
    pub min_price_multiplier: u64,
    pub max_price_multiplier: u64,
    pub sys_decimal_value: u64,

    pub fees: Fees,            // Handels-/Protokoll-/Gebührensätze
    pub state_data: StateData,

    // Pool-eigene Konten:
    pub coin_vault: Pubkey,
    pub pc_vault:   Pubkey,
    pub coin_vault_mint: Pubkey,
    pub pc_vault_mint:   Pubkey,
    pub lp_mint:  Pubkey,
    pub open_orders: Pubkey,   // OpenOrders des Pools auf OpenBook
    pub market: Pubkey,        // OpenBook Market
    pub market_program: Pubkey, // OpenBook Programm ID
    pub target_orders: Pubkey,
    pub withdraw_queue: Pubkey,
    pub lp_vault:       Pubkey, // = pool_temp_lp
    pub owner: Pubkey,          // Admin (Multisig)
    pub lp_reserve: u64,
    pub padding: [u64; 3],
}

pub struct Fees {
    pub min_separate_numerator:   u64,     // 5
    pub min_separate_denominator: u64,     // 10_000
    pub trade_fee_numerator:      u64,     // 25  → wird von OpenBook Integration verwendet
    pub trade_fee_denominator:    u64,     // 10_000
    pub pnl_numerator:            u64,     // 12  → Anteil des Protokolls AN der Swap-Gebühr
    pub pnl_denominator:          u64,     // 100 → also 12/100 = 12% der Gebühr, = 0,03% des Volumens
    pub swap_fee_numerator:       u64,     // 25  → 0,25% brutto Swap-Gebühr
    pub swap_fee_denominator:     u64,     // 10_000
}

pub struct StateData {
    pub need_take_pnl_coin: u64,
    pub need_take_pnl_pc:   u64,
    pub total_pnl_pc:   u64,
    pub total_pnl_coin: u64,
    pub pool_open_time: u64,
    pub punish_pc_amount: u64,
    pub punish_coin_amount: u64,
    pub orderbook_to_init_time: u64,
    pub swap_coin_in_amount: u128,
    pub swap_pc_out_amount:  u128,
    pub swap_acc_pc_fee:    u64,
    pub swap_pc_in_amount:  u128,
    pub swap_coin_out_amount: u128,
    pub swap_acc_coin_fee:  u64,
}
```

Felder relevant für Integratoren:

* **`coin_vault`**, **`pc_vault`** — die SPL Token Vaults des Pools. `coin` ist nach Serum/OpenBook Konvention `token_0` (Base), `pc` ist `token_1` (Quote).
* **`coin_decimals`**, **`pc_decimals`** — entsprechend den Mints.
* **`open_orders`**, **`target_orders`**, **`market`** — müssen an jede Swap-/Deposit-/Withdraw-Anweisung weitergegeben werden.
* **`fees.swap_fee_numerator / swap_fee_denominator`** — die kombinierte Handelsgebühr. Standard `25 / 10_000 = 0,25%`.
* **`status`** — Bitmaske, die Operationen steuert. Von Admin über `AdminSetStatus` konfigurierbar.
* **`state_data.need_take_pnl_*`** — Differenz zwischen brutto aufgelaufenen Gebühren und dem, was bereits abgerufen wurde. `TakePnl` setzt diese zurück.

## Die OpenBook-Integration

<Note>
  **Nicht mehr aktiv.** AMM v4 Pools teilen keine Liquidität mehr mit OpenBook — das Limit-Order-Gitter wurde deaktiviert. Die in diesem Abschnitt beschriebenen OpenBook-Konten bleiben auf der `AmmInfo` jedes Pools und werden immer noch von V1 Swap-Endpunkten validiert (und von `Initialize`, `Deposit`, `Withdraw`) zur Abwärtskompatibilität, aber der On-Book-Zustand, auf den sie verweisen, ist praktisch leer. Verwenden Sie die **V2 Swap-Endpunkte** ([`SwapBaseInV2` / `SwapBaseOutV2`](/de/products/amm-v4/instructions)), die diese Konten überhaupt nicht benötigen und den kanonischen Ausführungspfad darstellen.
</Note>

Wenn Sie eine beliebige **V1** Lese- oder Schreibanweisung auf einem AMM v4 Pool aufrufen, müssen Sie die OpenBook-Konten weitergeben. Das Programm leitet diese ab und validiert sie, daher führt das Weitergeben eines nicht übereinstimmenden Satzes zum Rollback. (Die V2 Swap-Varianten benötigen diese Konten überhaupt nicht.)

```ts theme={null}
const market = ...;  // OpenBook Market PublicKey

// Felder, die OpenBook auf seinem Market-Konto verfügbar macht:
const marketDecoded = OpenBookMarket.decode(marketAccountData);
const {
  bids:           serumBids,
  asks:           serumAsks,
  eventQueue:     serumEventQueue,
  requestQueue:   serumRequestQueue,
  baseVault:      serumCoinVault,
  quoteVault:     serumPcVault,
  vaultSignerNonce,
} = marketDecoded;

const serumVaultSigner = PublicKey.createProgramAddressSync(
  [market.toBuffer(), u64ToBytes(vaultSignerNonce)],
  OPENBOOK_PROGRAM_ID,
);
```

`amm_open_orders` des AMM ist ein von OpenBook verwaltetes Konto, das den Limit-Order-Zustand des Pools auf diesem Market enthält: aktive Orders, ausgeglichene Guthaben, Referrer, etc. `amm_target_orders` ist auf AMM-Seite: es enthält das *beabsichtigte* Gitter des AMM (Preis/Größe für jeden Order-Slot), damit das Programm günstig mit dem aktuell geposteten Gitter vergleichen und die Differenz platzieren / stornieren kann.

## Authority PDAs

Es gibt genau einen `amm_authority` PDA für das gesamte AMM v4 Programm. Sein Seed ist trivial (`["amm authority"]`) und sein Bump ist auf jedem `AmmInfo` gespeichert. Diese Authority signiert alle Token-Bewegungen für alle AMM v4 Pools.

```ts theme={null}
const AMM_V4_PROGRAM_ID = new PublicKey(
  "675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8",
);
const [ammAuthority] = PublicKey.findProgramAddressSync(
  [Buffer.from("amm authority")],
  AMM_V4_PROGRAM_ID,
);
```

Es gibt eine separate **Pool-bezogene** Authority, die pro Pool abgeleitet wird, um OpenBook-Operationen zu signieren (`amm_authority` oben deckt tatsächlich beide in diesem Programmdesign ab; verschiedene Versionen verwendeten verschiedene Ableitungen, daher überprüfen Sie den spezifischen `AmmInfo.nonce` des Pools im Code).

## Vaults

Die SPL Token Vaults des Pools sind Standard-Token-Konten, deren `owner` `amm_authority` ist. Keine ATAs — ihre Adressen sind spezifische PDAs, die bei `Initialize` mit Seeds `["amm_associated_seed", coin_mint_or_pc_mint, market, amm_id]` abgeleitet werden. Adressen sind auf `AmmInfo` gespeichert; Ableitung ist eine einmalige Kuriosität.

Token-2022 wird **nicht** unterstützt. Das Programm codiert die Programm-ID des SPL Tokens für alle Vault-Bewegungen hart ein. Der Versuch, einen AMM v4 Pool an einen Token-2022 Mint zu binden, schlägt bei `Initialize` fehl.

## LP Mint

Ein klassisches SPL Token Mint, dessen Authority `amm_authority` ist. Der Gesamtvorrat verfolgt das LP-Besitztum des Pools; das Verbrennen von LP gibt Token aus beiden Vaults proportional zurück. Da AMM v4 älter als CPMM ist, gibt es keinen `lp_supply` Mirror im Pool-Zustand — lesen Sie die On-Chain Versorgung des Mints direkt.

## Status Bitmaske

`AmmInfo.status` steuert Operationen. Bits (Position kann sich zwischen Programmversionen unterscheiden — überprüfen Sie über den Quellcode):

| Bit | Flag                | Effekt                                            |
| --- | ------------------- | ------------------------------------------------- |
| 0   | `SWAP_DISABLED`     | `Swap*` lehnt ab.                                 |
| 1   | `DEPOSIT_DISABLED`  | `Deposit` lehnt ab.                               |
| 2   | `WITHDRAW_DISABLED` | `Withdraw` lehnt ab.                              |
| 3   | `CLMM_LIKE_MIGRATE` | Migrations-Gate-Flag, das von Ops verwendet wird. |

Das Raydium Multisig setzt diese über `AdminCancelOrders`, `AdminSetParams`, etc.

## Beobachtung / Oracle

**AMM v4 hat kein dediziertes Beobachtungskonto.** Andere Protokolle, die einen On-Chain TWAP benötigen, konsumieren OpenBooks Buch-Crossings indirekt oder lesen Off-Chain. Wenn Sie einen Raydium TWAP mit Programmunterstützung benötigen, verwenden Sie CPMM oder CLMM.

## Ableitung der Pool-Konten von Grund auf

Da AMM v4 nicht für deterministische Pro-Paar-PDAs entwickelt wurde (es prägt diese Solana-Konvention), ist die kanonische `amm_id` ein **mit Seed erstellter Keypair**, der abgeleitet wird mit:

```
ammId = createWithSeed(
  owner: ammAuthority,
  seed:  marketPubkey.toBase58().slice(0, 32),
  programId: AMM_V4_PROGRAM_ID,
)
```

Das gleiche mit Seed erstellte Schlüsselmuster gilt für `amm_open_orders`, `amm_target_orders`, `amm_withdraw_queue`, `pool_temp_lp`, `pool_coin_token_account`, `pool_pc_token_account` und `lp_mint`. Das SDK und die API berechnen diese im Voraus für Sie; siehe `raydium-sdk-v2`'s `Liquidity.getAssociatedPoolKeys`.

In der Praxis lesen Integratoren den vollständigen Kontosatz des Pools von `GET https://api-v3.raydium.io/pools/info/ids?ids=<POOL_ID>` oder vom SDK. Manuelle Ableitung ist selten erforderlich.

## Lebenszyklusreferenz

| Ereignis                     | Erstellte Konten                                                                                             | Gelöschte Konten |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------ | ---------------- |
| `Initialize2`                | `amm_info`, `amm_open_orders`, `amm_target_orders`, Vaults, `lp_mint`, `pool_withdraw_queue`, `pool_temp_lp` | —                |
| `Deposit`                    | — (kann User LP ATA erstellen)                                                                               | —                |
| `Withdraw`                   | —                                                                                                            | —                |
| `SwapBaseIn` / `SwapBaseOut` | — (kann User ATA erstellen)                                                                                  | —                |
| `TakePnl`                    | —                                                                                                            | —                |
| `MonitorStep` (Crank)        | —                                                                                                            | —                |

Pools und ihre Konten bleiben auf unbestimmte Zeit bestehen. Selbst wenn die Liquidität vollständig abgehoben ist, bleibt `AmmInfo` erhalten.

## Was wo gelesen wird

* **Mathematik und Gebührenarithmetik**: [`products/amm-v4/math`](/de/products/amm-v4/math).
* **Gebührenaufteilung und wie sie sich mit CPMM/CLMM vergleicht**: [`products/amm-v4/fees`](/de/products/amm-v4/fees).
* **Anweisungs-Kontolisten**: [`products/amm-v4/instructions`](/de/products/amm-v4/instructions).
* **OpenBook Kontoenableitung**: OpenBook Programmdocs ([`github.com/openbook-dex/program`](https://github.com/openbook-dex/program)).

Quellen:

* [Raydium AMM Programm — `raydium-io/raydium-amm`](https://github.com/raydium-io/raydium-amm)
* [`reference/program-addresses`](/de/reference/program-addresses) für kanonische Programm-IDs
* OpenBook / Serum Protokoll für die Gegenpartei-Konten
