WEB3DEV Español

Cover image for Aprende Cómo integrar Uniswap V3 en tus contratos inteligentes
Delia Viloria T
Delia Viloria T

Posted on

Aprende Cómo integrar Uniswap V3 en tus contratos inteligentes

Image description

¿Qué es Uniswap?

Uniswap fue el primer protocolo que tomó DEX al siguiente nivel con un creador de mercado automatizado (automated market maker, AMM). El AMM elimina la necesidad de un par para hacer un intercambio, como es el caso de los libros de pedidos tradicionales en el mercado de valores de hoy. En cambio, los algoritmos AMM recogen la liquidez depositada por los proveedores de liquidez, quienes colocan sus activos para permitir a los traders usarlo.

¿Cómo funciona el protocolo Uniswap?

Con Uniswap, un trader puede intercambiar sus tokens ERC-20 a través de los pools. Estos pools consisten de pares de token (por ejemplo USDC/WETH) y una tasa del pool (0.05%, 0.30% o 1%). Un pool recolecta pequeñas cantidades de esta tasa para apoyar el sistema. Puedes crear y desplegar tus propios pools, consistiendo de pares que eliges y la tasa de tu pool que elegiste.

Analicemos los tres contratos principales envueltos en Uniswap V3: UniswapV3Factory, UniswapV3Pool y SmartRouter.

UniswapV3Factory:

  • El contrato UniswapV3Factory es responsable de crear instancias para el contrato UniswapV3Pool.
  • Mantiene el rastreo del dueño del contrato y controla la titularidad y control sobre las tasas del pool.
  • Mantiene un mapeo de las cantidades de la tasa para marcar las distancias, los cuales determinan la granularidad de los rangos de precios.
  • La función createPool es usada para desplegar un nuevo contrato UniswapV3pool. Toma dos direcciones token y la cantidad de tasa como entrada y despliega un nuevo contrato del pool para el par del token especificado.
  • Impone ciertas condiciones como asegurar que las direcciones del token no sean las mismas y que el espacio entre las marcas sean válidas para la cantidad de la tasa.
  • Actualiza el mapeo getPool para asociar el nuevo contrato del pool con el token par correspondiente y la cantidad de la tasa.

UniswapV3Pool:

  • El contrato UniswapV3Pool representa la liquidez individual de un pool por un par de token específico y la cantidad de tasa.
  • Implementa las funcionalidades centrales relacionadas a la provisión de liquidez, el cálculo de la tasa y el intercambio.
  • Los proveedores de liquidez pueden depositar sus token en el pool y recibir un proveedor de liquidez (liquidity provider, LP) de tokens en retorno. Estos tokens LP representan su parte de la liquidez del pool.
  • El contrato UniswapV3Pool usa el concepto de posiciones de liquidez, el cual define un rango de precio específico y la cantidad correspondiente de liquidez proporcionada.
  • Las posiciones de liquidez son representadas por valores marcados únicos, el cual define los límites de precios inferiores y superiores. El contrato calcula las tasas basadas en estas posiciones y las distribuye a los proveedores de liquidez.
  • Intercambiar en Uniswap V3 envuelve intercambiar tokens entre diferentes rangos de precios, optimizando el slippage y reduciendo los requisitos de capital.
  • El contrato implementa las funciones para intercambiar, acuñar/quemar tokens LP y retirar tokens desde el pool.

Smart Router

El contrato smart router es responsable por manejar los intercambios de token y la administración de liquidez. Interactúa con el contrato Uniswap V3 Pool para realizar estas acciones.

El contrato calcula las cantidades óptimas para el intercambio usando el mecanismo de precio Uniswap V3 y dirige el intercambio a través de uno o más contratos Uniswap V3 Pool.

Cuando integras el protocolo UniSwap a nuestro contrato, tenemos la opción para integrarlo desde múltiples contratos UniswapV3Pool, SmartRouter y UniswapV3Factory. Sin embargo, por simplicidad y para manejar la complejidad y calcular las cantidades de intercambios óptimos, estaremos usando SmartRouter.

Ejemplo de Implementación

Image description

