Este artículo explica qué son los ticks en Uniswap V3. Los ticks permiten una contabilidad de la liquidez concentrada eficiente en el uso de gas, así que primero repasemos rápidamente la liquidez concentrada.
La liquidez concentrada significa que la liquidez no es necesariamente constante a lo largo de la curva de precios como en Uniswap V2. Los proveedores de liquidez pueden elegir segmentos en la curva de precios para colocar su liquidez. La siguiente animación ilustra la diferencia entre las curvas de precios de Uniswap V2 y Uniswap V3.
Por ejemplo, en un pool de ETH:USDC, si el precio de ETH es de 2,000 USDC, un proveedor de liquidez podría elegir colocar su liquidez entre 1,800 USDC y 2,200 USDC, para poder capturar más comisiones en el rango de precios donde espera que los activos se negocien. En la siguiente ilustración, el segmento entre 1800 USDC y 2200 USDC tiene mayor liquidez en comparación con otros segmentos.

Una mayor liquidez dentro de un rango significa que el impacto en el precio de un swap en ese rango será menor. Por el contrario, una menor liquidez hace que el impacto en el precio sea mayor.
Introducción a los ticks y por qué son necesarios en Uniswap V3
Para soportar la liquidez concentrada, el protocolo Uniswap V3 necesita modelar cómo varía la liquidez a lo largo de la curva de precios.
La liquidez puede variar a lo largo de la curva, pero no en puntos arbitrarios. Si Uniswap V3 permitiera modificar la liquidez en puntos arbitrarios de la curva, la complejidad y los costos de gas aumentarían drásticamente. Cada vez que el precio se moviera aunque fuera un poco, el protocolo tendría que comprobar si la liquidez cambió.
Por lo tanto, para reducir significativamente la cantidad de veces que debemos comprobar si la liquidez cambió, en Uniswap V3, la liquidez solo se puede ajustar en precios predefinidos.
Estos puntos de precio predefinidos se llaman ticks. La siguiente figura ilustra este concepto, mostrando algunos de los ticks. Tenga en cuenta que en Uniswap V3 hay muchos más ticks que los representados a continuación. La curva de precios es “rebanada” por los ticks (los rayos rojos que parten del origen).

A modo de repaso, el “precio” en Uniswap V2 y V3 puede interpretarse como el ángulo de un rayo desde el origen hasta la curva de precios. Cuanto mayor sea el “ángulo” respecto al eje x, mayor será el precio del activo X en términos del activo Y. Por lo tanto, los ticks con un ángulo mayor corresponden a precios más altos para el activo X.
En la siguiente animación, el ángulo del rayo cian representa el precio del activo X, mientras que los rayos rojos representan los ticks. Aunque el precio del activo X puede variar y tomar cualquier valor, los ticks permanecen fijos.
Es importante entender que los ticks representan puntos en la curva que se usarán como etiquetas o marcadores. Relacionémoslo con la analogía de una carretera con marcadores de kilometraje. Aunque un coche puede estar en cualquier lugar de la carretera, los marcadores de kilometraje se colocan en puntos específicos, típicamente en algún intervalo predecible. De manera similar, en Uniswap V3, los precios de los tokens pueden tener cualquier valor, pero los ticks están posicionados estáticamente en ubicaciones específicas predefinidas por el protocolo.
Los ticks sirven como puntos de referencia en la curva de precios para indicar dónde puede cambiar la liquidez.
Ilustramos este concepto a continuación. Los ticks se muestran como rayos rojos desde el origen. A la izquierda, la liquidez se ajusta entre ticks, lo cual permite Uniswap V3. A la derecha, el escenario describe un intento de ajustar la liquidez entre puntos de la curva que no son ticks, lo cual el protocolo no permite.

