WEB3DEV Español

Cover image for Decodificando el DeFi: ¡Una guía detallada paso a paso para Construir tu propio Uniswap V2 DEX en la Testnet de Sepolia!
Hector
Hector

Posted on

Decodificando el DeFi: ¡Una guía detallada paso a paso para Construir tu propio Uniswap V2 DEX en la Testnet de Sepolia!

En caso que quieras donar, la dirección de recepción está al final del artículo. ¡Gracias!

Empezemos

Image description

Argumento del Problema

Hay muchos artículos buenos sobre construir tu propio fork Uniswap V2. Sin embargo, muchos de ellos están en la red de prueba obsoleta de ethereum y muchos códigos proporcionados no pueden ejecutarse directamente por las actualizaciones de paquete o de herramientas.

Propósito de este Artículo

Aprovechar los artículos y tutoriales existentes y crear un proyecto fork Uniswap V2 (frontend ReactJS + backend en Solidity) en la red de prueba de Sepolia.

Artículos existentes útiles

Esta guía está basada en las siguientes contribuciones principales. Todo el crédito va a ellos:

Las herramientas que usaremos

  • Red de pruebas: Sepolia
  • API Web3: Alchemy
  • Frontend: ReactJS
  • Backend: Solidity
  • Herramientas: Remix IDE, VS Code, Alchemy

Estructura General del proyecto

Image description

Tabla de Contenidos (pasos)

  • Instala Metamask, obtén ETH de Sepolia desde el faucet y obtén un Proveedor API de la red de prueba de Alchemy
  • Crea tokens ERC20 de la red de pruebas
  • Haz el fork del Uniswap V2
  • Desarrolla la interfaz front-end
  • Debuggea y ejecuta todo el proyecto

Paso 1: Instala Metamask, obtén ETH de Sepolia desde el faucet y obtén un Proveedor API de la red de prueba de Alchemy

  • Usa la página web oficial de Metamask para la instalación.
  • Luego, recuerda crear un par de direcciones para usarlas posteriormente (link del tutorial)
  • Registra una cuenta de Alchemy (la usaremos después para el API Json proporcionado para acceder a la red de prueba Sepolia). Después del registro, ve a la pestaña Apps para crear la clave de acceso de las Apps. Abajo está la captura de pantalla:

Image description

  • La clave de acceso https para la red de prueba de Sepolia se ve así:

Image description

  • Ahora, vamos a obtener ETH de la red de prueba de Sepolia (necesitarás desplegar los contratos uniswap V2 forked). Usa este enlace de Alchemy.

Image description

Resultados del paso 1:

Deberías tener 3 cosas:

  • Cuentas de Metamask
  • Algunos ETH de Sepolia en tus cuentas
  • Clave de acceso Https Alchemy para la red de prueba de Sepolia.

Paso 2: Crea tokens ERC20 de la red de pruebas, incluyendo WETH y otros tokens para intercambiarlos después

  • WETH es indispensable. La razón es porque su dirección es usada por el contrato Uniswap V2 desplegado.
  • Puedes usar Remix además de la biblioteca de OpenZeppelin para hacer esto en minutos
  • Este paso es sencillo (esta es una guía paso a paso)

Image description

Resultados del paso 2

Deberías tener token con esas direcciones. Un token debería ser tu propio WETH. Por ejemplo: estos son los contratos creados por mi durante la prueba (ejemplo de transacciones de la creación ERC20) y los WETH que creé (enlace al bWETH).

Image description

Paso 3: Haz el fork del Uniswap V2

Este paso está basado en el artículo de Ishan Shahzad, “How to Build a Decentralized Exchange (DEX) like uniswap”. Hay un par de cosas a tomar en cuenta:

  • NO seguiremos todo el alcance de este artículo. En cambio, sólo seguiremos el despliegue del Contrato Factory y del Contrato Routing del tutorial de arriba. La parte 3, el código front-end, será manejado por otro paso (y usando otro artículo).

Image description

  • Por favor revisa el artículo antes de continuar.
  • Cuando usas Remix para desplegar, elige “Injected Provider - MetaMask” y luego elige la red de prueba de Sepolia en Metamask. Toma en cuenta que debes tener Sepolia_ETH para este paso. Por favor, usa el faucet del paso anterior para obtenerlos, si aún no los tienes.

