WEB3DEV Español

Cover image for ¿Qué son los oráculos Uniswap V2?
Hector
Hector

Posted on • Updated on

¿Qué son los oráculos Uniswap V2?

Este artículo es una traducción de Ashwin Yardi, hecha por Héctor Botero. Puedes encontrar el artículo original aquí.
Sería genial escucharte en nuestro Discord, puedes contarnos tus ideas, comentarios, sugerencias y dejarnos saber lo que necesitas.
Si prefieres puedes escribirnos a @web3dev_eshttps://twitter.com/web3dev_es en Twitter.

¿Qué son los Oráculos?

En el mundo de los EVM, puedes interactuar con otros contratos desplegados muy fácilmente. Sin embargo, ¿qué sucede si requieres acceder a datos que no existen en la blockchain? Por ejemplo: aplicaciones con utilidades en la vida real usualmente dependen de cosas como datos alimentados en vivo en eventos como deportes, precios de materias primas, etc. Aquí es donde los oráculos te ayudan. Los Oráculos son un puente entre los datos fuera del blockchain y los datos que están en el blockchain del contrato inteligente. La cosa interesante es que puedes construir oráculos usando Uniswap V2.

¿Pero, no es Uniswap una casa de intercambios?

¡Si, así es! Uniswap es un DEX (de intercambio). Su función principal es la creación de mercados automáticos (Automatic Market Markes, AMM). Pero, esa no es la única utilidad que tiene. El servicio de los contratos que Uniswap “empareja” puede ser usado como una fuente de tasa de cambio entre los tokens del emparejado. Ahora vamos a ver cómo Uniswap puede ser usado como oráculo. Antes de ello, necesitamos entender un par de conceptos.

Uniswap v2 y los Time-weighted average princes (TWAP)

Sí, ese es el significado de TWAP. Time-weighted average price (precio medio ponderado en función del tiempo). ¿Cómo calcular TWAP usando el contrato Uniswap V2?

Cada contrato emparejado tiene las siguientes dos variables públicas

  • price0CumulatveLast
  • price1CumulatveLast

Estas dos variables almacenan la suma del histórico de todos los precios ponderados en Token0 y Token1 por cada segundo que pasa luego que el contrato haya sido desplegado. Digamos que el tiempo actual es “t”. Ahora, si quieres calcular el TWAP para el Token0 por 8 horas:

TWAP for 8 hours = (P t -P t-8 ) / ( blocktimestamp t -blocktimestamp t-8 )

¡Eso es! Esto es todo respecto a las matemáticas detrás del precio medio ponderado en función del tiempo. Este diagrama, tomado directamente de Uniswap docs encapsula esto perfectamente:

Image description

Integrando el Oráculo Uniswap V2

Aquí es donde las cosas se empiezan a complicar. Pero, no te preocupes, vamos a desglosar esta parte de forma sistemática y en una manera sencilla de comprender. Sin jergas, te lo prometo.

Como vimos en el ejemplo de arriba, para calcular TWAP necesitamos dos precios y dos timestamp. En otras palabras, necesitamos una referencia de precio y del timestamp junto al precio y timestamp actual. Sin embargo, no podemos obtener el precio de referencia directamente del contrato emparejado. Necesitamos un contrato “Oráculo” separado que maneje la lógica por nosotros.

El contrato simple: La ventana fija de Oráculo

Sé lo que dije, sin jerga. Pero es muy fácil. Digamos que quieres 1 hora TWAP para un token en particular. Simplemente escribes un contrato inteligente que tiene la lógica almacenada en el valor de “price0CumulativeLast” (asumiendo que el token es token0 en el contrato emparejado). Actualizamos el valor de esta variable cada hora, exponiendo una función update. Ahora, es tu responsabilidad asegurarte que este contrato sea actualizado cada hora para que pueda devolver el precio promedio en la última hroa. Y, por supuesto, necesitarás una función que devuelva el precio promedio calculado en el formato requerido que se utilizará más adelante.

Aquí está el ejemplo completo de este contrato:

https://github.com/ashwinYardi/uniswap-v2-oracles/blob/afbd493530b73fd3fe58ae174e584f5454d5f899/contracts/SimpleFixedWindowOracle.sol

No hace falta decir, actualizar un contrato inteligente cada hora puede ser caro, tedioso y puede eliminar tus otras dependencias si no es actualizado correctamente. También, como tiene una ventana fija, usualmente no refleja las fluctuaciones de precio a corto plazo. Además, el histórico de precios y precios nuevos es tratado igualmente. Idealmente, los últimos precios deberían tener más peso para que puedas hacer que tu oráculo sea sensible a las fluctuaciones de precios.

Ventana Oráculo Deslizante

Moviendo la ventana oráculo, hay dos variables que puedes afinar de acuerdo al requisito y a tu preferencia:

  1. El tamaño de la ventana, es decir, 1 hora, 1 día.
  2. Granularidad: cuántas observaciones deben ser registradas en una ventana correspondiente.

El precio siempre es calculado sobre la última ventana. La Granularidad determina la precisión del precio retornado por oráculo. Cuanta más granularidad, más probable será la precisión del precio promedio. Aún así, necesitarás más actualizaciones en el oráculo de tu contrato.

Aquí hay un contrato para la ventana oráculo deslizante:

https://github.com/ashwinYardi/uniswap-v2-oracles/blob/afbd493530b73fd3fe58ae174e584f5454d5f899/contracts/MovingWindowOracle.sol

Este contrato es una ventana móvil oráculo genérica que puede ser usada por múltiples uniswap v2 emparejados. Solo deja que el contrato sepa los detalles como cuál dirección uniswap por defecto usará, cual windowSize y cuál granularidad. ¡Eso es todo! Ahora puedes usar este contrato para cualquier emparejado uniswap, creado por defecto.

Aunque es complicado de manipular, los oráculos Uniswap v2 siguen siendo propensos a las manipulaciones si las condiciones favorables están allí, el cual supera el costo de manipulación de oracle. También, si la cadena se detiene por un tiempo significante, entonces las Dapps basadas en oráculo pueden ser abusadas. Escribiré un artículo separado sobre cómo pueden ser manipulados estos oráculos descentralizados. ¡Mantente sintonizado y sigue las redes sociales para mantenerte en contacto!

Discussion (0)