Este artículo explica cómo determinar la liquidación de precio de un par de trading en un Automated Market Maker (AMM). Responde a la pregunta de “¿Cuántos tokens X se pueden intercambiar por tokens Y en el AMM?”.
La función swap() en Uniswap V2 requiere que precalcules la cantidad de tokens a intercambiar del pool (incluyendo el 0.3% en tarifas de trading).
Considera un par de trading ETH / USDC con 100 ETH y 100 USDC en el Liquidity Pool. Por simplicidad, esto asume que 1 ETH equivale a 1 USDC.
Aunque el precio spot de 1 ETH es 1 USDC y viceversa, esto no significa que podamos intercambiar 25 USDC por 25 ETH, ya que esto no preservaría la fórmula de producto constante.
Autoría
Este artículo fue coescrito por Aymeric Taylor (LinkedIn, Twitter), un pasante de investigación en RareSkills.
La teoría de la fórmula de producto constante: x * y ≥ k
La fórmula de producto constante dicta que en un pool compuesto por un par de token X y token Y, el producto de las dos cantidades de activos en el pool (X multiplicado por Y) en todo momento debe mantenerse, como mínimo, constante.
La fórmula de producto constante asegura una relación inversa entre los dos tokens, modelando la oferta y la demanda del mercado. A medida que la cantidad de un token aumenta (al depositarse en el AMM), la del otro debería disminuir (al retirarse del contrato del AMM).
La relación inversa se muestra más claramente si reordenamos las variables como en la siguiente ecuación.
Grafiquemos nuestro ejemplo actual en la ecuación de la fórmula constante:
- Eje x = 100 ETH
- Eje y = 100 USDC
- k = 10,000 (100 ETH * 100 USDC)
- La Línea Rosa representa la curva x * y ≥ 10,000

El área encuadrada bajo la curva es la constante k, producto de x e y.
Pronto demostraremos cómo podemos intercambiar ETH por USDC de una manera que preserve esta constante.
Implementación de la fórmula de producto constante en Uniswap
En la práctica, la fórmula de producto constante se implementa comparando el producto constante del liquidity pool antes y después del trade para asegurar que se mantenga, como mínimo, constante.
Uniswap no te impide darle al AMM más de lo que deberías; en caso de que lo hagas, es tu culpa por subestimar cuánto puedes retirar, de ahí el signo ≤.
Ampliando la ecuación anterior, obtenemos la siguiente ecuación equivalente:
x_Beforeyy_Beforeson la cantidad de cada token en el pool antes del swap.x_Afteryy_Afterson la cantidad de tokens en el pool después del swap.
Esto significa que el producto constante del pool después de intercambiar ETH por USDC tiene que, como mínimo, mantenerse igual.
Uniswap V2 impone una tarifa de trading de AMM del 0.3% por cada swap. Al tener en cuenta las tarifas, el producto constante del liquidity pool aumenta con cada swap. Este crecimiento en el pool es el incentivo clave para los proveedores de liquidez. Solo cuando los proveedores de liquidez retiran su liquidez, el producto constante del pool disminuiría. Hacia el final de este artículo, te mostraremos cómo calcular el swap incluyendo las tarifas de trading.
Por qué no podemos intercambiar 25 ETH por 25 USDC
Para determinar si un swap es válido o no, necesitamos precalcular cómo afectaría el swap al producto constante del pool. ¿Se mantiene al menos igual?
Denotaremos ΔETH y ΔUSDC como la cantidad que se introduce y se retira (swap) del liquidity pool respectivamente.

Intercambiar 25 ETH por 25 USDC significaría que depositamos 25 ETH en el AMM y retiramos 25 USDC de él. Esto ajustaría la liquidez del pool a 125 ETH y 75 USDC. El AMM rechazará este swap ya que el producto constante del pool disminuye después del swap

El producto posterior al swap se queda corto frente al producto previo al swap, 10,000, lo cual viola el invariante de producto constante. El siguiente gráfico visualiza este swap.

