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

# 2026-07-22 — AMM v4 : suppression de la dépendance OpenBook / Serum

> AMM v4 supprime sa dépendance dormante à OpenBook/Serum, les CPI et les instructions de market-making : les swaps/dépôts/retraits v1 restent compatibles, WithdrawPnl et SetParams sont des changements majeurs, et plusieurs instructions ne sont plus appelables.

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

  [Voir la version anglaise →](/reference/changelog/2026-07-22-amm-v4-openbook-removal)
</Info>

<Info>
  Une entrée du journal des modifications de la documentation. Pour l'index de toutes les mises à jour, consultez [`reference/changelog`](/fr/reference/changelog). Pour la chronologie historique du protocole, consultez [`introduction/history-and-milestones`](/fr/introduction/history-and-milestones).
</Info>

AMM v4 **a cessé de partager la liquidité vers OpenBook (anciennement Serum) il y a longtemps** ; le chemin hybride de market-making sur carnet d'ordres est resté dormant pendant des années. Cette mise à niveau est le nettoyage : elle **supprime la dépendance Serum, tous les CPI du carnet d'ordres et les instructions de market-making mortes** du programme, laissant AMM v4 comme un AMM pur à produit constant (`x·y=k`). Elle **ne change pas** le comportement de trading en direct — il n'y avait plus d'ordres OpenBook à arrêter de placer.

## TL;DR pour les intégrateurs