Vamos a desmenuzarlo:

  1. Import Statements: el contrato importa los contratos externos necesarios desde Uniswap V3 Periphery, incluyendo transferHelper y la interfaz para ISwapRouter. Estos contratos externos son usados para intercambiar con seguridad los tokens, e interactuar con el intercambio Uniswap V3.
  2. State Variables: swapRouter. Este es una variable de estado del tipo IswapRouter, el cual es configurado para que sea publicado y sea inmutable. Almacena una referencia para el contrato Uniswap V3 router, el cual es usado para realizar el intercambio de token.
  3. Constructor: el contrato tiene un constructor que toma una instancia ISwapRouter como un parámetro e inicializa la variable de estado swapRouter en el. Esto asegura que el contrato interactúe con el Uniswap V3 router.
  4. Función swapExactInputSingle:
  • Esta función es usada para intercambiar una cantidad exacta en el token de entrada para el token de salida.
  • Toma tres parámetros: token0 (la entrada de la dirección del token), token1 (salida de la dirección del token), y amountIn (la cantidad exacta de tokens de entrada).
  • Dentro de la función, transfiere los tokens de entrada desde el que llama hasta el contrato, aprueba que el router gaste estos tokens y establece los parámetros para el intercambio.
  • Luego llama la función swapRouter.exactInputSingle para que haga el intercambio y regresa la cantidad de salida.
  1. Función swapExactOutputSingle:
  • Esta función es usada para intercambiar una cantidad exacta para el token de salida con una cantidad máxima para los tokens de entrada.
  • Toma cuatro parámetros: token0 (la entrada de la dirección del token), token1 (salida de la dirección del token), amountOut (la cantidad exacta de tokens de salida) y amountInMaximum (la cantidad máxima de los tokens de input).
  • Similar a las funciones previas, transfiere los tokens de entrada, aprueba el router y establece los parámetros de intercambio.
  • Luego llama la función swapRouter.exactOutputSingle para realizar el intercambio. Si la cantidad de tokens de entrada usada es menos que la cantidad máxima permitida, reembolsa los tokens de entrada sin usar para el que llama.

Para que comiences rápidamente, tenemos que configurar todo en BuildBear Labs Uniswap

  • Clona/has el fork Uniswap:
git clone https://github.com/BuildBearLabs/UniswapV3.git
Enter fullscreen mode Exit fullscreen mode
  • Instala las dependencias:
cd UniSwap
npm install
Enter fullscreen mode Exit fullscreen mode
  • Crea tu red de prueba privada (forked desde el mainnet de Ethereum) estamos haciendo el forking de Ethereum porque estaremos usando el protocolo Aave V3:
npm run createTestnet
Enter fullscreen mode Exit fullscreen mode

Una vez que la red de pruebas está en vivo, su RPC, Explorador y los detalles del Faucet son añadidos al archivo testnet.json

  • Para desplegar el contrato Swapexample.sol, ejecuta el siguiente comando:
npx hardhat run scripts/deploy-Swapexample.js
Enter fullscreen mode Exit fullscreen mode

Image description

Image description

Puedes intercambiar tokens usando el script proporcionado Swap-token.js

Image description

Para ejecutar los scripts, ejecuta el siguiente comando y una vez que el intercambio sea exitoso, navega a la página del explorador del contrato. Haz click en la transacción de arriba para ver la transacción del intercambio y la cantidad de USDC recibida, como se muestra en la imagen de abajo:

npx hardhat run scripts/Swap-tokens.js
Enter fullscreen mode Exit fullscreen mode

Image description

Image description

En conclusión, hemos aprendido que los roles o diferentes contratos en Uniswap v3, y una manera óptima para integrar Uniswap V3 en nuestro protocolo, y cómo intercambiar tokens usando scripts, eliminando la necesidad de una interfaz frontend.

Sobre BuildBear:

BuildBear es una plataforma personalizada para el desarrollo y prueba de DApp. Los desarrolladores ganan la libertad para construir una Red de pruebas Privada Abierta (sandbox) entre una variedad de redes blockchain. La libertad para acuñar de forma ilimitada tokens Nativos y ERC20, además de los tiempos de transacción rápidos en BuildBear (¡en menos de 3 segundos!), mejora el ciclo de vida del desarrollo de múltiples DApp. La plataforma viene equipada con herramientas diseñadas para las pruebas de tiempo real y el debuggeo, asegurando a los desarrolladores que puedan mantener transacciones complejas de la blockchain con mucha facilidad.

Conéctate con nosotros en Twitter, LinkedIn, Telegram, GitHub.

Este artículo fue escrito por BuildBear Team y traducido por Delia Viloria T. Su original se puede leer 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.

Discussion (0)