Claramente, no podemos esperar retirar 25 USDC — tendremos que retirar menos para preservar el invariante de producto constante.
Determinando la Cantidad Correcta de Swap para USDC
Volviendo al ejemplo anterior, agregar 25 ETH al pool incrementa la cantidad de ETH a 125 ETH (100 + 25). La siguiente tarea es encontrar la nueva cantidad disminuida de USDC en el pool que preserve el producto constante, asegurando así que el AMM lo acepte.

Tenemos una ecuación que revela el valor máximo de ΔUSDC que puede intercambiarse por 25 ETH.
Resolviendo para ΔUSDC
Reordenamos la ecuación para resolver ΔUSDC de manera explícita.


El pool ahora tiene 125 ETH y 80 USDC, lo que equivale a un producto constante de 10,000.

Intercambiar 25 ETH por 20 USDC es la mayor cantidad de USDC que puedes extraer del liquidity pool del AMM. Este swap es aceptado ya que preserva la fórmula de producto constante. 20 USDC es una quinta parte menos que 25 USDC, por lo tanto experimentamos slippage durante este swap. El slippage es el grado en que el precio se mueve como resultado de nuestra operación. Si colocáramos un trade más pequeño, el precio que terminaríamos pagando estaría cerca de 1 USDC : 1 ETH. Pero como nuestro trade es grande, terminamos pagando un precio más alto por menos USDC, incurriendo así en un mayor slippage.
Podemos visualizar este swap a continuación.

La fórmula generalizada para calcular el swap se puede expresar de la siguiente manera:

- x e y representan la cantidad de tokens en el liquidity pool antes del swap
- Δx representa la cantidad de token depositada en el AMM
- Δy representa la cantidad retirada del AMM
Calculando mal el swap: Dando al AMM más de lo que deberías
Si retiras menos, por ejemplo 18 USDC, el AMM aún lo aceptaría ya que el producto constante en el liquidity pool aumenta, pero estarías perdiendo, puesto que no maximizaste tu swap.

Calculando el swap con tarifas
Los cálculos que realizamos anteriormente eran “teóricos”, los cuales excluían las tarifas de trading. Como se mencionó antes, Uniswap V2 aplica una tarifa de trading del 0.3% por cada swap, pero las tarifas solo se aplican al token depositado en el AMM. Digamos que intercambiamos el token X por el token Y, la tarifa del 0.3% se deduce únicamente de X, y no de Y.
La forma en que Uniswap V2 calcula la tarifa del 0.3% es dividiendo el token depositado en 2 partes:
- Tarifa: 0.3%
- Cantidad disponible restante para el swap: 99.7%
Para 25 ETH, nuestra tarifa y la cantidad disponible restante para el swap serían:
- Tarifa(0.3%):
0.075 ETH - Cantidad disponible restante para el swap(99.7%):
24.925 ETH
La tarifa se excluye inmediatamente del cálculo de este swap, por lo que a la persona que realiza el swap (swapper) no se le acreditará la porción del 0.3% correspondiente a la tarifa.
Lo que queda es la cantidad disponible para el swap, que es 24.925 ETH. Esta es la cantidad real por la que estamos intercambiando USDC desde el pool.
Resolvamos para la cantidad máxima de USDC (ΔUSDC) que podemos retirar del pool. Agregar 24.925 ETH al pool incrementaría la cantidad de ETH a 124.925 ETH.

resolviendo para ΔUSDC obtenemos:

Teniendo en cuenta la tarifa de swap del 0.3%, podríamos retirar aproximadamente 19.952 USDC del AMM. Esto es menos que los 20 USDC que podríamos recibir en el ejemplo sin tarifas.
La principal diferencia en el cálculo al incluir tarifas es que multiplicamos el token depositado por el 99.7%, el 0.3% se aparta y se asigna al AMM. Dado que Δx es el token depositado y Δy es la cantidad de token retirado, la ecuación general se convierte en:

Aprende más con RareSkills
Este artículo es parte de nuestro avanzado Solidity Bootcamp. Por favor, consulta el plan de estudios para obtener más información.
Publicado originalmente el 17 de abril de 2024