Image description

  • Necesitarás la dirección del contrato WETH para desplegar el contrato Routing. El artículo ha dado un par de direcciones WETH en diferentes redes de pruebas. Te recomiendo que NO las uses sino, crea y despliega tu propio contrato WETH ERC20. Esto te dará mejor flexibilidad para probar.
  • Abajo hay una captura de pantalla de la parte a la que me refiero. Te sugiero: crea tu propio WETH ERC20 y pásalo como el contrato routing.

Image description

  • Toma en cuenta de nuevo que sólo hacemos los primeros dos pasos del artículo mencionado. Para la parte relacionada al frontend (la segunda parte del artículo), usaremos otro tutorial. La razón principal es porque el código de ahí no se puede ejecutar directamente. Abajo hay una captura de dónde debes parar:

Image description

Resultados del paso 3:

2 contratos desplegados (Factory y Routing), con sus direcciones del contrato.

Paso 4: Desarrolla la interfaz front-end y Debuggea

Esta parte está basado en el tutorial de Ben Haslam. Puedes descargar el código github desde el enlace del artículo. Mi contribución es ayudarte a hacer algunos cambios y hacer que se ejecute, incluyendo:

  • Añadir soporte a la red de pruebas sepolia ETH.
  • Revisar los parámetros necesarios para la actualización de los paquetes y/o herramientas.

Abajo hay una copia directa de Ben Haslam en su trabajo:

La interfaz oficial de Uniswap resultó ser difícil para hacer forks en la red privada por su base de códigos muy expansiva y por tener problemas conectándose a una billetera. Ya que quería tener una base de códigos que pudiese entender de arriba a abajo, decidí escribir mi propia aplicación simple, con la ayuda de mi interno genial, Matt.
Usamos ReactJS para el proyecto, con el módulo EtherJS para conectarse a la blockchain a través de metamask en el navegador, y Material-UI para el frontend. Como era un sitio estático, usamos páginas de github para alojar el proyecto.

Necesitas continuar leyendo el artículo antes de poder seguir.

——————

Ahora que ya haz hecho el recorrido, abajo hay unos cambios necesarios para poder ejecutarlo:

1. Cambios necesarios en network.js

En la función setupConnection, usa una url de Alchemy para crear una instancia network.provider. Por ejemplo:

const url = ‘https://eth-sepolia.g.alchemy.com/v2/YOUR_ALCHEMY_KEY_IN_STEP_1';
network.provider = new ethers.providers.JsonRpcProvider(url);
Enter fullscreen mode Exit fullscreen mode

2. Cambios necesarios en constants/chains.js

El propósito es añadir soporte a la red de pruebas de sepolia:

  • ¿Por qué 11151111? Enlace
  • Toma en cuenta que la dirección del router debería ser tu propia dirección desplegada en el paso anterior.

Image description

3. Cambios necesarios en constants/coins.js

El propósito es añadir la lista de los tokens al soporte de tu contrato swap. Hay 2 cambios que son necesarios:

Image description

Resultados del Paso 4:

El código descargado de github además de los cambios ya mencionados.

Paso 5: Debuggea y ejecuta todo el proyecto

Esta parte es la que más me causó dificultades porque el código, inicialmente, no se detenía en los breakpoints del debuggeo. La regla de oro que aprendí para resolver esto es: necesitas ejecutarlo 2 veces para debuggearlo y detenerte en los breakpoints:

  • La primera vez: ve a Terminal y tipea npm start para ejecutarlo por primera vez.

Image description

  • La segunda vez: establece los breakpoints y luego usa el botón de debuggear para ejecutarlo de nuevo.

Image description

Los siguientes artículo son útiles si tienes problemas:

La interfaz final se verá así

La interfaz está basada en el tutorial de Ben Haslam. Luego que la hayas ejecutado sin problemas, deberías ver una interfaz emocionante, incluyendo:

La pestaña Swap

Image description

La pestaña Liquidity

Image description

¡Felicitaciones! Haz hecho tus propios proyectos DEX. ¡Disfrútalos! 🙂

Si quieres donar, ¡gracias! Mi dirección es: 0x2219A3f38c6D6932bF8F94f34d5C19A793864174

De nuevo, ¡disfrútalo!

Este artículo es una traducción de Ben Liu, 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_es en Twitter.

Discussion (0)