Diese Seite wurde mit KI automatisch übersetzt. Maßgeblich ist stets die englische Version.Englische Version ansehen →
Was eine IDL ist
Anchor-Programme auf Solana veröffentlichen eine IDL-Datei (Interface Definition Language), die ihre Instruktionen, Account-Layouts, Error-Enum und Struct-Schemas beschreibt. Die IDL ist die Quelle der Wahrheit für die Client-Code-Generierung — das TS SDK, die Rust-CPI-Crate und Clients von Drittanbietern werden alle davon generiert (oder manuell dagegen geschrieben). Raydium veröffentlicht IDLs für CPMM, CLMM und LaunchLab. AMM v4, Stable AMM und Farm (v3 / v5 / v6) stammen aus der Zeit vor Anchor oder werden anderweitig nicht über Anchor verteilt — ihre Account-Strukturen werden manuell im SDK gepflegt.Wo Sie sie finden
IDLs befinden sich in einem dedizierten Repository:
Die IDL-Dateien sind in der Git-Historie des Repositories versioniert; pinnen Sie auf einen bestimmten Commit, wenn Sie Byte-für-Byte-Reproduzierbarkeit benötigen.
Einige IDLs können auch direkt von Mainnet abgerufen werden:
Alle drei Legacy-IDL-Accounts sind beschreibbar durch die IDL-Autorität
2XVnob28A5Qnpcy95UVeHWNT6G8Poy3tpA3AFyAMoZDt, die von der BPF-Upgrade-Autorität der Programme getrennt ist — daher kann eine IDL aktualisiert werden, ohne neu bereitzustellen, und kann auch hinter einer Neubereitstellung zurückbleiben. Behandeln Sie die On-Chain-IDL als Komfort, nicht als Beweis für die Form des bereitgestellten Bytecodes.
Regenerieren eines TypeScript-Clients
Anchors Codegen erzeugt einen typisierten Client aus der IDL:raydium.cpmm.swap(...)-Helfer, der die Anchor-Methoden plus alle Verwaltungsaufgaben umhüllt (ATA-Erstellung, Transfer-Fee-Anpassung, Compute-Budget, Token-2022-Programm-Routing). Regenerieren Sie nur, wenn Sie eine Schicht unter dem SDK benötigen.
Regenerieren eines Rust-Clients (CPI-Crate)
Raydium veröffentlicht Anchor-Crates für die Programme, die IDLs haben:raydium_cp_swap und raydium_clmm. Es gibt keine Crate namens raydium_amm_v3 unter irgendeiner Schreibweise. Beide Repositories pinnen anchor-lang =1.0.2 auf master, daher teilen sich die beiden Crates eine Anchor-Zeile und können in einer Crate leben.
Das cpi-Feature stellt cpi::accounts::<Ix>-Account-Structs und cpi::<ix>()-Aufrufer bereit — einsatzbereite CPI-Wrapper. Siehe sdk-api/rust-cpi für Verwendungsmuster.
Wenn Sie lieber frische Bindings generieren möchten:
Regenerieren eines Python-Clients
Es gibt kein offizielles Raydium Python SDK. Generatoren von Drittanbietern sind:anchorpy— Python-Port des Anchor TypeScript-Clients. Generiert typisierte Methoden-Builder aus IDLs.solders— Low-Level-Solana-Primitive (Transaktionen, Keypairs, Pubkeys) in Rust-Bindings; wird unteranchorpyverwendet.
sdk-api/python-integration für eine ausführlichere Anleitung.
IDL-Änderungsrichtlinie
Raydium befolgt diese Regeln für IDL-Stabilität:- Instruktions-Diskriminatoren ändern sich nie. Das Hinzufügen neuer Instruktionen erweitert das Enum am Ende; bestehende Diskriminatoren bleiben stabil.
- Account-Größen sind stabil; neue Felder kommen aus reserviertem Padding. Jede Raydium-State-Struct trägt eine nachfolgende Padding-Region, die bei der Erstellung dimensioniert wird, und ein neues Feld wird aus diesem Padding herausgeschnitten, anstatt angehängt zu werden — daher bleiben die Byte-Länge des Accounts und die Offsets aller bereits vorhandenen Felder fest. Die Folge ist, dass Bytes, die Sie zuvor als Padding gelesen haben, aussagekräftig werden können, und ein Feld kann zurück in Padding zurückgezogen werden (wie
PlatformConfig.curve_paramsin der 2026-08-31-Version). Lesen Sie die Struct-Definition nach einem Upgrade erneut; gehen Sie nicht davon aus, dass Padding Null bleibt. - Error-Enum-Codes sind nur zum Anhängen. Ein vorhandener Error-Code bedeutet immer dasselbe.
- Breaking Changes werden in neuen Programmen ausgeliefert. Wenn ein Redesign erforderlich ist, stellt das Team eine neue Programm-ID bereit (z. B. CPMM als frisches Programm statt Upgrade von AMM v4). Alte Pools laufen weiterhin auf dem alten Programm; neue Pools gehen zum neuen.
Was zu tun ist, wenn sich die IDL ändert
- Aktualisieren Sie das SDK.
npm update @raydium-io/raydium-sdk-v2. - Regenerieren Sie Ihren Client-Code, wenn Sie Anchor-Codegen direkt verwenden.
- Diff das Account-Layout. Die nachfolgenden Felder des neuen Layouts sind das Einzige, das Ihr Code nicht gesehen hat; bestätigen Sie, ob Sie sie benötigen.
- Gehen Sie nicht davon aus, dass alte Instruktions-Diskriminatoren ungültig sind. Gemäß Regel 1 funktionieren sie immer noch.
- Führen Sie Integrationstests erneut aus gegen Devnet, bevor Sie zu Mainnet wechseln.
IDL-Fehlerbehebung
„Invalid discriminator”-Fehler
Bedeutet normalerweise, dass ein Client, der gegen Version N der IDL erstellt wurde, versucht, eine Instruktion aufzurufen, die nur in einer Pre-Deploy-Version des Programms existierte. Ziehen Sie die IDL erneut aus dem Live-Programm:Account-Dekodierungsfehler
Wennprogram.account.<Name>.fetch(pubkey) mit „Invalid account discriminator” wirft, wurde der Account von einer vorherigen Programmversion erstellt und Anchor lehnt seinen 8-Byte-Diskriminator ab. Die Lösung besteht darin, den Raw-Layout-Parser aus dem SDK (PoolInfoLayout.decode(accountData)) zu verwenden, der Anchor-Diskriminatoren nicht erzwingt.
Fehlende Instruktionen im generierten Client
Anchors TS-Codegen generiert nur Methoden für Instruktionen, deren IDL-Eintrag einenname hat, der als gültiger Bezeichner analysiert wird. Raydiums Instruktionen erfüllen alle diese Anforderungen, aber wenn Sie einen Unterschied sehen, überprüfen Sie, ob die IDL-Datei aus der aktuellen SDK-Version stammt.
Verweise
sdk-api/rust-cpi— Verwendung der Rust-CPI-Crates.sdk-api/python-integration— Python überanchorpy.sdk-api/typescript-sdk— der höherstufige TS-Client.

