Cette page est traduite automatiquement par IA. La version anglaise fait foi.Voir la version anglaise →
À partir de la mise à jour 2026-07, la dépendance OpenBook / Serum d’AMM v4 a été supprimée — aucune instruction ne lit ou n’écrit plus l’état OpenBook. Les comptes de marché ci-dessous sont conservés uniquement comme espaces réservés positionnels sur les anciens layouts d’instructions v1 (acceptés mais ignorés) et comme champs de référence sur
AmmInfo. Utilisez les points d’entrée de swap V2, qui les omettent entièrement. Cette page regroupe toujours les comptes en sections « appartenant au pool » et « OpenBook (hérité) » pour la lecture des anciennes transactions.Inventaire
Un pool AMM v4 enregistre un marché lié surAmmInfo à la création. Le tableau complet :
Remarque : le préfixe « serum » est conservé dans l’IDL et les noms de champs d’AMM v4 pour la compatibilité rétroactive. Ces comptes ne sont plus fonctionnels après la suppression d’OpenBook.
AmmInfo
Le compte d’état racine du pool. Grand (≈ 752 octets) car il porte à la fois les références du pool et d’OpenBook en ligne.
Le layout de la struct n’a pas changé (compatible au niveau des octets) donc les désérialiseurs existants continuent de fonctionner, mais après la suppression d’OpenBook les champs marqués
DÉPRÉCIÉ ci-dessus ne sont plus écrits — les compteurs de volume swap_* sont gelés à leur dernière valeur. Pour l’analyse du volume, utilisez les journaux de trading plutôt que ces champs. Seuls need_take_pnl_* et pool_open_time sont activement maintenus.coin_vault,pc_vault— les vaults SPL Token du pool.coinesttoken_0par convention Serum/OpenBook (base),pcesttoken_1(quote).coin_decimals,pc_decimals— correspondant aux mints.open_orders,target_orders,market— champs de référence hérités. Toujours présents surAmmInfoet toujours passés positionnellement sur les layouts d’instructions v1, mais le programme ne les lit ni ne les valide plus. Les points d’entrée de swap V2 les omettent.fees.swap_fee_numerator / swap_fee_denominator— le frais de trading combiné. Par défaut25 / 10_000 = 0.25%.status— un unique état énuméréu64qui contrôle les opérations, et non un masque de bits. Configurable par l’admin viaSetParamsavecparam = 0(Status). Voir Statut ci-dessous.lp_amount— le total LP interne du pool. Il n’est pas égal àlp_mint.supply: il est exactement supérieur d’un token LP entier (10^coin_decimalsunités de base), car ce montant est comptabilisé à l’initialisation mais jamais minté. Toute la mathématique au prorata utiliselp_amount, alors utilisez-le aussi.amm_owner— écrit à la création depuis la clé admin codée en dur du programme, et non depuis celle du créateur.state_data.need_take_pnl_*— delta entre les frais bruts accumulés et ce qui a été balayé.TakePnlremet ces valeurs à zéro.
Le câblage OpenBook
Supprimé. La dépendance OpenBook / Serum a été supprimée du programme (mise à jour 2026-07). Les comptes décrits dans cette section ne sont plus validés ou utilisés. Ils restent comme champs de référence sur
AmmInfo et comme espaces réservés positionnels sur les layouts d’instructions v1 hérités. Utilisez les points d’entrée de swap V2 (SwapBaseInV2 / SwapBaseOutV2) qui ignorent entièrement ces comptes.SwapBaseIn / SwapBaseOut, Deposit, ou Withdraw, le nombre de comptes doit toujours correspondre à l’ancien layout (les comptes de marché occupent leurs positions historiques), mais leur contenu n’est plus vérifié — aucun CPI n’est émis contre eux. Le nouveau code doit utiliser les variantes de swap V2, qui ne prennent pas du tout ces comptes.
amm_open_orders de l’AMM est un compte appartenant à OpenBook contenant l’état des ordres à cours limité du pool sur ce marché : ordres actifs, soldes réglés, parrains, etc. amm_target_orders est du côté AMM : il contient la grille prévue de l’AMM (prix/taille pour chaque emplacement d’ordre) afin que le programme puisse comparer à bas coût avec ce qui est actuellement affiché et placer / annuler la différence.
PDAs d’autorité
Il existe exactement un PDAamm_authority pour l’ensemble du programme AMM v4. Sa seed est triviale (["amm authority"]) et son bump est stocké sur chaque AmmInfo. Cette autorité signe tous les mouvements de tokens pour tous les pools AMM v4.
254 sur mainnet et est reflété sur chaque AmmInfo sous le nom de nonce ; WithdrawExcessLamports le redérive avec ce nonce codé en dur.
Vaults
Les vaults SPL Token du pool sont des comptes de tokens standard dont leowner est amm_authority. Pas des ATAs — leurs adresses sont des PDAs dérivés à Initialize2 depuis [AMM_V4_PROGRAM_ID, market, "coin_vault_associated_seed"] et [AMM_V4_PROGRAM_ID, market, "pc_vault_associated_seed"]. Le mint n’est pas un seed, et amm_id non plus. Les adresses sont stockées sur AmmInfo ; la dérivation est une curiosité ponctuelle.
Token-2022 n’est pas supporté. Le programme code en dur l’ID du programme SPL Token pour tous les mouvements de vault. Tenter de lier un pool AMM v4 à un mint Token-2022 échoue à Initialize2 avec InvalidSplTokenProgram.
LP mint
Un mint SPL Token classique dont l’autorité estamm_authority. L’offre totale suit la propriété LP du pool ; brûler des LP retourne les tokens des deux vaults au prorata.
Il existe un miroir dans l’état : AmmInfo.lp_amount. Il n’est pas égal à l’offre du mint — il est exactement supérieur d’un token LP entier (10^coin_decimals unités de base), car ce montant est comptabilisé à l’initialisation mais jamais minté. Chaque calcul au prorata du programme divise par lp_amount, utilisez donc ce champ plutôt que l’offre on-chain du mint.
Statut
AmmInfo.status est un unique état énuméré u64, et non un masque de bits. Testez-le par égalité — un client qui teste status & 1 classe mal tous les pools actifs, car l’état de trading normal est 6, dont le bit 0 est positionné.
Initialize2 écrit 7 quand open_time est dans le futur et 6 sinon ; un pool à 7 bascule lui-même à 6 lors du premier swap effectué à state_data.pool_open_time ou après. Une valeur en dehors de 0..=7 fait paniquer AmmStatus::from_u64.
Le multisig Raydium définit l’état via SetParams avec param = 0 (Status) ; seules les valeurs 1–7 sont acceptées. (AdminCancelOrders a été supprimé.)
Observation / oracle
AMM v4 n’a pas de compte d’observation dédié, et depuis la suppression d’OpenBook il n’y a plus non plus d’état de carnet d’ordres pour en dériver un. Si vous avez besoin d’un TWAP Raydium avec support du programme, utilisez CPMM ou CLMM — les deux maintiennent un buffer en anneauObservationState. Sinon, indexez les logs de swap hors chaîne.
Dériver les comptes d’un pool à partir de zéro
Les comptes de pool d’AMM v4 sont de simples PDAs indexés sur le marché lié — ni des keypairs avec seed, ni des PDAs par paire. Chacun d’eux utilise la même forme à trois seeds[AMM_V4_PROGRAM_ID, market, <label>] sous AMM_V4_PROGRAM_ID :
raydium-sdk-v2’s Liquidity.getAssociatedPoolKeys.
En pratique, les intégrateurs lisent l’ensemble complet des comptes du pool depuis GET https://api-v3.raydium.io/pools/info/ids?ids=<POOL_ID> ou depuis le SDK. La dérivation manuelle est rarement nécessaire.
Référence rapide du cycle de vie
Les pools et leurs comptes persistent indéfiniment. Même si la liquidité est entièrement retirée,
AmmInfo reste.
Où lire quoi
- Mathématiques et arithmétique des frais :
products/amm-v4/math. - Répartition des frais et comparaison avec CPMM/CLMM :
products/amm-v4/fees. - Listes de comptes d’instructions :
products/amm-v4/instructions. - Dérivation de comptes OpenBook : source du programme OpenBook (
github.com/openbook-dex/program) — un monorepo Rust, et non de la documentation en prose.
- Programme Raydium AMM —
raydium-io/raydium-amm reference/program-addressespour les ID de programmes canoniques- Protocole OpenBook / Serum pour les comptes de contrepartie

