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 →

Dos conceptos distintos

El impacto de precio y el slippage se confunden frecuentemente en las interfaces, pero se refieren a cosas diferentes.
  • Impacto de precio es una propiedad determinística de una operación contra un estado específico del pool. Dado (Δin, reserves), el impacto de precio es completamente computable antes de enviar la operación.
  • Slippage es la diferencia realizada entre el precio que esperabas en el momento de la cotización y el precio que realmente obtuviste en el momento de la ejecución. Es una función de la latencia, transacciones concurrentes y orden de inclusión en bloques — no de las matemáticas del pool.
Una cotización del 1% contra un pool inactivo tiene 0% de slippage si se incluye en el siguiente bloque; el 1% fue el impacto de precio. Esa misma cotización resulta 0.2% peor si otra operación golpea el pool primero — el 0.2% adicional es slippage.

Definiciones formales

Impacto de precio

Para un CPMM: impact ≈ 2 · Δin / reserve_in para operaciones pequeñas. Para CLMM: depende de cuántos ticks cruce la operación; a menudo plano dentro del rango de tick actual, saltando en cada cruce de tick.

Slippage realizado

El slippage siempre es no negativo (o cero), asumiendo que la cotización fue honesta. Un valor negativo significaría que obtuviste más de lo cotizado — posible si el estado del pool se movió a tu favor entre la cotización y la ejecución.

Dimensionamiento de minAmountOut y maxAmountIn

Cada swap de Raydium toma un límite de protección contra slippage:
  • SwapBaseInput(amount_in, min_amount_out) — entrada exacta, límite inferior en la salida.
  • SwapBaseOutput(max_amount_in, amount_out) — salida exacta, límite superior en la entrada.
El SDK calcula estos por producto — los tres no comparten una firma:
En los tres, minAmountOut es amountOut × (1 − slippage) y es lo que va en cadena como límite; priceImpact es determinístico solo del estado del pool; fee es el total cobrado. La tolerancia de slippage es un búfer alrededor del impacto de precio, no el impacto de precio en sí. Una tolerancia del 0.5% significa “acepta como máximo 0.5% peor que mi cotización” — independientemente de si el impacto de precio fue 0.01% (una operación pequeña) o 2% (una operación grande). Para una operación con impacto de precio del 2% y tolerancia del 0.5%, minAmountOut está 2.5% por debajo del spot anterior a la operación — esencialmente la suma del impacto y la tolerancia.

Tolerancias de slippage recomendadas

No hay un número único correcto; el límite correcto depende de:
  1. Estabilidad del par. Los pools stablecoin-stablecoin pueden usar de forma segura 0.1%. Los pools de pares meme volátiles a menudo necesitan 3–5% solo para aterrizar de forma confiable.
  2. Tamaño de la operación. Las operaciones más grandes tienen impactos de precio más grandes, por lo que la tolerancia necesita escalar con ellas para evitar reversión. Los valores predeterminados de auto-slippage del SDK rondan max(0.5%, 2 × price_impact) por esta razón.
  3. Latencia de inclusión en bloque. Las transacciones que permanecen en el mempool durante múltiples bloques están expuestas a más operaciones concurrentes. Los bundles de Jito y las tarifas de prioridad reducen esto.
Reglas prácticas (valores predeterminados de la interfaz de Raydium):

Diferencias entre tipos de AMM

CPMM

El impacto de precio es suave y continuo (forma cerrada 2 · Δin / reserve_in). La tolerancia de slippage escala linealmente con el tamaño de la operación.

AMM v4

Las mismas matemáticas de curva que CPMM. Desde la eliminación de OpenBook, las “reservas efectivas” son solo los dos saldos de bóveda:
  • Cotiza fuera de los saldos de bóveda sin procesar. No hay componente en libro para agregar — Initialize2 escribe AmmInfo.open_orders = Pubkey::default() en cada nuevo pool, e ninguna instrucción lee una cuenta OpenOrders.
  • Resta el PnL de protocolo acumulado (state_data.need_take_pnl_coin / need_take_pnl_pc) de los saldos de bóveda para obtener las reservas que el invariante realmente usa.
  • No hay crank para pre-ejecutar: MonitorStep ahora entra en pánico con unimplemented! y no debe ser enviado.

