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 →
Banner de versión. Esta página documenta @raydium-io/raydium-sdk-v2@0.2.42-alpha, la versión verificada en todas las demostraciones de código de este sitio (2026-04). El SDK está en pre-1.0 y la superficie de tipos ha evolucionado entre versiones — fija la versión que utilices.

Instalar

npm install @raydium-io/raydium-sdk-v2 @solana/web3.js @solana/spl-token
# o
pnpm add @raydium-io/raydium-sdk-v2 @solana/web3.js @solana/spl-token
El SDK está escrito en TypeScript y distribuye .d.ts junto con su artefacto JS. Herramientas mínimas requeridas: Node 18+, TypeScript 5.0+, moduleResolution: "bundler" o "node16".

Inicializar

El punto de entrada es Raydium.load:
import { Raydium } from "@raydium-io/raydium-sdk-v2";
import { Connection, Keypair, clusterApiUrl } from "@solana/web3.js";

const connection = new Connection(process.env.RPC_URL ?? clusterApiUrl("mainnet-beta"));
const owner      = Keypair.fromSecretKey(/* ... */);

const raydium = await Raydium.load({
  owner,
  connection,
  cluster: "mainnet",           // "mainnet" | "devnet"
  disableFeatureCheck: true,    // omitir la llamada a API de detección de características del SDK al iniciar
  blockhashCommitment: "confirmed",
});
Raydium.load es asincrónica porque obtiene una pequeña carga útil /config desde api-v3.raydium.io al iniciar (listando cuentas actuales de AmmConfig, capas de tarifas, etc.). Establece disableFeatureCheck: true en entornos sin conexión; tendrás que proporcionar esos valores manualmente a algunos constructores.

Las cuatro fachadas de módulos

Una vez cargado, el objeto raydium expone cuatro fachadas de módulos, una por superficie de producto:
raydium.cpmm       // Pools CPMM: createPool, addLiquidity, withdrawLiquidity, swap, ...
raydium.clmm       // Pools CLMM: createPool, openPositionFromBase, increasePositionFromBase,
                   //             decreaseLiquidity, harvestAllRewards, swap, ...
raydium.liquidity  // Pools AMM v4: computeAmountOut, swap, addLiquidity, removeLiquidity, ...
raydium.farm       // Farm v3/v5/v6: deposit, withdraw, harvestAllRewards, create, setRewards
raydium.launchpad  // LaunchLab: createLaunchpad, buyExactIn, sellExactIn, graduate, ...
raydium.trade      // Enrutamiento multi-pool: quotes, route-execution (beta en 0.2.41)
raydium.token      // Utilidades: obtener lista de tokens, metadatos, creación de ATA
(Sí, cinco fachadas en total — “cuatro” es la forma en que Raydium las agrupa públicamente, siendo trade y token utilidades de apoyo.)

Constructores de transacciones

Cada función que realiza cambios devuelve un constructor en lugar de ejecutarse inmediatamente:
const { execute, builder, transaction, innerTransactions, extInfo } =
  await raydium.cpmm.addLiquidity({
    poolInfo,
    amountInA,
    amountInB,
    slippage: 0.005,
    txVersion: TxVersion.V0,
  });
Campos devueltos:
  • execute — una función de conveniencia que firma + envía. Equivalente a builder.execute.
  • builder — la instancia de TxBuilder con todas las instrucciones y firmantes acumulados. Llama a .build() para obtener un VersionedTransaction[]; útil cuando necesitas inyectar tus propias instrucciones o firmar con firmantes externos.
  • transaction / innerTransactions — los arrays de instrucciones crudas. Úsalos cuando construyas transacciones compuestas multi-programa.
  • extInfo — extras específicos del producto. Por ejemplo, createPool devuelve extInfo.poolId; createLaunchpad devuelve el nuevo PDA de estado de lanzamiento.
txVersion controla el formato de transacción heredada vs V0. V0 (tablas de búsqueda de direcciones) es la recomendación predeterminada — permite que swaps más grandes se ajusten en una sola transacción.

¿Por qué constructores asincronos?

Casi cada constructor obtiene internamente estado en cadena: información del pool (para quotes), propiedad del programa de tokens (para enrutamiento Token-2022 vs SPL), exención de alquiler de cuenta (para creación de ATA), etc. El SDK cachea agresivamente pero la primera llamada para un pool nuevo implica viajes por RPC. Mantén una instancia raydium con vida larga para evitar re-obtener.

Adiciones del módulo CLMM (versión más reciente)

La fachada CLMM adquirió superficies para las nuevas características de tarifa dinámica, tarifa de un lado y órdenes limitadas:
  • raydium.clmm.createCustomizablePool — superconjunto de createPool que acepta collectFeeOn, enableDynamicFee y dynamicFeeConfigId. Úsalo para cualquier nuevo pool que necesite estos nuevos controles; createPool clásico continúa funcionando para pools con tarifa predeterminada.
  • raydium.clmm.openLimitOrder — abre una orden limitada de un solo tick en un pool que las admite. Toma poolInfo, poolKeys, limitOrderConfig (de /main/clmm-limit-order-config), inputMint, inputAmount y el tick objetivo.
  • raydium.clmm.increaseLimitOrder / decreaseLimitOrder — ajusta la porción sin llenar de una orden existente. Disminuir revierte en una orden completamente llena con InvalidOrderPhase.
  • raydium.clmm.settleLimitOrder / settleAllLimitOrder — barre la salida llenada hacia el ATA del propietario. Ya sea el propietario de la orden o el guardián limit_order_admin del pool pueden llamarlos.
  • raydium.clmm.closeLimitOrder / closeAllLimitOrder — cierra órdenes completamente liquidadas para recuperar alquiler.
  • raydium.api.getClmmDynamicConfigs() / getClmmLimitOrderConfigs() — ayudantes REST que conectan con los nuevos endpoints /main/clmm-dynamic-config y /main/clmm-limit-order-config.
