Saltar al contenido principal

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.

Esta página fue traducida automáticamente por IA. La versión en inglés es la fuente autorizada.Ver versión en inglés →

Qué es un IDL

Los programas Anchor en Solana publican un archivo IDL (Interface Definition Language) que describe sus instrucciones, esquemas de cuenta, enumeración de errores y esquemas de struct. El IDL es la fuente de verdad para la generación de código cliente — el SDK de TS, la crate de CPI de Rust y los clientes de terceros se generan a partir de él (o se escriben manualmente contra él). Raydium publica IDLs para CPMM, CLMM y LaunchLab. AMM v4, Stable AMM y Farm (v3 / v5 / v6) son anteriores a Anchor o no se distribuyen con Anchor de otra manera — sus estructuras de cuenta se mantienen manualmente en el SDK.

Dónde encontrarlos

Los IDLs viven en un repositorio dedicado:
https://github.com/raydium-io/raydium-idl
Los archivos exactos:
ProgramaArchivo IDL
CPMMraydium_cpmm/raydium_cp_swap.json
CLMMraydium_clmm/raydium_clmm.json
LaunchLabraydium_launchpad/raydium_launchpad.json
AMM v4sin IDL oficial — consulta raydium-sdk-V2/src/raydium/liquidity/layout.ts para esquemas escritos manualmente
Stable AMMsin IDL oficial — esquemas en el SDK
Farmsin IDL oficial — esquemas en el SDK
Los archivos IDL están versionados en el historial de git del repositorio; ancla a un commit específico si necesitas reproducibilidad byte por byte. Los IDLs también se pueden extraer directamente de los programas desplegados mediante la característica on-chain IDL de Anchor (si el editor del programa optó por ello):
anchor idl fetch <PROGRAM_ID> --provider.cluster mainnet
CPMM, CLMM y LaunchLab tienen todos IDLs on-chain. AMM v4, Stable AMM y Farm no (programas anteriores a Anchor).

Regenerar un cliente TypeScript

La generación de código de Anchor produce un cliente tipificado a partir del IDL:
# Usando el CLI de anchor
anchor build
anchor idl parse \
  --file target/idl/cpmm.json \
  --out target/types/cpmm.ts

# O con los helpers TS de `@coral-xyz/anchor` en tiempo de ejecución:
import { Program, AnchorProvider } from "@coral-xyz/anchor";
// Extrae el IDL directamente del repositorio raydium-idl (o inclúyelo en tu proyecto).
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);

// Métodos tipificados generados automáticamente:
await program.methods
  .swapBaseInput(new BN(amountIn), new BN(minAmountOut))
  .accounts({ ... })
  .rpc();
La mayoría de los integradores no hacen esto — usan el helper de nivel superior raydium.cpmm.swap(...) que envuelve los métodos de Anchor más toda la gestión (creación de ATA, ajuste de comisión de transferencia, presupuesto de cómputo, enrutamiento de programa Token-2022). Regenera solo cuando necesites una capa por debajo del SDK.

Regenerar un cliente Rust (crate de CPI)

Raydium publica crates de Anchor para los programas que tienen IDLs:
# 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"] }
La característica cpi expone structs de cuenta cpi::accounts::<Ix> e invocadores cpi::<ix>() — envoltorios de CPI listos para usar. Consulta sdk-api/rust-cpi para patrones de uso. Si prefieres generar enlaces frescos:
# Desde el IDL, usando anchor-client
anchor idl parse \
  --file raydium_cpmm/raydium_cp_swap.json \
  --out src/generated/cpmm_bindings.rs

Regenerar un cliente Python

No hay un SDK oficial de Raydium para Python. Los generadores de terceros incluyen:
  • anchorpy — puerto de Python de @coral-xyz/anchor. Genera constructores de métodos tipificados a partir de IDLs.
  • solders — primitivos de Solana de bajo nivel (transacciones, keypairs, pubkeys) en enlaces de Rust; se usa debajo de anchorpy.
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={...}))
Consulta sdk-api/python-integration para un recorrido más completo.

Política de cambios de IDL

Raydium sigue estas reglas para la estabilidad del IDL:
  1. Los discriminadores de instrucción nunca cambian. Agregar nuevas instrucciones extiende la enumeración al final; los discriminadores existentes permanecen estables.
  2. Los esquemas de struct de cuenta evolucionan solo de manera aditiva. Los nuevos campos van al final, precedidos por un bump de tamaño en el esquema on-chain. Los campos existentes mantienen sus desplazamientos.
  3. Los códigos de enumeración de errores son solo aditivos. Un código de error existente siempre significa lo mismo.
  4. Los cambios que rompen compatibilidad se envían en nuevos programas. Cuando se necesita un rediseño, el equipo despliega un nuevo ID de programa (por ejemplo, CPMM como un programa nuevo en lugar de actualizar AMM v4). Los pools antiguos continúan ejecutándose en el programa antiguo; los nuevos pools van al nuevo.
Esta política hace que los clientes regenerados sean compatibles hacia atrás: un cliente generado contra un IDL de hace dos versiones aún decodificará el estado actual correctamente (ve los bytes finales adicionales como relleno).

Qué hacer cuando cambia el IDL

  1. Actualiza el SDK. npm update @raydium-io/raydium-sdk-v2.
  2. Regenera tu código cliente si usas la generación de código de Anchor directamente.
  3. Compara el esquema de cuenta. Los campos finales del nuevo esquema son la única cosa que tu código no ha visto; confirma si los necesitas.
  4. No asumas que los discriminadores de instrucción antiguos son inválidos. Según la regla 1, aún funcionan.
  5. Vuelve a ejecutar las pruebas de integración contra devnet antes de pasar a mainnet.

Solución de problemas de IDL

Errores de “Invalid discriminator”

Generalmente significa que un cliente construido contra la versión N del IDL intenta invocar una instrucción que existía solo en una versión anterior del programa. Vuelve a extraer el IDL del programa en vivo:
anchor idl fetch <PROGRAM_ID>

Fallos al decodificar cuentas

Si program.account.<Name>.fetch(pubkey) falla con “Invalid account discriminator”, la cuenta fue creada por una versión anterior del programa y Anchor está rechazando su discriminador de 8 bytes. La solución es usar el analizador de esquema sin procesar del SDK (PoolInfoLayout.decode(accountData)) que no hace cumplir los discriminadores de Anchor.

Instrucciones faltantes en el cliente generado

La generación de código TS de Anchor solo genera métodos para instrucciones cuya entrada de IDL tiene un name que se analiza como un identificador válido. Las instrucciones de Raydium todas satisfacen esto, pero si ves una discrepancia, verifica si el archivo IDL es de la versión actual del SDK.

Referencias

Fuentes: