Zum Hauptinhalt springen

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.

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 Anweisungen, Account-Layouts, Error-Enums 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 aus ihr generiert (oder von Hand geschrieben). Raydium veröffentlicht IDLs für CPMM, CLMM und LaunchLab. AMM v4, Stable AMM und Farm entstanden 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:
https://github.com/raydium-io/raydium-idl
Die genauen Dateien:
ProgrammIDL-Datei
CPMMraydium_cpmm/raydium_cp_swap.json
CLMMraydium_clmm/raydium_clmm.json
LaunchLabraydium_launchpad/raydium_launchpad.json
AMM v4keine offizielle IDL — siehe raydium-sdk-V2/src/raydium/liquidity/layout.ts für manuell gepflegte Layouts
Stable AMMkeine offizielle IDL — Layouts sind im SDK
Farmkeine offizielle IDL — Layouts sind im SDK
Die IDL-Dateien sind in der Git-Historie des Repos versioniert; fixieren Sie auf einen bestimmten Commit, wenn Sie Byte-für-Byte-Reproduzierbarkeit benötigen. IDLs können auch direkt von den bereitgestellten Programmen über Anchors On-Chain-IDL-Funktion abgerufen werden (falls der Programmveröffentlicher sich dafür entschieden hat):
anchor idl fetch <PROGRAM_ID> --provider.cluster mainnet
CPMM, CLMM und LaunchLab verfügen alle über On-Chain-IDLs. AMM v4, Stable AMM und Farm nicht (Programme vor Anchor).

TypeScript-Client regenerieren

Anchors Codegen erstellt einen typisierten Client aus der IDL:
# Mit dem Anchor CLI
anchor build
anchor idl parse \
  --file target/idl/cpmm.json \
  --out target/types/cpmm.ts

# Oder mit den `@coral-xyz/anchor` TS-Helfern zur Laufzeit:
import { Program, AnchorProvider } from "@coral-xyz/anchor";
// Ziehen Sie die IDL direkt aus dem raydium-idl Repo (oder integrieren Sie sie in Ihr Projekt).
import cpmmIdl from "./idls/raydium_cp_swap.json";

const provider = new AnchorProvider(connection, wallet, {});
const program  = new Program(cpmmIdl as any, CPMM_PROGRAM_ID, provider);

// Typisierte Methodenbauer werden automatisch generiert:
await program.methods
  .swapBaseInput(new BN(amountIn), new BN(minAmountOut))
  .accounts({ ... })
  .rpc();
Die meisten Integrator machen das nicht — sie verwenden stattdessen den höherstufigen raydium.cpmm.swap(...)-Helfer, der die Anchor-Methoden plus alle administrativen Aufgaben (ATA-Erstellung, Transfergebührenanpassung, Compute-Budget, Token-2022-Programm-Routing) kapselt. Regenerieren Sie nur, wenn Sie eine Schicht unterhalb des SDK benötigen.

Rust-Client regenerieren (CPI-Crate)

Raydium veröffentlicht Anchor-Crates für die Programme, die IDLs haben:
# Cargo.toml
[dependencies]
raydium_cp_swap = { git = "https://github.com/raydium-io/raydium-cp-swap", branch = "master", features = ["cpi"] }
raydium_amm_v3 = { git = "https://github.com/raydium-io/raydium-clmm",    branch = "master", features = ["cpi"] }
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 neue Bindungen generieren möchten:
# Aus der IDL mit anchor-client
anchor idl parse \
  --file raydium_cpmm/raydium_cp_swap.json \
  --out src/generated/cpmm_bindings.rs

Python-Client regenerieren

Es gibt kein offizielles Raydium Python SDK. Generatoren von Drittanbietern sind:
  • anchorpy — Python-Port von @coral-xyz/anchor. Generiert typisierte Methodenbauer aus IDLs.
  • solders — Low-Level-Solana-Primitive (Transaktionen, Keypairs, Pubkeys) in Rust-Bindungen; wird unter anchorpy verwendet.
pip install anchorpy solders solana
from anchorpy import Program, Provider
from solana.rpc.async_api import AsyncClient
from pathlib import Path
import json

idl = json.loads(Path("cpmm.json").read_text())
provider = Provider(AsyncClient("https://api.mainnet-beta.solana.com"), wallet)
program  = Program(idl, CPMM_PROGRAM_ID, provider)

await program.rpc["swap_base_input"](amount_in, min_amount_out, ctx=Context(accounts={...}))
Siehe sdk-api/python-integration für eine ausführlichere Anleitung.

IDL-Änderungsrichtlinie

Raydium befolgt diese Regeln für IDL-Stabilität:
  1. Anweisungs-Diskriminatoren ändern sich nie. Das Hinzufügen neuer Anweisungen erweitert das Enum am Ende; bestehende Diskriminatoren bleiben stabil.
  2. Account-Struct-Layouts entwickeln sich nur additiv. Neue Felder kommen am Ende hin, vorher kommt eine Größenerhöhung im On-Chain-Schema. Bestehende Felder behalten ihre Offsets.
  3. Error-Enum-Codes sind nur anhängbar. Ein bestehender Error-Code bedeutet immer dasselbe.
  4. Breaking Changes werden in neuen Programmen ausgerollt. Wenn ein Redesign erforderlich ist, setzt das Team eine neue Programm-ID ein (z. B. CPMM als frisches Programm statt AMM v4 zu aktualisieren). Alte Pools laufen weiterhin auf dem alten Programm; neue Pools gehen zum neuen.
Diese Richtlinie macht regenerierte Clients rückwärtskompatibel: Ein Client, der gegen eine zwei Versionen alte IDL generiert wurde, kann den aktuellen Zustand immer noch korrekt dekodieren (er sieht zusätzliche nachfolgende Bytes als Padding).

Was zu tun ist, wenn sich die IDL ändert

  1. Das SDK aktualisieren. npm update @raydium-io/raydium-sdk-v2.
  2. Ihren Client-Code regenerieren, wenn Sie Anchor Codegen direkt verwenden.
  3. Das Account-Layout vergleichen. Die nachfolgenden Felder des neuen Layouts sind das Einzige, das Ihr Code nicht gesehen hat; überprüfen Sie, ob Sie sie benötigen.
  4. Gehen Sie nicht davon aus, dass alte Anweisungs-Diskriminatoren ungültig sind. Gemäß Regel 1 funktionieren sie immer noch.
  5. Führen Sie Integrationstests erneut durch auf Devnet, bevor Sie zu Mainnet wechseln.

IDL-Fehlerbehebung

„Invalid discriminator”-Fehler

Dies bedeutet normalerweise, dass ein Client, der gegen Version N der IDL erstellt wurde, versucht, eine Anweisung aufzurufen, die es nur in einer Version des Programms vor der Bereitstellung gab. Ziehen Sie die IDL erneut vom Live-Programm:
anchor idl fetch <PROGRAM_ID>

Account-Dekodierungsfehler

Wenn program.account.<Name>.fetch(pubkey) mit „Invalid account discriminator” fehlschlägt, wurde das 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 durchsetzt.

Fehlende Anweisungen im generierten Client

Anchors TS Codegen generiert nur Methoden für Anweisungen, deren IDL-Eintrag einen name hat, der als gültiger Identifier analysiert wird. Raydiums Anweisungen erfüllen alle diese Anforderung, aber wenn Sie einen Unterschied feststellen, überprüfen Sie, ob die IDL-Datei aus der aktuellen SDK-Version stammt.

Zeiger

Quellen: