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

# Instructions AMM v4

> Chaque instruction AMM v4 avec ses arguments, les comptes du pool et d'OpenBook qu'elle attend, et les conditions pré/post pour chacune.

<Info>
  **Cette page est traduite automatiquement par IA. La version anglaise fait foi.**

  [Voir la version anglaise →](/products/amm-v4/instructions)
</Info>

<Info>
  À partir de la mise à jour du programme 2026-07, la dépendance d'AMM v4 envers OpenBook / Serum a été **supprimée**. Les instructions héritées v1 `SwapBaseIn` / `SwapBaseOut`, `Deposit` et `Withdraw` **conservent leurs anciens agencements de comptes** pour la compatibilité rétroactive : les comptes de marché sont toujours acceptés à leurs anciennes positions, mais ils ne sont **plus validés ni utilisés** (aucun CPI n'est émis). Les nouvelles intégrations doivent utiliser les points d'entrée de swap V2, qui omettent entièrement les comptes de marché. Plusieurs instructions ont été supprimées et reviennent maintenant — voir l'[entrée du journal des modifications](/fr/reference/changelog/2026-07-22-amm-v4-openbook-removal). Les listes de comptes ci-dessous utilisent les noms de champs du SDK Raydium ; l'IDL sous-jacent utilise parfois des préfixes `serum_*`.
</Info>

## Inventaire des instructions

| Groupe               | Instruction           | tag | Notes                                                                                                |
| -------------------- | --------------------- | --- | ---------------------------------------------------------------------------------------------------- |
| Cycle de vie du pool | `Initialize2`         | 1   | Seule instruction de création de pool (l'interface par défaut utilise CPMM pour les nouveaux pools). |
| Liquidité            | `Deposit`             | 3   | Ajouter de la liquidité, recevoir des LP. Agencement inchangé (comptes de marché ignorés).           |
| Liquidité            | `Withdraw`            | 4   | Brûler des LP, recevoir les deux côtés au prorata. Agencement inchangé (comptes de marché ignorés).  |
| Swap                 | `SwapBaseIn`          | 9   | Swap à entrée exacte. Agencement v1 inchangé ; comptes de marché acceptés mais ignorés.              |
| Swap                 | `SwapBaseOut`         | 11  | Swap à sortie exacte. Identique à ce qui précède.                                                    |
| Swap                 | `SwapBaseInV2`        | 16  | **Recommandé.** Swap à entrée exacte sans les comptes de marché.                                     |
| Swap                 | `SwapBaseOutV2`       | 17  | **Recommandé.** Swap à sortie exacte sans les comptes de marché.                                     |
| Maintenance          | `SetParams`           | 6   | Admin : modifier les paramètres du pool. **Agencement + valeurs `param` modifiés** (rupture).        |
| Maintenance          | `WithdrawPnl`         | 7   | Récupérer les frais de protocole accumulés. **Agencement de comptes modifié** (rupture).             |
| Maintenance          | `CreateConfigAccount` | 14  | Admin : initialiser le PDA `AmmConfig` au niveau du programme.                                       |
| Maintenance          | `UpdateConfigAccount` | 15  | Admin : modifier les paramètres de configuration au niveau du programme.                             |

Le SDK expose des constructeurs pour les instructions accessibles à l'utilisateur uniquement. Les instructions de maintenance sont généralement invoquées par le gardien Raydium.

**Supprimées / plus appelables** (elles reviennent maintenant avec `unimplemented!`, et leurs constructeurs clients ont été supprimés) : `Initialize` (tag 0, utilisez `Initialize2`), `MonitorStep` (2), `MigrateToOpenBook` (5), `WithdrawSrm` (8), `PreInitialize` (10, utilisez `Initialize2`), `SimulateInfo` (12), `AdminCancelOrders` (13).

## `Initialize2`

Amorcer un nouveau pool AMM v4 lié à un marché OpenBook existant.

**Arguments**

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

**Comptes** (modifiable `W`, signataire `S`)

| #  | Nom                          | W | S | Notes                                                |
| -- | ---------------------------- | - | - | ---------------------------------------------------- |
| 1  | `token_program`              |   |   | SPL Token.                                           |
| 2  | `system_program`             |   |   |                                                      |
| 3  | `rent`                       |   |   |                                                      |
| 4  | `amm`                        | W |   | Compte `AmmInfo` (clé semée).                        |
| 5  | `amm_authority`              |   |   | PDA du programme.                                    |
| 6  | `amm_open_orders`            | W |   | OpenBook `OpenOrders` (semé).                        |
| 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 |   | ATA LP du créateur.                                  |
| 15 | `pool_temp_lp_token_account` | W |   | Compte de travail.                                   |
| 16 | `market_program`             |   |   | Programme OpenBook.                                  |
| 17 | `market`                     |   |   | Marché OpenBook.                                     |
| 18 | `user_wallet`                | W | S | Créateur. Paie le loyer et finance le dépôt initial. |
| 19 | `user_token_coin`            | W |   |                                                      |
| 20 | `user_token_pc`              | W |   |                                                      |

**Postconditions**

* `lp_supply = sqrt(init_coin_amount × init_pc_amount) − INIT_BURN`, où `INIT_BURN` ≈ 100 unités LP sont retenues de la circulation.
* Aucun ordre OpenBook n'est affiché (la grille du carnet d'ordres a été supprimée). `market_program` / `market` sont toujours passés mais seulement stockés comme champs de référence ; `coin_lot_size` / `pc_lot_size` / `min_size` sont initialisés à `0`.

