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 von 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 Repos 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 durch die IDL-Autorität
2XVnob28A5Qnpcy95UVeHWNT6G8Poy3tpA3AFyAMoZDt beschreibbar, 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. Beachten Sie den Branch. Beide Repos’ master pinnen immer noch anchor-lang 0.32.1, daher benötigt eine Anchor-1.0-Integration chore/upgrade-anchor auf jedem. Mit beiden Crates auf diesem Branch teilen sie =1.0.2 und können in einer Crate leben. Das Mischen einer master-Crate mit einer Upgrade-Branch-Crate wird nicht erstellt.
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-Struktur 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 Version vom 2026-08-31). Lesen Sie die Struct-Definition nach einem Upgrade erneut; gehen Sie nicht davon aus, dass Padding Null bleibt. - Error-Enum-Codes sind nur Anhänge. 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 neues 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
Fehler „Invalid discriminator”
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 vorhanden war. Ziehen Sie die IDL erneut aus dem Live-Programm:Account-Dekodierungsfehler
Wennprogram.account.<Name>.fetch(pubkey) mit „Invalid account discriminator” fehlschlägt, 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 keine Anchor-Diskriminatoren 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. Rayidums 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.