En breve mostraremos cómo Uniswap V3 determina dónde colocar los ticks, pero primero repasemos rápidamente cómo “precio” significa el “precio del token X en términos del token Y”.
En Uniswap V3, usamos el precio del token X
En Uniswap V3, los precios siempre se refieren al precio del token X en términos del token Y. Por lo tanto, cada vez que escribimos , se refiere al precio del token X, dado por .
El precio del token Y en términos del token X, dado por , se puede calcular a partir de como . Por lo tanto, el protocolo solo necesita llevar un registro de los precios en X (). Los precios en Y () pueden calcularse en consecuencia.
Por ejemplo, si el precio del token X es , el precio del token Y se puede calcular como o . Elegir trabajar con precios en el token X en lugar del token Y es simplemente una convención.
La fórmula de tick a precio
Dijimos que los ticks son precios predefinidos, pero ¿cómo se definen estos precios?
Se definen mediante la siguiente fórmula:
donde es un número entero llamado índice de tick (tick index) y es el precio que representa dicho índice. Nos referiremos a esto como el “precio del tick”. Recuerde, cada tick es simplemente una etiqueta para un precio fijo.
Algunos ejemplos de ticks son:
- El índice de tick 0 define el precio 1:1, porque .
- El índice de tick 1 define el precio 1:1.0001, porque .
- El índice de tick 2 define el precio 1:1.00020001, porque .
- El índice de tick -1 define el precio en aproximadamente 1:0.99990001, porque .
Los índices de tick permitidos van desde -887,272 hasta 887,272, y la razón de este rango se explicará en el próximo capítulo.
Es común referirse al índice también como un tick y el código base (codebase) lo hace mucho. Referirse al índice del tick o al precio del tick debería quedar claro por el contexto. En cualquier caso, cada índice de tick está asociado de forma única con un precio de tick y viceversa.
Ejemplos de precios de activos en relación con los ticks
Supongamos que tenemos un pool de USDC:USDT, donde el token X es USDC y el token Y es USDT. Si los dos activos tienen exactamente el mismo valor, entonces el precio caerá exactamente en el índice de tick 0, porque el precio de USDC en términos de USDT es 1:1. Esto se ilustra a continuación (los ticks no están a escala). Los ticks se representan con rayos rojos, el precio al que se negocia USDC con USDT se representa con un rayo amarillo punteado que termina en el punto amarillo, y la curva de precios es la curva cian:

Ahora supongamos que USDC gana un valor muy ligero en relación a USDT. Es decir, alguien tiene que intercambiar 1.00005 USDT para obtener un USDC. Esto pondría el precio actual de USDC ligeramente por encima del tick 0, pero sin llegar al tick 1:

Esto está perfectamente bien: el protocolo no requiere que los activos tengan un valor que coincida exactamente con un tick.
Si USDC continuara ganando valor hasta que se necesite intercambiar 1.0001 USDT por un USDC, entonces el punto en la curva de precios caería exactamente en el tick 1. Este precio cae exactamente en el tick 1 ya que .

Ticks positivos y negativos
- Si el índice de tick es negativo, esto corresponde a un precio menor que 1, ya que será menor que 1 si es negativo.
- Si entonces el precio es 1 (lo que significa que los activos tienen el mismo valor) porque cualquier valor elevado a 0 es 1.
- Si es mayor o igual a 1, entonces el precio será mayor que uno.
Para ver la relación entre los ticks negativos, el tick 0 y los ticks positivos, consulte los ticks etiquetados a continuación. Específicamente, la siguiente imagen utiliza los siguientes precios de ejemplo.