**Erreurs courantes** — `InvalidInput` (décimales mal appariées, non triées), `NotAllowed`.

## `Deposit`

Ajouter de la liquidité.

**Arguments**

```
max_coin_amount: u64
max_pc_amount:   u64
base_side:       u64    // 0 = base sur coin, 1 = base sur pc
// (certaines variantes du SDK acceptent aussi other_amount_min)
```

**Comptes** (abrégé)

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

**Mathématiques** — prorata standard. En utilisant les réserves *effectives* du pool (coffres + en carnet), le SDK calcule la paire coin/pc qui produit le montant LP donné et la vérifie par rapport à `max_*`. Revient avec `ExceededSlippage` si l'un ou l'autre côté dépasse le plafond.

## `Withdraw`

Brûler des LP, recevoir les deux côtés.

**Arguments**

```
amount: u64    // LP à brûler
```

**Comptes** — comme `Deposit` avec la direction inversée ; `lp_mint` est modifiable pour le brûlage, les ATA utilisateur sont des récepteurs. L'agencement des comptes est inchangé (comptes de marché toujours passés positionnellement, ignorés). Il n'y a plus d'étape de règlement depuis OpenBook — les mathématiques au prorata utilisent directement les soldes des coffres.

## `SwapBaseIn`

Swap à entrée exacte. Toujours un swap **par chemin AMM** (ne route pas via l'appariement OpenBook).

<Note>
  **Utilisez les variantes V2 pour le nouveau code.** Puisque la dépendance d'AMM v4 envers OpenBook a été supprimée, les points d'entrée V1 (`SwapBaseIn`, `SwapBaseOut`) s'attendent toujours à la liste complète de 17 comptes (ou 18 avec le compte target-orders optionnel), mais les comptes OpenBook/marché sont maintenant **acceptés positionnellement et ignorés** — ils ne sont pas validés et aucun CPI n'est émis. Passer un nombre de comptes incorrect revient toujours avec `WrongAccountsNumber`, mais le *contenu* des comptes de marché n'est plus vérifié. Les nouvelles intégrations doivent utiliser [`SwapBaseInV2` / `SwapBaseOutV2`](#swapbaseinv2-swapbaseoutv2), qui prennent une liste de comptes beaucoup plus petite et représentent le chemin d'exécution canonique aujourd'hui. Les formes V1 sont documentées ici pour la complétude et pour lire les transactions existantes en chaîne.
</Note>

**Arguments**

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

**Comptes** (abrégé)

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

**Mathématiques** — voir [`products/amm-v4/math`](/fr/products/amm-v4/math).

**Préconditions**

* `amm.status` autorise le swap (bit 0 du masque de bits de statut non défini).
* `amm.state_data.pool_open_time <= now`.
* `amount_in > 0`.
* `user_source_token_account` détient au moins `amount_in`.

**Postconditions**

* L'utilisateur perd `amount_in` du jeton source, gagne `amount_out ≥ minimum_amount_out` du jeton destination.
* `need_take_pnl_*` incrémenté par la part des frais de protocole.
* Remarque : les compteurs d'analyse `state_data.swap_*_in_amount` / `swap_*_out_amount` ne sont **plus mis à jour** — leurs valeurs sont figées. Utilisez les journaux de transactions pour l'analyse du volume.

**Erreurs courantes** — `ExceededSlippage`, `InvalidInput`, `InvalidStatus`, `NotAllowed` (mint coin/pc identique).

## `SwapBaseOut`

Sortie exacte, inverse de `SwapBaseIn`. Mêmes comptes.

**Arguments**

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

## `SwapBaseInV2` / `SwapBaseOutV2`

Variantes de points d'entrée de swap (tags **16** / **17**) qui **omettent entièrement les comptes OpenBook**. Les mathématiques sont identiques au chemin V1, mais la liste des comptes se réduit à juste le côté AMM et l'utilisateur — **8 comptes, et `amm_open_orders` n'est pas passé** :

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

Les réserves du pool sont maintenant les soldes des coffres (moins le PnL en attente), donc les mathématiques de cotation sont simples et identiques au chemin v1. Utilisez V2 pour économiser du calcul et éviter de passer les comptes de marché (maintenant ignorés). Le routeur Raydium utilise toujours la forme V2 lors du routage via AMM v4.

Les arguments sont les mêmes que les formes V1 (`amount_in / minimum_amount_out` pour `SwapBaseInV2` ; `max_amount_in / amount_out` pour `SwapBaseOutV2`).

## `MonitorStep` et autres instructions supprimées

<Warning>
  **Supprimées — plus appelables.** À partir de la mise à jour 2026-07, `MonitorStep` (tag 2) a été supprimée du programme et **revient maintenant** (`unimplemented!`) si elle est invoquée. Son constructeur client a également été supprimé. Il en va de même pour `MigrateToOpenBook` (5), `WithdrawSrm` (8), `SimulateInfo` (12), `AdminCancelOrders` (13), et les points d'entrée de création de pool hérités `Initialize` (0) / `PreInitialize` (10) — utilisez `Initialize2` à la place.
</Warning>

Historiquement, `MonitorStep` actionnait l'interaction OpenBook du pool : elle réglait les ordres remplis (déplaçant les produits des coffres de marché vers les coffres du pool via CPI OpenBook), annulait les ordres obsolètes et affichait de nouveaux ordres pour combler l'écart entre `target_orders` et `amm_open_orders`. Avec la dépendance OpenBook supprimée, il n'y a rien à actionner et l'instruction est partie. Tout gardien ou intégration qui l'appelle encore doit supprimer l'appel.

## `WithdrawPnl` / `TakePnl`

Récupération administrative des frais de protocole accumulés.

**Arguments**

* `WithdrawPnl` ne prend pas d'arguments ; elle lit `need_take_pnl_*` et déplace ces montants exacts.

<Warning>
  **Changement de rupture (admin uniquement).** La liste des comptes est passée de 17 (+1 optionnel) à **10** — `amm_open_orders` et les six comptes de marché ont été supprimés — **sans analyse de compatibilité**. L'ancien agencement se désaligne (l'ancien #5 était `amm_open_orders`, maintenant `pool_coin_token_account`) et échoue avec des erreurs telles que `InvalidCoinVault`. Les outils d'administration doivent être mis à jour.
</Warning>

**Comptes** (nouvel agencement de 10 comptes)

| #  | Nom                       | 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 |   | Destinataire.   |
| 8  | `pnl_pc_token_account`    | W |   |                 |
| 9  | `pnl_owner`               |   | S | Multisig admin. |
| 10 | `amm_target_orders`       | W |   |                 |

**Effet**

* Transfère `need_take_pnl_coin` de `pool_coin_token_account` vers `pnl_coin_token_account`.
* Identique pour pc.
* Remet à zéro `need_take_pnl_coin` et `need_take_pnl_pc`.
* **Changement logique** : si le solde du coffre est insuffisant pour couvrir le PnL accumulé, l'instruction retourne `TakePnlError` directement (elle ne manipule plus l'état du carnet d'ordres).

Aucun changement aux réserves puisque le PnL accumulé était déjà exclu de l'invariant.

## `SetParams`

Modifications de paramètres admin, appelées par le multisig Raydium. Les arguments sont une balise `param: u8` + charge utile.

<Warning>
  **Changement de rupture (admin uniquement).** La liste des comptes a été réduite à juste `[amm (W), admin (S)]` (l'autorité, les ordres ouverts, les ordres cibles, le coffre et tous les comptes de marché ont été supprimés). L'énumération `param` a été **renumérotée et réduite** : `Status` = 0, `State` = 1, `Fees` = **2** (était 9), `SetOpenTime` = **3** (était 11). Tous les paramètres de grille de carnet d'ordres et `AmmOwner`, `LastOrderDistance`, `UpdateOpenOrder` ont été supprimés, et la structure `SetParamsInstruction` a supprimé `new_pubkey` et `last_order_distance`. Les outils d'administration doivent être mis à jour.
</Warning>

## Matrice de changement d'état

La colonne OpenBook a disparu — aucune instruction ne touche plus un carnet d'ordres.

| Instruction                     | Approvisionnement `lp_mint`                  | Coffres                                  | Compteurs PnL |
| ------------------------------- | -------------------------------------------- | ---------------------------------------- | ------------- |
| `Initialize2`                   | approvisionnement initial frappé au créateur | `+ init_coin_amount`, `+ init_pc_amount` | 0             |
| `Deposit`                       | +                                            | + les deux                               | —             |
| `Withdraw`                      | −                                            | − les deux                               | —             |
| `SwapBaseIn` / `SwapBaseInV2`   | —                                            | + entrée, − sortie                       | + part pnl    |
| `SwapBaseOut` / `SwapBaseOutV2` | —                                            | + entrée, − sortie                       | + part pnl    |
| `WithdrawPnl`                   | —                                            | − (pnl récupéré)                         | 0             |
| `SetParams`                     | —                                            | —                                        | —             |

## Où aller ensuite

* [`products/amm-v4/code-demos`](/fr/products/amm-v4/code-demos) — Exemples TypeScript pour les flux de swap et LP.
* [`products/amm-v4/fees`](/fr/products/amm-v4/fees) — Détails de `WithdrawPnl` et la répartition des frais.
* [`reference/error-codes`](/fr/reference/error-codes) — Table de référence directe (les erreurs AMM v4 sont listées sur cette page).

Sources :

* [Programme Raydium AMM — `raydium-io/raydium-amm`](https://github.com/raydium-io/raydium-amm)
* Module `Liquidity` du SDK Raydium v2
* Programme OpenBook — validations de comptes du côté marché