Una pequeña reorganización también movió utils/ a libraries/. El código que importaba desde @raydium-io/raydium-sdk-v2/utils/... debe cambiar a @raydium-io/raydium-sdk-v2/libraries/.... El barril del paquete de nivel superior permanece sin cambios, así que la mayoría de usuarios nunca ven el cambio de nombre. Los tutoriales de TypeScript de principio a fin se encuentran en products/clmm/code-demos.

Errores comunes

1. Desajuste de cluster

La configuración de inicio del SDK es específica del cluster. Mezclar cluster: "mainnet" con una Connection de devnet causa enrutamiento erróneo silencioso: el SDK cita contra AmmConfig de mainnet pero envía a devnet. Siempre pasa ambos.

2. Olvidar pre-crear ATAs

En la primera interacción con un mint, la Cuenta de Token Asociada del usuario puede no existir. El SDK pre-añade automáticamente una instrucción AssociatedTokenAccount::create cuando detecta un ATA faltante, lo que cuesta una pequeña cantidad de alquiler. Si tu billetera es baja en SOL, esto fallará silenciosamente. Verifica y financia antes de reintentar.

3. poolInfo anticuado

poolInfo es una instantánea almacenada en caché. Si el estado del pool ha cambiado desde que lo obtuviste (un trade grande movió el precio, por ejemplo), el minAmountOut del swap puede ser calculado contra el estado antiguo y caer por debajo del monto de salida en cadena, revirtiendo. Re-obtén poolInfo inmediatamente antes de construir transacciones de alto valor, o usa el computeAmountOut del SDK que re-consulta las reservas.

4. Tarifas de prioridad

El SDK no añade precios de unidad de cálculo por defecto. En ventanas de alto volumen (lanzamientos de nuevos pools, eventos de monedas meme) esto significa que tu transacción compite con muchas otras y puede no llegar. Suministra un computeBudgetConfig explícito:
const { execute } = await raydium.cpmm.swap({
  poolInfo,
  inputAmount: new BN(...),
  swapResult: ...,
  slippage: 0.005,
  txVersion: TxVersion.V0,
  computeBudgetConfig: {
    units: 250_000,          // límite de CU
    microLamports: 50_000,   // tarifa de prioridad por CU
  },
});
Consulta integration-guides/priority-fee-tuning para orientación sobre dimensionamiento.

5. La tolerancia de slippage debe coincidir con el tipo de pool

CPMM y AMM v4 utilizan matemática CPMM (bajo impacto en trades normales). CLMM es por partes (el impacto salta en cruces de tick). Si copias una tolerancia de slippage de 0.5% de un ejemplo CPMM en un swap CLMM que cruza varios ticks, la transacción probablemente revierta. El computeAmountOut del SDK devuelve priceImpact; dimensiona tu tolerancia por encima de eso.

6. BN vs number

Todos los campos de cantidad en el SDK son instancias de BN de bn.js — nunca number de JavaScript. Convertir valores de cantidad vía .toNumber() trunca silenciosamente en 2^53; para cualquier valor por encima de ~9 cuatrillones (no poco común en mints de 9 decimales), esto produce el resultado incorrecto. Mantén todo en BN hasta la renderización final de la interfaz de usuario.

Política de versionado

  • @raydium-io/raydium-sdk-v2 es el único SDK que Raydium mantiene. Toda la documentación, demostraciones y orientación de integración lo apuntan.
  • Un paquete v1 más antiguo (@raydium-io/raydium-sdk) existe en npm por razones históricas. El mantenimiento terminó después de que CPMM y LaunchLab se lanzaran (v1 nunca ganó soporte para ninguno de los dos), y no ha habido lanzamientos v1 desde 2024. Trata v1 como fin de vida: no lo uses para código nuevo, y migra cualquier integración v1 restante a v2.
  • El SDK v2 es pre-1.0. Los cambios que rompen la compatibilidad entre versiones menores 0.x son posibles; fija la versión que hayas verificado y revisa las notas de lanzamiento de GitHub al actualizar.

Actualizar

Cuando actualices entre versiones menores del SDK:
  1. Vuelve a verificar el tipo de retorno de cada llamada que realiza cambios — los cambios de forma (p. ej. extInfo) ocurren frecuentemente.
  2. Regenera las firmas de obtención de poolInfo — un campo puede haber sido renombrado.
  3. Vuelve a verificar tu manejo de slippage; el SDK ha alternado entre comportamientos de vinculación automática e opcional en versiones anteriores.
  4. Si usas raydium.trade (enrutamiento), vuelve a verificar la forma de la ruta — es la parte más inestable de la superficie.

Obtener ayuda

Para preguntas sobre SDK y API: Para problemas de seguridad, no publiques en canales públicos — consulta security/disclosure.

Enlaces relacionados

Fuentes: