WEB3DEV Español

Cover image for Aprende cómo realizar un Ataque Sándwich
Hector
Hector

Posted on

Aprende cómo realizar un Ataque Sándwich

Image description

En este tutorial, estaremos usando Scaffold-ETH x BuildBear para mostrar de forma interactiva cómo Realizar un Ataque Sándwich en UniSwapV2 en un fork del Mainnet de Ethereum.

¿Qué es un Ataque Sándwich?

En el escenario del ataque sándwich, el atacante monitorea el mempool (una lista pendiente de transacciones) para la transacción objetivo que quieren explotar. Una vez que identifican el objetivo, presentan dos transacciones: una antes y después de la transacción objetivo, rodeándola como el pan en un sándwich.

¿Cómo se hace un Ataque Sándwich?

Un Ataque Sándwich es realizado a través de una secuencia de pasos, apuntados a explotar la volatilidad del precio en un intercambio descentralizado, como Uniswap. Aquí está explicado cómo se ejecuta el ataque:

  • Monitoreando el Mempool: Al atacante comienza observando de cerca el mempool, el cual es un pool (piscina) de transacciones pendientes que aún deben ser confirmadas en la blockchain. Dentro de este mempool, el atacante está en la búsqueda de una transacción en particular, el “objetivo”, los cuales puede sacar provecho.

  • Identificando el Objetivo: La transacción objetivo es una que envuelve un intercambio significativo, usualmente con una cantidad de tokens sustanciales. Esta transacción que está pendiente en el mempool, proporciona una ventana de oportunidad para que el atacante aproveche las fluctuaciones potenciales del precio.

  • Preparando el Sándwich: Una vez que se detecta la transacción objetivo, el atacante actúa rápidamente subiendo dos operaciones propias. Estas transacciones son cronometradas estratégicamente para ser incluídas en el bloque antes y después de la transacción objetivo. Esto crea una situación donde la transacción objetivo se vuelve un “sándwich” entre las transacciones del atacante.

  • Transacción Frontrun: La primera transacción del atacante, conocida cómo la transacción frontrun, ocurre antes de la transacción objetivo. En este paso, el atacante puede que realice un intercambio de swap, alterando el precio de los tokens envuelto en la próxima transacción objetivo.

  • Transacción Backrun: La segunda transacción del atacante, llamada transacción backrun, ocurre luego de la transacción objetivo. Aquí, el atacante puede que ejecute un intercambio reverso del token, apuntando a capitalizar en el precio alterado.

  • Manipulando el Precio: Ejecutando estas dos transacciones alrededor de la transacción objetivo, la meta del atacante es manipular el precio del token. El precio alterado puede llevar al usuario envuelto en la transacción objetivo a recibir una cantidad diferente de token de la que estaba anticipando.

  • Beneficiándose de la Fluctuación de Precios: El atacante apunta a beneficiarse de la variación de precio causado por sus transacciones estratégicas. Dependiendo si el precio subió o bajó por el ataque, el atacante puede ganar, bien sea comprando tokens a menor precio, o vendiéndolos a mayor precio.

Siguiendo este tutorial, aprenderás cómo Realizar un Ataque Sándwich en UniSwap V2.

¡Empecemos!

Comenzando

Para empezar, navega el repositorio scaffold-eth x BuildBear.

Aquí está por qué recomendamos usar scaffold-eth x BuildBear:

  • Te permite fácilmente hacer forks compatibles con cadenas de la EVM (como Ethereum, Polygon, Binance Smart Chain, Fantom, Optimism y Arbitrum Mainnet) directamente del CLI, salvando tu valioso tiempo para que lo puedas usar buscando RPCs que funcionen.

  • Puedes acuñar tokens ERC20 fácilmente de forma nativa usando el CLI, eliminando la necesidad de perder tiempo buscando faucets funcionales.

Para comenzar, haz click en el botón “Fork” para crear una copia del repositorio en tu propia cuenta GitHub. Por favor espera que el proceso del fork se complete antes de continuar.

Luego, abre el terminal y clona el repositorio forked, el cual incluye todos los componentes necesarios para construir una aplicación descentralizada:

git clone <paste the URL you fork repo>
cd scaffold-eth
Enter fullscreen mode Exit fullscreen mode

Para instalar todos los paquetes relacionados, ejecuta el siguiente comando:

yarn install
Enter fullscreen mode Exit fullscreen mode

Para ejecutar Flashloan Arbitrage, podemos aprovechar el Protocolo Aave y DEXs, haciendo el fork del Mainnet de Ethereum en vez de desplegar estos protocolos.

Usa el siguiente comando:

yarn fork-bb
Enter fullscreen mode Exit fullscreen mode