La relación entre el precio del token y los ticks
Es común confundir el precio del token con los ticks. Como se mencionó anteriormente, los ticks son puntos de referencia en la curva de precios, similares a los marcadores de kilometraje en una carretera. También son precios porque son puntos en la curva de precios y están definidos por la fórmula .
El precio de un token es su precio actual: es un punto en la curva de precios que varía durante los swaps. Por ejemplo, el precio de un token podría ser 10 ahora y 33.2 en algún momento en el futuro. A medida que el precio cambia, se mueve a lo largo de la curva y cruza ticks, al igual que un coche en movimiento en una carretera cruza los marcadores de kilometraje.
Ocasionalmente, el precio de un token coincidirá exactamente con el precio de un tick dado, pero a menudo, el precio del token no coincidirá con ninguno de los ticks. Es similar a un coche en una carretera que se detiene momentáneamente en un punto donde se encuentra un marcador de kilometraje.
Cómo se determina el precio de un token a través de swaps se discutirá a lo largo de varios capítulos de este libro. Lo que debe quedar claro es que la fórmula es simplemente una forma de definir los ticks que actúan como marcadores en la curva de precios. Sirven como los lugares donde, y solo donde, se puede ajustar la liquidez.
¿Por qué usar el valor 1.0001 para definir los ticks?
De acuerdo con el Whitepaper de Uniswap V3, se eligió el valor 1.0001 porque
“Esto tiene la propiedad deseable de que cada tick representa un movimiento de precio del 0.01% (1 punto básico) con respecto a cada uno de sus ticks vecinos”.
Usar puntos básicos entre ticks expresa una diferencia relativa en los precios en lugar de una absoluta.
Una diferencia absoluta, como 0.1 centavos, puede tener implicaciones muy diferentes dependiendo del precio del token. Para un token que vale $100,000, 0.1 centavos es insignificante, mientras que para un token que vale 1 centavo, representa un cambio significativo.
Por el contrario, una diferencia en puntos básicos garantiza la misma proporción relativa. Por ejemplo, para un token con un precio de $100,000, una diferencia de 1 punto básico equivale a $10, mientras que para un token que vale 1 centavo, 1 punto básico equivale a 0.0001 centavos. Aunque $10 y $0.000001 son valores absolutos diferentes, representan el mismo cambio relativo con respecto al precio del token.
Por lo tanto, queremos que la diferencia entre ticks vecinos sea de $10 para un token que vale $100,000, y de $0.000001 para un token que vale 1 centavo.
Veamos algunos ejemplos para ver el cambio de 1 punto básico entre ticks vecinos:
Ejemplo 1: Tick 100000 y tick 100001
Para el tick 100000 y 100001 tenemos los siguientes precios:
(los primeros cuatro dígitos fueron resaltados por claridad). Podemos ver que la diferencia es 2.201545604853891 (aproximadamente 1 punto básico o el 0.01% de 22015) para un token que vale aproximadamente 22015 tokens Y.
Ejemplo 2: Tick 10 y tick 11
Ahora la diferencia es 0.000100100045012 (0.0001 o aproximadamente 1 punto básico) para un token que vale aproximadamente 1 token Y.
Rango de ticks
Cuando escribimos , asumiendo que y son ticks, nos referimos al rango de precios entre y , excluyendo los límites. En este contexto, se llama el tick inferior y se llama el tick superior.
Cuando escribimos un rango de ticks como , en realidad nos estamos refiriendo a , donde -10 y 10 son los índices de los ticks, y y son los precios de los ticks correspondientes.
En la ilustración a continuación, vemos un ejemplo de un rango de ticks entre y .

La curva de precios representada como una línea
Otra representación común de la curva de precios es como una línea. La curva de precios se traza en los ejes x e y, mientras que en la recta numérica cada punto representa un precio.
En la curva, un precio creciente (del token X) se mueve hacia arriba y a la izquierda, mientras que en la línea, aumenta de izquierda a derecha:
Por lo tanto, a veces representaremos el precio y la liquidez de la curva utilizando el diagrama de líneas a continuación, donde el área azul representa la liquidez contenida en el rango de ticks.

