Skip to main content
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.
  • SDK: @raydium-io/raydium-sdk-v2@0.2.64-alpha
  • Cluster: Solana mainnet-beta
  • ID del programa Stable AMM: 5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h (ver reference/program-addresses)
  • Última verificación: 2026-09-09 contra el SDK 0.2.64-alpha y las demostraciones amm/trade de raydium-sdk-V2-demo
El módulo liquidity del SDK maneja pools de Stable AMM de forma nativa. Los pools estables aparecen como version: 5 (o pooltype: "StablePool") en ApiV3PoolInfoStandardItem; los mismos helpers de addLiquidity / removeLiquidity / swap funcionan para ellos que para los pools de producto constante AMM v4 (version: 4) — el SDK detecta la variante y emite las instrucciones correctas automáticamente. La matemática de curva estable fuera de cadena se encuentra en src/raydium/liquidity/stable.ts.

Configuración

initLayout() no es opcional para pools estables. liquidity.computeAmountOut se ramifica en poolInfo.version: para la versión 4 usa la fórmula de producto constante, y para cualquier otra cosa lee this.stableLayout.stableModelData e interpola la tabla de búsqueda. Ese caché está vacío hasta que se ejecuta initLayout(), por lo que cotizar un pool v5 sin él produce basura en lugar de un error. Es idempotente y económico — llámalo una vez al inicio.Los constructores de transacciones (swap, addLiquidity, removeLiquidity) no lo necesitan: se distribuyen en pooltype.includes("StablePool") y emiten instrucciones AmmV5*, y los límites de cantidad que pasas ya están calculados.
liquidity.computeAmountIn no admite pools estables. A diferencia de computeAmountOut, no tiene rama de versión — siempre aplica la inversa de producto constante, por lo que en un pool v5 devuelve un maxAmountIn incorrecto. Para un swap de salida exacta contra un pool estable, invierte con getDxByDyBaseIn tú mismo (ver Helpers de cotización fuera de cadena abajo) y pasa el resultado a swap con fixedSide: "out".

Identificar un pool estable

Dos señales equivalentes en ApiV3PoolInfoStandardItem:
Tanto AMM v4 (version: 4, producto constante) como Stable AMM (version: 5) fluyen a través de la misma API LiquidityModule en el SDK. Internamente el módulo se distribuye a:
  • InstructionType.AmmV4AddLiquidity / AmmV4RemoveLiquidity para pools v4
  • InstructionType.AmmV5AddLiquidity / AmmV5RemoveLiquidity para pools v5 (estables)
El programId del pool (devuelto con las claves del pool) le dice al SDK a qué programa hacer CPI; no necesitas codificarlo.

Encontrar un pool por par de mints

Si el par de mints tiene tanto un pool v4 (producto constante) como un pool v5 (estable), la respuesta incluye ambos — elige el que tu flujo necesita, o pásalos al programa AMM Routing y deja que elija la mejor ruta.

Hacer swap a través de un pool estable

El flujo LiquidityModule.swap tiene la misma forma que para pools v4 — simplemente pásale un objeto de pool v5. Dos detalles son fáciles de equivocar: computeAmountOut necesita las reservas en vivo del pool injertadas en la información del pool (el elemento de la API solo no las lleva), y su slippage es un número simple, no un Percent:
El SDK lee el programId del pool desde las claves del pool y se distribuye al programa Stable AMM. No se necesita un argumento programId especial.

Agregar y remover liquidez

addLiquidity y removeLiquidity funcionan de forma idéntica en pools v4 y v5:
Internamente el SDK emite InstructionType.AmmV5AddLiquidity porque pooltype.includes("StablePool") es verdadero. El flujo correspondiente de removeLiquidity es simétrico — proporciona lpAmount y las cantidades mínimas que aceptarás en cada lado.

Helpers de cotización fuera de cadena (stable.ts)

Para cotización del lado del servidor o backtesting, el SDK expone la matemática de curva estable subyacente:
Estas son funciones puras — sin RPC, sin firma. El ModelDataInfo en cadena se obtiene una vez mediante initLayout() y se almacena en caché dentro de raydium.liquidity.stableLayout, legible como .stableModelData. initStableModelLayout() es idempotente: solo vuelve a obtener mientras validDataCount === 0, por lo que llamar a initLayout() nuevamente es gratis. Pasa las reservas actuales (x, y) y los helpers calculan buscando binariamente la tabla de búsqueda e interpolando linealmente entre las dos filas DataElement circundantes. Ver products/stable/math para el algoritmo subyacente.

Enrutamiento a través de AMM Routing (multi-salto / mejor precio)

Si no quieres elegir un venue tú mismo, el programa AMM Routing considerará cada AMM de Raydium (v4 / CPMM / CLMM / estable) y enrutará a través de la combinación que sea mejor: El enrutador es un pipeline de cinco llamadas en lugar de un único swap(), y está escrito completamente — con el consejo de almacenamiento en caché que lo hace utilizable en producción — en products/routing/code-demos. La forma es:
No existe raydium.tradeV2.fetchRoutes, y tradeV2.swap no acepta inputMint / outputMint / slippage — toma un swapInfo ya calculado de getAllRouteComputeAmountOut. Para un pool único conocido, usa el constructor de ese tipo de pool (raydium.liquidity.swap para AMM v4 y estable, raydium.cpmm.swap, raydium.clmm.swap) como se muestra anteriormente en esta página.
Esta es la ruta recomendada para swappers y agregadores en producción — nunca necesitas decidir manualmente si existe un pool estable o si es el mejor venue hoy.

Recomendaciones

  1. Para swaps de usuario final, prefiere el flujo de enrutamiento tradeV2. Maneja cada tipo de pool de Raydium incluyendo estable.
  2. Para operaciones específicas de pool (agregar/remover LP en un pool estable conocido), usa LiquidityModule directamente — detecta automáticamente pools v5.
  3. Para cotización fuera de cadena / análisis, llama a getStablePrice / getDyByDxBaseIn / getDxByDyBaseIn después de initLayout(). Sin tráfico RPC por cotización después de que los datos del modelo se almacenan en caché.
  4. No codifiques manualmente instrucciones SwapBaseIn brutas. La actualización 2026-06-22 eliminó las cuentas OpenBook muertas, por lo que el nuevo diseño de swap toma 9 cuentas (el antiguo diseño de 18 cuentas aún se analiza para compatibilidad hacia atrás). Deposit ahora es 12 cuentas (antiguo 14 compatible), Withdraw 12 (antiguo 21/22 compatible), y WithdrawPnl 10 sin ninguna ruta de compatibilidad. Los helpers precompilados del SDK seleccionan el diseño y orden correcto para ti; hacer el tuyo propio es propenso a errores. Ver products/stable/instructions para las tablas de cuentas completas.

Dónde ir a continuación

  • Math — cómo funciona la interpolación de tabla de búsqueda.
  • Instructions — referencia completa de instrucciones.
  • AMM Routing — enrutamiento multi-pool en AMM v4, CPMM, CLMM, estable.
Fuentes: