Saltar al contenido principal
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 →

El invariante

Un creador de mercado de producto constante (CPMM) mantiene dos reservas x e y y cumple:
donde k es el producto de las reservas antes de la operación. Para un mercado sin comisiones, x · y = k exactamente. Con comisiones, k crece estrictamente (la parte de la comisión correspondiente al LP se retiene en las reservas). El invariante es deliberadamente geométrico: garantiza que sin importar cuán pequeña se vuelva una reserva, la otra crece sin límite para compensar — es decir, el pool nunca puede vaciarse completamente en ningún lado.

Precios

Precio spot

El precio marginal de y denominado en x en cualquier instante es la tangente de la curva:
(derivación: diferenciación implícita de x · y = k da dy/dx = −y/x; ignorando el signo, |dy/dx| = y/x). Este es el precio que el pool cotiza para una operación infinitesimalmente pequeña. Para cualquier operación de tamaño finito, el precio realizado es peor debido al slippage a lo largo de la curva.

Swap de entrada exacta (dar Δx, recibir Δy)

Con comisiones, sea f la tasa de comisión (por ejemplo, f = 0.0025 para 25 bps). Aplica la comisión a la entrada y luego usa el invariante para resolver la salida:
Reservas después de la operación:
Todo Δx entra en las reservas. La parte de comisión del LP permanece en x'; la parte de protocolo se excluye de la curva mediante un paso de contabilidad separada (ver Variantes de contabilidad de comisiones abajo).

Swap de salida exacta (recibir Δy, pagar el mínimo Δx)

Δx se redondea hacia arriba para garantizar que el pool no cobre menos de lo debido.

Slippage e impacto de precio

Impacto de precio mide cuánto se mueve el precio spot del pool como resultado de la operación:
Para Δx / x pequeño, una expansión de primer orden da:
Intuición: un swap del 1% causa un impacto de precio de ~2%. Este factor de 2 es la razón por la que los pools CPMM cotizados para operaciones de tamaño medio parecen «delgados» en comparación con mercados de libro de órdenes — no estás comprando solo contra la mejor oferta actual, estás caminando tu propio precio marginal. Precio efectivo pagado por el operador:
El diferencial entre p_before y effective es slippage. El slippage en la interfaz on-chain generalmente se expresa como (effective − p_before) / p_before; la función computeAmountOut del SDK devuelve tanto amountOut como priceImpact por esta razón.

Verificación del invariante en código

Después de un swap, los protocolos re-verifican:
Cualquier violación es un error de programa o un desbordamiento aritmético. Las instrucciones de swap de Raydium hacen esta verificación explícita como una poscondición:

Variantes de contabilidad de comisiones

La verificación del invariante asume que la comisión del LP permanece en las reservas. Diferentes productos Raydium manejan los componentes de protocolo, fondo y creador de manera diferente:

Convención CPMM

Las comisiones son tasas de tipo basis-point u64 con denominador 1_000_000. La comisión de operación se divide en trade_fee_rate (total) y luego se subdivide mediante protocol_fee_rate, fund_fee_rate, creator_fee_rate. En cada swap:
Las tres partes que no son LP se acumulan en contadores separados (protocol_fees_*, fund_fees_*, creator_fees_*) que se excluyen de las reservas utilizadas en el invariante. Así es como las comisiones pueden retirarse sin mover la curva. Ver products/cpmm/fees.

Convención AMM v4

Las comisiones son ratios numerator / denominator con denominador 10_000. La división se fija en la creación del pool y se almacena en AmmInfo.fees:
pnl_share se acumula en state_data.need_take_pnl_* y se excluye de las reservas; lp_share permanece en el vault. Ver products/amm-v4/fees. Ambas convenciones preservan el invariante de la misma manera — la diferencia es cosmética (denominador + número de subcategorías).

Reglas de redondeo

  • El cálculo de comisión redondea hacia arriba. Garantiza que el pool nunca cobre una comisión insuficiente.
  • El monto de salida redondea hacia abajo. Garantiza que el invariante se mantenga estrictamente (k' > k incluso antes de que se agregue la comisión).
  • El monto de entrada exacta de salida redondea hacia arriba. Garantiza que el usuario no pague de menos.
Toda la aritmética usa u128 para los productos x · Δx intermedios para evitar desbordamiento en reservas grandes. Los resultados finales se convierten de nuevo a u64 con una verificación de saturación.

Casos especiales

Pool vacío

Antes del primer Deposit, x = y = 0. Las instrucciones de swap rechazan las operaciones previas al depósito.

Salida cero

Si Δx es lo suficientemente pequeño como para que Δy redondeado hacia abajo sea 0, la instrucción se revierte con ZeroTradingTokens. Esto previene la extracción de valor sin pago; también significa que los swaps de polvo en pools altamente desequilibrados fallan.

LP de polvo

El primer Deposit tiene manejo especial: calcula el suministro inicial de LP como sqrt(x · y) y quema una pequeña cantidad de «quemado inicial» (generalmente 100 unidades de LP) para prevenir el «ataque de inflación del primer depositante» (donde un atacante dona al vault e infla el valor del token LP). Los depósitos posteriores usan matemáticas pro-rata.

Relación con el arbitraje

El precio de un pool CPMM solo cambia mediante:
  1. Operaciones a través del pool mismo (usuarios caminando la curva).
  2. Donaciones (envío de tokens al vault sin un swap).
Porque las operaciones mueven el precio de manera determinística con la curva, cualquier pool cuyo precio diverja del precio de mercado más amplio crea una oportunidad de arbitraje. Los arbitrajistas traen el precio del pool de vuelta hacia el precio del mercado en expectativa. Por esto se dice que los pools CPMM «cotizan un precio sin un oráculo»: el mercado encuentra el precio mediante arbitraje en lugar de que el pool lo lea externamente. El lado contrario: el pool mismo es la contraparte del arbitrajista, por lo que cualquier ganancia de arbitraje es pérdida impermanente del LP (menos la comisión capturada por los LPs).

Ejemplos elaborados

Ejemplo 1 — operación pequeña, slippage negligible

Pool: x = 1_000_000, y = 2_000_000, k = 2·10^12. Comisión f = 0.0025. Trade Δx = 1_000:
Precio efectivo: 1000 / 1993.01 ≈ 0.5018. Spot antes: 0.5. Impacto: ~0.36%.

Ejemplo 2 — operación de tamaño medio, slippage visible

Mismo pool, Δx = 100_000 (10% de x):
Efectivo: 100_000 / 181_405 ≈ 0.5513. Impacto: ~10.3% — aproximadamente la mitad de la regla de 2 · 10% = 20% (la regla es un techo de peor caso para una curva de producto constante sin comisiones; la comisión de operación más la inversión en la fórmula la reduce).

Referencias

Fuentes:
  • Whitepaper Uniswap v2 — la declaración canónica de x · y = k.
  • Código fuente del programa CPMM de Raydium.
  • Código fuente del programa AMM v4 de Raydium.