Cette page est traduite automatiquement par IA. La version anglaise fait foi.Voir la version anglaise →
Qu’est-ce qu’un IDL
Les programmes Anchor sur Solana publient un fichier IDL (Interface Definition Language) décrivant leurs instructions, les dispositions des comptes, l’énumération des erreurs et les schémas de structures. L’IDL est la source de vérité pour la génération de code client — le SDK TS, la crate CPI Rust et les clients tiers sont tous générés à partir de celui-ci (ou écrits manuellement contre lui). Raydium publie des IDLs pour CPMM, CLMM et LaunchLab. AMM v4, Stable AMM et Farm (v3 / v5 / v6) sont antérieurs à Anchor ou ne sont pas distribués par Anchor — leurs structures de compte sont maintenues manuellement dans le SDK.Où les trouver
Les IDLs se trouvent dans un dépôt dédié :
Les fichiers IDL sont versionnés dans l’historique git du dépôt ; épinglez à un commit spécifique si vous avez besoin d’une reproductibilité byte-for-byte.
Certains IDLs peuvent également être extraits directement du mainnet :
Les trois comptes IDL hérités sont modifiables par l’autorité IDL
2XVnob28A5Qnpcy95UVeHWNT6G8Poy3tpA3AFyAMoZDt, qui est distincte de l’autorité de mise à niveau BPF des programmes — donc un IDL peut être actualisé sans redéploiement, et peut aussi être en retard sur un redéploiement. Traitez l’IDL on-chain comme une commodité, pas comme une preuve de la forme du bytecode déployé.
Régénérer un client TypeScript
La génération de code d’Anchor produit un client typé à partir de l’IDL :raydium.cpmm.swap(...) qui enveloppe les méthodes Anchor plus toute la comptabilité (création d’ATA, ajustement des frais de transfert, budget de calcul, routage du programme Token-2022). Régénérez uniquement quand vous avez besoin d’une couche en dessous du SDK.
Régénérer un client Rust (crate CPI)
Raydium publie des crates Anchor pour les programmes qui ont des IDLs :raydium_cp_swap et raydium_clmm. Il n’existe pas de crate appelée raydium_amm_v3 sous aucune orthographe. Notez que les branches diffèrent : la branche master de raydium-cp-swap épingle toujours anchor-lang 0.32.1, donc une intégration Anchor-1.0 a besoin de chore/upgrade-anchor ; CLMM est sur 0.32.1 de toute façon, c’est pourquoi les deux ne peuvent pas partager une crate.
La fonctionnalité cpi expose les structures de compte cpi::accounts::<Ix> et les invocateurs cpi::<ix>() — des wrappers CPI prêts à l’emploi. Voir sdk-api/rust-cpi pour les modèles d’utilisation.
Si vous préférez générer des liaisons fraîches :
Régénérer un client Python
Il n’existe pas de SDK Python officiel Raydium. Les générateurs tiers incluent :anchorpy— port Python du client TypeScript d’Anchor. Génère des constructeurs de méthodes typés à partir d’IDLs.solders— primitives Solana de bas niveau (transactions, paires de clés, clés publiques) dans les liaisons Rust ; utilisé sousanchorpy.
sdk-api/python-integration pour une présentation plus complète.
Politique de changement d’IDL
Raydium suit ces règles pour la stabilité de l’IDL :- Les discriminateurs d’instruction ne changent jamais. L’ajout de nouvelles instructions étend l’énumération à la fin ; les discriminateurs existants restent stables.
- Les tailles de compte sont stables ; les nouveaux champs sortent du remplissage réservé. Chaque structure d’état Raydium porte une région de remplissage finale dimensionnée à la création, et un nouveau champ est extrait de ce remplissage plutôt qu’ajouté — donc la longueur en octets du compte et les décalages de tous les champs pré-existants restent fixes. Le corollaire est que les octets que vous lisiez précédemment comme remplissage peuvent devenir significatifs, et un champ peut être retiré dans le remplissage (comme
PlatformConfig.curve_paramsl’a été dans la version du 2026-08-31). Relisez la définition de la structure après une mise à niveau ; ne supposez pas que le remplissage reste zéro. - Les codes d’énumération d’erreur sont append-only. Un code d’erreur existant signifie toujours la même chose.
- Les changements de rupture sont livrés dans de nouveaux programmes. Quand une refonte est nécessaire, l’équipe déploie un nouvel ID de programme (par exemple CPMM comme un programme frais plutôt que de mettre à niveau AMM v4). Les anciens pools continuent à fonctionner sur l’ancien programme ; les nouveaux pools vont au nouveau.
Que faire quand l’IDL change
- Mettez à jour le SDK.
npm update @raydium-io/raydium-sdk-v2. - Régénérez votre code client si vous utilisez la génération de code Anchor directement.
- Comparez la disposition du compte. Les champs de fin de la nouvelle disposition sont la seule chose que votre code n’a pas vue ; confirmez si vous en avez besoin.
- Ne supposez pas que les anciens discriminateurs d’instruction sont invalides. Selon la règle 1, ils fonctionnent toujours.
- Réexécutez les tests d’intégration contre devnet avant de passer au mainnet.
Dépannage d’IDL
Erreurs « Invalid discriminator »
Signifie généralement qu’un client construit contre la version N de l’IDL essaie d’invoquer une instruction qui n’existait que dans une version pré-déploiement du programme. Retirez l’IDL du programme en direct :Échecs de décodage de compte
Siprogram.account.<Name>.fetch(pubkey) lève une exception avec « Invalid account discriminator », le compte a été créé par une version précédente du programme et Anchor rejette son discriminateur de 8 octets. La solution consiste à utiliser l’analyseur de disposition brute du SDK (PoolInfoLayout.decode(accountData)) qui n’applique pas les discriminateurs Anchor.
Instructions manquantes dans le client généré
La génération de code TS d’Anchor ne génère des méthodes que pour les instructions dont l’entrée IDL a unname qui s’analyse comme un identifiant valide. Les instructions de Raydium satisfont toutes à cela, mais si vous voyez une discordance, vérifiez si le fichier IDL provient de la version actuelle du SDK.
Pointeurs
sdk-api/rust-cpi— utilisation des crates CPI Rust.sdk-api/python-integration— Python viaanchorpy.sdk-api/typescript-sdk— le client TS de niveau supérieur.

