> ## 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 OpenBook qu'elle attend, ainsi que les conditions pré/post sur chacune.

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

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

<Info>
  Les instructions AMM v4 attendent uniformément à la fois un **côté pool** (comptes du programme AMM v4) et un **côté marché** (comptes OpenBook pour le marché lié). Omettre ou mal faire correspondre l'un ou l'autre ensemble revient. Les listes de comptes ci-dessous utilisent les noms de champs du SDK Raydium pour la clarté ; l'IDL sous-jacent utilise parfois les préfixes `serum_*`.
</Info>

## Inventaire des instructions

| Groupe               | Instruction           | Notes                                                                                                                     |
| -------------------- | --------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| Cycle de vie du pool | `Initialize2`         | Instruction actuelle de création de pool (toujours fonctionnelle ; l'UI utilise par défaut CPMM pour les nouveaux pools). |
| Liquidité            | `Deposit`             | Ajouter de la liquidité, recevoir des LP.                                                                                 |
| Liquidité            | `Withdraw`            | Brûler des LP, recevoir les deux côtés au prorata.                                                                        |
| Swap                 | `SwapBaseIn`          | Swap à intrant exact (chemin complet : coffres + OpenBook).                                                               |
| Swap                 | `SwapBaseOut`         | Swap à produit exact (chemin complet).                                                                                    |
| Swap                 | `SwapBaseInV2`        | Swap à intrant exact qui contourne OpenBook — coffres uniquement, moins de comptes.                                       |
| Swap                 | `SwapBaseOutV2`       | Swap à produit exact qui contourne OpenBook.                                                                              |
| Maintenance          | `SetParams`           | Admin : modifier les paramètres du pool.                                                                                  |
| Maintenance          | `WithdrawPnl`         | Balayer le PnL du protocole accumulé dans les comptes propriétaires du PnL.                                               |
| Maintenance          | `CreateConfigAccount` | Admin : initialiser le PDA `AmmConfig` au niveau du programme.                                                            |
| Maintenance          | `UpdateConfigAccount` | Admin : modifier les paramètres de config au niveau du programme.                                                         |

Le SDK expose des builders pour les instructions à destination des utilisateurs uniquement. Les instructions de maintenance sont généralement invoquées par le keeper Raydium.

## `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 la rente 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 de LP sont retirées de la circulation.
* Les ordres OpenBook n'ont **pas** encore été publiés ; le premier `MonitorStep` publie la grille initiale.

**Erreurs courantes** — `InvalidInput` (décimales mal appariées, non triées), `NotApproved`, côté OpenBook `InvalidMarketState`.

## `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** — au prorata standard. Utilisant les réserves *effectives* du pool (coffres + en carnet), le SDK calcule la paire coin/pc qui produit le montant de LP donné et la vérifie contre `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 brûler, les ATA de l'utilisateur sont des destinataires. Une étape de règlement similaire à `MonitorStep` à partir d'OpenBook se produit en interne avant les mathématiques au prorata, de sorte que la rédemption utilise des réserves fraîches.

## `SwapBaseIn`

Swap à intrant exact. Toujours un swap **chemin AMM** (ne s'achemine pas via l'appairage OpenBook).

<Note>
  **Utilisez les variantes V2 pour le nouveau code.** Puisque AMM v4 ne partage plus de liquidité avec OpenBook, les points d'entrée V1 (`SwapBaseIn`, `SwapBaseOut`) — qui nécessitent toujours l'ensemble complet des comptes OpenBook pour la validation — sont fonctionnellement redondants. 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 par exhaustivité et pour lire les transactions on-chain existantes.
</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 destinataire.
* `state_data.swap_*_in_amount` et `swap_*_out_amount` incrémentés (pour l'analyse).
* `need_take_pnl_*` incrémenté par la part des frais de protocole.

**Erreurs courantes** — `ExceededSlippage`, `InvalidInput`, `InvalidStatus`, `InvalidMarket`.

## `SwapBaseOut`

Exact-output, inverse de `SwapBaseIn`. Mêmes comptes.

**Arguments**

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

## `SwapBaseInV2` / `SwapBaseOutV2`

Variantes de points d'entrée de swap qui **ignorent entièrement les comptes OpenBook**. Les mathématiques sont identiques au chemin V1, mais la liste des comptes se réduit au côté AMM uniquement :

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

Les réserves effectives du pool tiennent toujours compte des jetons publiés sur OpenBook, de sorte que les mathématiques de cotation restent inchangées. Utilisez V2 pour économiser du calcul et éviter de transmettre les comptes de marché lorsque vous n'avez pas besoin d'une manivelle OpenBook dans la même transaction. 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` (hérité / inerte)

<Note>
  **Plus cranké.** AMM v4 ne partage plus de liquidité avec OpenBook, donc `MonitorStep` n'a rien à faire — le pool n'a aucun ordre posté à régler, annuler ou remplacer. L'instruction reste dans le programme on-chain pour la compatibilité rétroactive mais le keeper Raydium ne l'appelle plus. L'appeler manuellement est effectivement un no-op (autre que rafraîchir l'état mis à zéro) et ne devrait pas être nécessaire pour les intégrateurs.
</Note>

À l'origine, cette instruction cranait l'interaction du pool avec OpenBook.

**Arguments**

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

**Comptes** — tout ce qui précède pour un swap, plus des comptes administratifs OpenBook.

**Effet original** (plus pertinent en pratique) :

* Réglé tous les ordres remplis (leurs produits déplacés de `market_coin_vault`/`market_pc_vault` dans les coffres du pool via OpenBook CPI).
* Annulé les ordres obsolètes dont les prix ou tailles ne correspondaient plus à `target_orders`.
* Publié les nouveaux ordres pour fermer l'écart entre `target_orders` et `amm_open_orders`.

Sans permission. Tout compte pouvait l'appeler ; historiquement le keeper Raydium le faisait régulièrement.

## `WithdrawPnl` / `TakePnl`

Balayage administratif des frais de protocole accumulés.

**Arguments**

* `WithdrawPnl` ne prend aucun argument ; il lit `need_take_pnl_*` et déplace ces montants exacts.

**Comptes** (abrégé)

| #  | Nom                       | 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 |   | Destinataire, stocké sur `AmmConfig`. |
| 9  | `pnl_pc_token_account`    | W |   |                                       |
| 10 | `pnl_owner`               |   | S | Multisig admin.                       |
| 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`     |   |   |                                       |

**Effet**

* Transfère `need_take_pnl_coin` de `pool_coin_token_account` à `pnl_coin_token_account`.
* Idem pour pc.
* Met à zéro `need_take_pnl_coin` et `need_take_pnl_pc`.

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

## `SetParams`

Changements de paramètres admin : masque de bits de statut, profondeur de grille de commande, vagues de montant, frais (rarement), etc. Appelé par le multisig Raydium. Les arguments sont une étiquette `param: u8` + charge utile, analogue au `UpdateAmmConfig` de CPMM.

## Matrice de changement d'état

| Instruction   | approvisionnement `lp_mint`                  | Coffres                                  | Compteurs PnL | OpenBook                   |
| ------------- | -------------------------------------------- | ---------------------------------------- | ------------- | -------------------------- |
| `Initialize2` | approvisionnement initial frappé au créateur | `+ init_coin_amount`, `+ init_pc_amount` | 0             | OpenOrders créé            |
| `Deposit`     | +                                            | + les deux                               | —             | régler les remplissages    |
| `Withdraw`    | −                                            | − les deux                               | —             | régler les remplissages    |
| `SwapBaseIn`  | —                                            | + in, − out                              | + part pnl    | peut-être re-poster grille |
| `SwapBaseOut` | —                                            | + in, − out                              | + part pnl    | peut-être re-poster grille |
| `MonitorStep` | —                                            | régler remplissages                      | —             | annuler / poster           |
| `WithdrawPnl` | —                                            | − (pnl balayé)                           | 0             | —                          |
| `SetParams`   | —                                            | —                                        | —             | —                          |

## Où aller ensuite

* [`products/amm-v4/code-demos`](/fr/products/amm-v4/code-demos) — Exemples TypeScript pour les flux de swap et de 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) — Tableau 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 Raydium SDK v2 `Liquidity`
* Programme OpenBook — validations de comptes côté marché