Image description

Despliega los contratos:

yarn deploy
Enter fullscreen mode Exit fullscreen mode

Image description

🚨Si estás usando la versión Node <v18, necesitarás remover openssl-legacy-provider desde el start del script en package.json comenzando el frontend

yarn start
Enter fullscreen mode Exit fullscreen mode

Una vez que la aplicación se ejecute, puedes accesarla en http://localhost:3000/ y deberías ver lo siguiente:

Image description

Antes de profundizar en el contrato inteligente, empezemos explorando las funcionalidades de SandwichAttack. Para empezar, navega a la página SandwichAttack:

Image description

En la página SandwichAttack, tienes la opción para ejecutar tres transacciones claves: la transacción Frontrun, la transacción User y la transacción Backrun.

Profundicemos en el Contrato Inteligente

Podemos encontrar el contrato SandwichAttack.sol en packages/hardhat/contracts:

Desglosemos los componentes clave y la funcionalidades del contrato:

Importe e Interfaz

  • El contrato importa la interfaz IERC20 desde la biblioteca ERC20 OpenZeppelin, lo cual provee las funciones estándar para los tokens ERC20.

  • El contrato declara una interfaz IuniswapV2Router02 para la función UniswapV2 de intercambio del router. Esta interfaz representa la interacción con la funcionalidad de intercambio del router de UniswapV2.

Función Frontrun

  • frontrun: una función que ejecuta el primer paso para el atacante sándwich. Intercambia la amount de token0 para el token1 en UniswapV2.

  • La función requiere que los balances de ambos token0 y token1 en el contrato sea mayor que amount.

  • La función aprueba el router UniswapV2 para gastar el maxValue de ambos token0 y token1.

  • Se establece el camino del intercambio de token y los parámetros, incluyendo la cantidad mínima de token1 esperado (amountOutMin) y la fecha límite para el intercambio (deadline).

  • La función ejecuta el intercambio de token y almacena las cantidades resultantes.

Función Backrun

  • backrun: una función que realiza el segundo paso del ataque sándwich. Intercambia el balance restante del token0 por token1.

  • Se establece el camino del intercambio y los parámetros, incluyendo una cantidad mínima de token1 esperado (el cual es establecido a 0) y una fecha límite para el intercambio.

  • La función luego ejecuta el intercambio del token y almacena las cantidades resultantes.

Iniciar un Ataque Sándwich: guía paso a paso

Para realmente entender las mecánicas de un Ataque Sándwich, profundicemos en su ejecución y complejidades.

1. Preparando el Contrato sandwichAttack

Necesitamos asegurarnos que el contrato sandwichAttack sea financiado apropiadamente con los tokens que intentamos manipular, como se muestra abajo:

Image description

2. Ejecutar el Ataque Front-Run

Nuestro siguiente movimiento es ejecutar el ataque front-run, como se muestra abajo:

Image description

Image description

  • Transacciones de Usuario:

Aquí, estamos intercambiando 100000000 tokens DAI por tokens UNI. Sin embargo, por el ataque front-run, el resultado diverge significativamente de las expectativas. Como se muestra, el resultado es un mero 0.062 tokens UNI para los 100000000 tokens DAI sustanciales.

Image description

  • Ejecutar el Ataque Back-Run:

Aquí, estamos intercambiando 200000000.0 tokens UNI para los 200008627 Tokens DAI.
Image description

¡Felicidades🎉🎉!

Hemos ejecutado exitosamente un Ataque Sándwich, alterando efectivamente los precios del token dentro de los pools de UniswapV2.

Si aprecias lo que estamos haciendo por favor, síguenos en Twitter y LinkedIn y Únete al grupo de Telegram si no lo haz hecho aún.

Repositorio de GitHub: scaffold-eth x BuildBear

Sobre BuildBear

BuildBear es una plataforma para probar las dApps en escala, para equipos. Provee a los usuarios con su propia Testnet privada para probar sus contratos inteligentes y dApps, los cuales pueden ser forked desde cualquier cadena EVM. También provee un Faucet, Explorer y RPC para propósitos de prueba.

BuildBear apunta a construir un ecosistema de herramientas para probar las dApps que escala para los equipos.

Revisa los proyectos que construimos en scaffold-eth x BuildBear y sigue aprendiendo:

  1. Build Your Own Decentralized Lending Protocol
  2. Build Your Own Decentralized Exchange
  3. A Comprehensive Step-by-Step Guide for Building a FlashLoan Arbitrage Bot
  4. Learn How to Create Liquidity Pools on UniswapV3 for new ERC20 TOkens

Este artículo es una traducción de BuildBear Team, 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)