CLMM

El impacto de precio es por partes. Dentro del rango de tick actual, el impacto es aproximadamente lineal en Δin / L. Cruzar un límite de tick puede cambiar L discretamente, causando un salto repentino en el precio marginal. Una operación que cruza varios ticks escasamente poblados puede tener un impacto mucho mayor de lo que sugiere la regla práctica 2 · Δin / reserve. La cotización CLMM del SDK itera el paso de swap de forma determinística para devolver un amountOut exacto esperado, por lo que minAmountOut = amountOut · (1 − slippage) es correcto. Pero el valor de retorno priceImpact debe interpretarse como “el diferencial entre el spot anterior a la operación y el spot posterior a la operación”, que en CLMM puede ser mucho mayor que el slippage efectivo de la operación para un usuario que solo le importa amount_out.

Curva LaunchLab

Similar a CPMM pero con una curva asimétrica (cuadrática o reservas virtuales). El impacto crece más rápido para compradores tardíos a medida que la curva se inclina hacia la graduación. Las interfaces de pre-comprador deben advertir cuando se espera que una compra empuje la curva más del ~5% de quote_reserve_target en una transacción.

Consideraciones de MEV

En Solana, la extracción de MEV contra swaps toma principalmente la forma de ataques sandwich: un bot coloca una transacción de back-run que opera después de la tuya, más un front-run que opera antes, ambos en el mismo slot. Tu operación se completa a un precio peor del que habría tenido sin el sandwich; el back-run captura la diferencia. Mitigaciones:
  1. minAmountOut ajustado. Los límites de slippage agresivos causan que la transacción de la víctima se revierta si es fuertemente sándwich, protegiendo fondos (pero desperdiciando gas). En Solana esto es práctica estándar — el rechazo es barato.
  2. Bundles de Jito. Enviar a través de Jito con una propina agrupada excluye intermediarios de reordenar tu tx. Los bundles aterrizan como bloques atómicos.
  3. Tarifas de prioridad. Una tarifa de prioridad alta aumenta la probabilidad de que tu operación aterrice en el bloque del líder actual antes de que un sandwicher pueda reaccionar. Menos robusto que bundles, más estándar.
  4. RPC privado. Enviar a través de un RPC privado (o a través del endpoint directo de un validador) reduce la ventana durante la cual un sandwicher de mempool puede observar tu transacción.
El SDK de Raydium no agrupa; los integradores típicamente superponen Jito. Ver integration-guides/routing-and-mev para patrones.

Slippage para rutas multi-hop

Cuando un swap se enruta a través de múltiples pools (p. ej. USDC → SOL → RAY), la tolerancia de slippage debe aplicarse por-hop, no solo de extremo a extremo:
El enrutador del SDK aplica límites por-hop automáticamente cuando llamas a raydium.tradeV2.swap. (La fachada es tradeV2 — raydium.trade no existe.) Para enrutadores personalizados, replica el patrón.

Reportar a usuarios

Reglas prácticas para una buena interfaz de swap:
  • Muestra ambos impacto de precio esperado y tolerancia de slippage por separado.
  • Resalta cuando el impacto de precio excede ~2% — advertencia de “impacto alto”.
  • Resalta cuando el impacto de precio excede la tolerancia — la transacción casi seguramente se revertirá.
  • Para pares volátiles, ofrece un “modo de slippage alto” que relaja el límite y muestra una advertencia más fuerte.

Referencias

Fuentes:
  • Implementación de slippage / impacto del SDK v2 de Raydium.
  • Flashbots / Jito en MEV de Solana.