Podemos graficar el nivel de liquidez en el gráfico de líneas correspondiente de la siguiente manera:
A continuación, hay una herramienta interactiva para ilustrar mejor cómo estas dos representaciones muestran la misma información. Cambie la liquidez de un segmento de precio moviendo los controles deslizantes k, luego haga clic en “Sweep Price”. Después de hacer clic en Sweep Price, aparecerá un indicador de precio para ambos gráficos (un rayo rojo para el gráfico cartesiano y un punto rojo para el gráfico de líneas). Observe cómo el rayo rojo en el gráfico cartesiano sigue al punto rojo en el gráfico de líneas.
Esperamos que el lector comprenda ambas representaciones de la curva de precios: una en el plano cartesiano (ejes x-y) y la otra como una línea. Ambos diagramas se utilizarán para explicar conceptos a lo largo de los capítulos.
El significado de los ejes x-y en V3
En Uniswap V2, el valor de x es la cantidad literal del token X (las reservas) que mantiene el pool (lo mismo para y). Sin embargo, en Uniswap V3, las “reservas” son un concepto más complicado porque cada segmento de la curva mantiene diferentes cantidades de token X y/o Y.
Aún es útil pensar en los ejes x e y como medidas de la “cantidad” de tokens, pero hay bastantes matices en cuanto a qué es esta “cantidad”, por lo que posponemos la discusión para un capítulo posterior. Mencionamos esto para que los ejes no se malinterpreten como el precio de un token, ya que el simple hecho de etiquetar un eje como “x” podría ser ambiguo sin aclaración.
El tick actual
Uniswap V3 lleva un registro del “tick activo” o “tick actual” o, a veces, simplemente “tick”. El “tick actual” es el precio actual redondeado hacia abajo al tick más cercano. Si el precio aumenta y cruza un tick, entonces el tick que acaba de ser cruzado se convierte en el tick actual. “Cruzado” no requiere que el precio “haya pasado por encima” del tick. Si el precio se detiene en el tick, se considera que el tick ha sido cruzado.
Si el precio disminuye y cruza un tick, entonces debe haber cruzado el tick actual anterior, por lo que el tick por debajo de ese tick se convierte en el nuevo tick actual.
La herramienta interactiva a continuación ilustra cómo el protocolo selecciona un tick como el tick actual. Mueva el control deslizante en la parte superior de la herramienta para ver cómo los ticks (gris) se convierten en el tick actual (verde) a medida que el precio cruza el tick:
La variable slot0 almacena el tick actual
El protocolo almacena el tick actual en un struct llamado slot0 (enlace al código). Esta variable es pública, por lo que cualquiera puede leer el tick actual de un pool directamente en Etherscan consultando slot0.

A continuación mostramos el resultado para el pool de ETH:DAI en Base:

El tick actual es 81143. El pool es de ETH:DAI, por lo que el precio se expresa como Ether en términos de DAI. Ambos tokens tienen 18 lugares decimales. Calcular el precio en el tick 81143 da . El tick actual es el precio actual redondeado hacia abajo al tick más cercano. Por lo tanto, podemos asumir que el tick actual corresponde aproximadamente al precio actual. Así que para este pool, 1 ETH vale aproximadamente 3340 DAI.
Cómo afectan los decimales al precio
Consideremos otro ejemplo para ilustrar cómo los lugares decimales afectan el precio y el tick. A continuación mostramos el resultado para el pool de ETH:USDC en Base:

El tick es ahora negativo con un valor de -195186, y el precio se puede calcular como . El tick es negativo aquí debido a la diferencia en los lugares decimales, ya que ETH tiene 18 decimales mientras que USDC tiene solo 6 decimales.
Asumiendo que ETH vale $1000, la unidad más pequeña de ETH vale (o ), mientras que la unidad más pequeña de USDC vale . Así que, aunque asumimos que 1 ETH “vale” más que 1 USDC, si consideramos su unidad más pequeña, 1 unidad más pequeña de USDC vale más que 1 unidad más pequeña de ETH.
En este ejemplo, para tener en cuenta la diferencia en los lugares decimales (18 para ETH vs 6 para USDC), necesitamos multiplicar el precio por . Por lo tanto, el precio del pool se convierte en , que es aproximadamente el mismo valor que en el pool de ETH:DAI.
Resumen
- La curva de precios está demarcada con puntos llamados ticks, definidos por la fórmula , donde se denomina índice de tick. Los ticks representan un precio fijo.
- Los ticks sirven como límites donde el proveedor de liquidez puede proveer liquidez. No es posible proveer liquidez usando puntos arbitrarios como límites.
- Los ticks pueden ser positivos o negativos. El tick cero corresponde al escenario donde los tokens tienen el mismo valor. Los ticks positivos corresponden a precios en los que una unidad de X puede ser intercambiada por más de una unidad de Y. Los ticks negativos corresponden a precios en los que intercambiar una unidad de Y devolverá más de una unidad de X.
- El tick actual es el tick más cercano al precio actual redondeado hacia abajo.
- Los ticks mínimo y máximo son -887,272 a 887,272. Discutiremos por qué en el próximo capítulo.
Ejercicios de Práctica
Elija un pool en una L2 de bajo costo y provea liquidez. La lista de pools se encuentra aquí. Tome nota de dónde puede y dónde no puede proveer liquidez.