* **Swap / Deposit / Withdraw continuent de fonctionner sans changements.** Les transactions construites avec les anciennes dispositions de comptes s'exécutent toujours — les comptes Serum/market supprimés sont simplement ignorés (pas de validation, pas de CPI). `SwapBaseIn` / `SwapBaseOut` attendent toujours **17 (+1 optionnel)** comptes ; les dispositions de `Deposit` et `Withdraw` sont inchangées. Vous **n'avez pas** besoin de déployer une mise à jour client pour maintenir les flux existants.
* **Migrez vers les points d'entrée de swap V2.** `SwapBaseInV2` / `SwapBaseOutV2` ne contiennent aucun compte de marché et aucun `amm_open_orders` (8 comptes au total), donc les transactions sont plus petites et moins chères. Les routeurs/agrégateurs doivent router via V2.
* **`WithdrawPnl` est un changement majeur (admin uniquement).** Il passe de **17 (+1 optionnel) → 10** comptes avec **aucune analyse de compatibilité** ; l'ancienne disposition ne s'aligne pas (l'ancien #5 était `amm_open_orders`) et échoue la validation. Les outils d'administration doivent être mis à jour.
* **`SetParams` est un changement majeur (admin uniquement).** Les comptes se réduisent à `[amm, admin]`, et l'énumération `param` est **renumérotée** (`Fees` 9 → 2, `SetOpenTime` 11 → 3) ; `AmmOwner`, `LastOrderDistance`, `UpdateOpenOrder` et les paramètres de grille sont supprimés.
* **Plusieurs instructions ne sont plus appelables.** `Initialize`, `PreInitialize`, `MonitorStep`, `MigrateToOpenBook`, `WithdrawSrm`, `SimulateInfo` et `AdminCancelOrders` reviennent maintenant en arrière. Utilisez `Initialize2` pour créer des pools.
* **Les dispositions de comptes on-chain sont stables en octets, et les codes d'erreur sont inchangés.** `AmmInfo` / `StateData` conservent leur disposition (les anciens champs OpenBook sont conservés mais dépréciés/gelés) ; la numérotation `AmmError` est préservée, avec seulement un nouveau `NotAllowed` ajouté.

## Pourquoi cela importe (pour les traders, les LP et les intégrateurs)

* **Les traders** ne voient aucun changement dans le comportement ou la tarification des swaps — la courbe à produit constant est inchangée. Les swaps avec disposition V2 sont moins chers à exécuter car ils contiennent environ 8 comptes de moins.
* **Les LP** conservent les mêmes économies de dépôt/retrait. La liquidité s'est longtemps trouvée entièrement dans les coffres du pool, donc la valeur du pool est entièrement on-pool ; cette mise à niveau supprime seulement la plomberie de marché obsolète.
* **Les intégrateurs** obtiennent des transactions plus petites et plus simples et un modèle de cotation qui lit directement depuis les coffres. Les intégrations existantes ne se cassent pas (sauf pour l'admin `WithdrawPnl` / `SetParams`), mais le shim de compatibilité de swap v1 est temporaire — migrez vers V2 à votre convenance.

## Changements au niveau des instructions

### Toujours appelables, disposition inchangée (rétrocompatible)

`Initialize2`, `Deposit`, `Withdraw`, `SwapBaseIn`, `SwapBaseOut`, `CreateConfigAccount` et `UpdateConfigAccount` conservent leurs listes de comptes existantes. Sur `SwapBaseIn` / `SwapBaseOut`, `Deposit` et `Withdraw`, les comptes OpenBook/market sont toujours acceptés positionnellement mais ne sont **plus validés ou utilisés** — aucun CPI n'est émis et les réserves du pool sont calculées uniquement à partir des coffres. Le **nombre** de comptes doit toujours correspondre, donc les transactions existantes continuent de s'exécuter sans changement.

### `SwapBaseInV2` / `SwapBaseOutV2` — chemin recommandé

Omettez entièrement les comptes de marché et `amm_open_orders` (8 comptes ; tags 16 / 17). Les mathématiques de cotation sont identiques à v1. Les nouvelles intégrations et routeurs doivent utiliser V2.

### `WithdrawPnl` — 17 (+1 optionnel) → 10 comptes (⚠️ changement majeur, aucun chemin de compatibilité)

`amm_open_orders` et les six comptes de marché sont supprimés. La nouvelle disposition fixe de 10 comptes, réservée à l'admin, n'a **aucune** analyse de compatibilité ; l'ancienne disposition ne s'aligne pas et échoue avec des erreurs telles que `InvalidCoinVault`.

### `SetParams` — réduit à `[amm, admin]` (⚠️ changement majeur) + paramètres renumérotés

L'autorité, les open-orders, les target-orders, le coffre et tous les comptes de marché sont supprimés. L'énumération `param` est renumérotée et réduite :

| Param         | Ancienne valeur | Nouvelle valeur |
| ------------- | --------------- | --------------- |
| `Status`      | 0               | 0               |
| `State`       | 1               | 1               |
| `Fees`        | 9               | **2**           |
| `SetOpenTime` | 11              | **3**           |

Tous les paramètres de grille du carnet d'ordres (`OrderNum`, `Depth`, `AmountWave`, `MinPriceMultiplier`, `MaxPriceMultiplier`, `MinSize`, `VolMaxCutRatio`, `InitOrderDepth`, `SetSwitchTime`, `ClearOpenTime`, `Seperate`) plus `AmmOwner`, `LastOrderDistance` et `UpdateOpenOrder` sont supprimés. La structure `SetParamsInstruction` supprime `new_pubkey` et `last_order_distance`.

### Ne sont plus appelables (reviennent en arrière à l'exécution ; constructeurs supprimés)

| Instruction         | tag | Remplacement                             |
| ------------------- | --- | ---------------------------------------- |
| `Initialize`        | 0   | `Initialize2`                            |
| `MonitorStep`       | 2   | aucun (crank du carnet d'ordres, retiré) |
| `MigrateToOpenBook` | 5   | aucun                                    |
| `WithdrawSrm`       | 8   | aucun (remise de frais SRM, retirée)     |
| `PreInitialize`     | 10  | `Initialize2`                            |
| `SimulateInfo`      | 12  | cotation off-chain / SDK                 |
| `AdminCancelOrders` | 13  | aucun                                    |

## Changements de réserve / état

* **Formule d'actifs du pool.** Les actifs totaux du pool sont maintenant `soldes des coffres − PnL en attente (need_take_pnl)` ; le terme des ordres ouverts OpenBook — déjà zéro en pratique — est supprimé. Le code de cotation peut lire directement depuis les soldes des coffres.
* **Champs d'état dépréciés.** `StateData.total_pnl_pc`, `total_pnl_coin`, `orderbook_to_init_time`, `swap_coin_in_amount`, `swap_pc_out_amount`, `swap_acc_pc_fee`, `swap_pc_in_amount`, `swap_coin_out_amount` et `swap_acc_coin_fee` sont conservés pour la compatibilité de disposition mais **ne sont plus mis à jour**. Les consommateurs qui dépendent des compteurs de volume `swap_*` doivent passer aux journaux de transactions.
* **Initialisation de `AmmInfo`.** `coin_lot_size`, `pc_lot_size` et `min_size` sont maintenant initialisés à `0`.
* **Dépendance supprimée et CPI.** La crate `serum_dex` est supprimée de `Cargo.toml` ; tous les CPI Serum DEX (`invoke_dex_new_order_v3`, `invoke_dex_cancel_order_v2`, `invoke_dex_settle_funds`, `invoke_dex_init_open_orders`, …) sont supprimés de `invokers.rs`. Structures de données supprimées : `LastOrderDistance`, `SimulateParams`, `RunCrankData`, `GetPoolData`, `GetSwapBaseInData`, `GetSwapBaseOutData`.
