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
Para instalar todos los paquetes relacionados, ejecuta el siguiente comando:
yarn install
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
Despliega los contratos:
yarn deploy
🚨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
Una vez que la aplicación se ejecute, puedes accesarla en http://localhost:3000/ y deberías ver lo siguiente:
Antes de profundizar en el contrato inteligente, empezemos explorando las funcionalidades de SandwichAttack
. Para empezar, navega a la página SandwichAttack
:
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 laamount
detoken0
para eltoken1
en UniswapV2.La función requiere que los balances de ambos
token0
ytoken1
en el contrato sea mayor queamount
.La función aprueba el router UniswapV2 para gastar el
maxValue
de ambostoken0
ytoken1
.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 deltoken0
portoken1
.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:
2. Ejecutar el Ataque Front-Run
Nuestro siguiente movimiento es ejecutar el ataque front-run, como se muestra abajo:
- 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.
- Ejecutar el Ataque Back-Run:
Aquí, estamos intercambiando 200000000.0
tokens UNI para los 200008627
Tokens DAI.
¡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:
- Build Your Own Decentralized Lending Protocol
- Build Your Own Decentralized Exchange
- A Comprehensive Step-by-Step Guide for Building a FlashLoan Arbitrage Bot
- 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)