Este es el segundo artículo de nuestra serie "Depredadores en Pools: El Arte y la Matemática de la Liquidez JIT". Aquí pasamos de la teoría del "robo" al cálculo frío: cómo un algoritmo decide en 200 milisegundos si vale la pena entrar en la operación.
Si el primer artículo trataba sobre "qué es", este trata sobre "cuánto cuesta". Para que un ataque JIT no se convierta en caridad a favor de mineros/validadores, el bot debe resolver una ecuación con cinco incógnitas antes de que se mine el bloque.
1. Liquidez (L): La variable principal
En Uniswap v3, la liquidez no es solo la suma de tokens, sino el factor L, que determina cuántos activos se moverán cuando el precio cambie. Fórmula del swap (invariante):

Para un bot JIT, es crítico calcular qué porción del $L$ total en un rango de precio dado (tick) debe ocupar.
Fórmula de participación en comisiones (Fshare):
Fshare = Ljit / Lpool + Ljit
Donde:
- Ljit — liquidez aportada por el bot.
- Lpool — liquidez pasiva existente de los LP en el tick objetivo.
Regla práctica: Para capturar el 95% de la comisión, la liquidez del bot debe ser 19 veces mayor que la liquidez actual del pool en ese rango.
2. Cálculo del rendimiento del swap (Gross Profit)
El bot ve en el mempool una transacción de un usuario por valor de $S$. Conociendo la categoría de comisión del pool ($\phi$, por ejemplo 0,05% o 0,3%), calcula la comisión total de la operación:

Ganancia bruta esperada del bot (Pgross):

3. Consideración del "impuesto de gas" (Costos operativos)
A diferencia de un LP pasivo, que paga gas una vez por varios meses, un bot JIT paga gas dos veces en el mismo bloque (o una transacción cara con múltiples llamadas).
Costos de gas (Cgas):
mint(): ~150k–200k gas.decreaseLiquidity()+collect(): ~120k–180k gas.- Más la tarifa de prioridad (Priority Fee) para Flashbots, para garantizar la inclusión en el bloque.
En la red principal de Ethereum (Mainnet) con un precio de gas de 30 gwei, los costos totales pueden ser $50–$150. En L2 (Arbitrum/Polygon), los costos son mínimos ($0,10–$0,50), pero la competencia por micro-swaps es mayor.
4. Cálculo del punto de equilibrio (Break-even Point)
El ataque solo tiene sentido si:

Donde Cslippage es la pérdida al retirar liquidez (Impermanent Loss durante un swap) y Copportunity es el costo de oportunidad del capital (por ejemplo, intereses de un Flash Loan).
Detalle poco conocido: Los bots experimentados consideran el "Shadow Slippage". Cuando el bot inyecta gran liquidez, el precio se vuelve más "rigido". Si el swap del usuario es muy grande, al bot le conviene inyectar menos liquidez para que el precio se mueva más, planificando arbitraje en el siguiente bloque. Pero para JIT puro — mientras más liquidez, mejor.
5. Ejemplo práctico de cálculo (Mainnet)
- Pool: ETH/USDC (0,05%)
- Swap del usuario: $500,000.
- Lpool actual en el tick: $2,000,000.
- Bot inyecta Ljit: $18,000,000.
- Comisión total: $500,000 x 0.0005 = $250.
- Participación del bot: 18M / 18M + 2M = 90%.
- Ingreso del bot: $250 x 0.9 = $225.
- Costo de gas: $120 (condiciones promedio).
- Ganancia neta: $225 - $120 = $105 por bloque.
¿Parece poco? Pero los bots top realizan 500–1000 de estos ataques por día. Esto representa una ganancia neta de $50,000–$100,000 por día prácticamente sin riesgo de mercado.
6. Detalle técnico: elección del ancho de tick
El bot nunca establece un rango amplio. Cuanto más estrecho el rango (Ticks), mayor la concentración de capital y mayor L para la misma cantidad de tokens.
Estándar JIT: tickLower y tickUpper con diferencia de un paso mínimo (por ejemplo, 10 puntos para un pool de 0,05%).
Cálculo de liquidez a partir de la cantidad de tokens (TypeScript/Ethers):
import { LiquidityAmounts } from '@uniswap/v3-sdk';
import { JSBI } from '@uniswap/sdk-core';
function calculateJitLiquidity(amount0, amount1, currentPrice, tickLower, tickUpper) {
const sqrtRatioX96 = encodePriceSqrt(currentPrice);
const sqrtRatioAX96 = TickMath.getSqrtRatioAtTick(tickLower);
const sqrtRatioBX96 = TickMath.getSqrtRatioAtTick(tickUpper);
return LiquidityAmounts.getLiquidityForAmounts(
sqrtRatioX96,
sqrtRatioAX96,
sqrtRatioBX96,
amount0,
amount1,
false
);
}
Resumen del artículo
La matemática JIT es una batalla por la eficiencia. Si ves que la rentabilidad de un pool con comisión del 1% cae repentinamente — revisa el mempool. Probablemente hay un bot activo que calculó que su L es 50 veces más eficiente que el tuyo.
En el próximo artículo: Pasaremos de las fórmulas al hardware y al código. Analizaremos la arquitectura del smart contract que ejecuta estos cálculos en tiempo real y descubriremos por qué Rust superó a todos los demás lenguajes en este nicho.
Dominio de la Liquidez JIT: La Guía Completa de MEV en Uniswap: Parte 2 de 5