Neste tutorial, usaremos o Scaffold-ETH em conjunto com o BuildBear para demonstrar interativamente como realizar um Ataque Sanduíche no UniSwapV2 em um fork da Ethereum Mainnet.
O que é um Ataque Sanduíche?
Em um cenário de ataque sanduíche, o atacante monitora o mempool (uma lista de transações pendentes) em busca de uma transação de destino que deseja explorar. Uma vez identificado o alvo, ele envia duas transações - uma antes e outra depois da transação de destino - cercando-a, como o pão em um sanduíche.
Como é Realizado um Ataque Sanduíche?
Um Ataque Sanduíche é orquestrado por meio de uma sequência de etapas com o objetivo de explorar a volatilidade de preços em uma exchange descentralizada, como a Uniswap. Aqui está como o ataque é executado:
Monitorando o Mempool: O atacante começa observando atentamente o mempool, que é um conjunto de transações pendentes que ainda não foram confirmadas na blockchain. Dentro desse mempool, o atacante procura por uma transação específica - o "alvo" - que eles podem explorar.
Identificando o Alvo: A transação de destino é aquela que envolve uma negociação significativa, frequentemente com uma quantidade substancial de tokens. O status pendente desta transação no mempool oferece uma janela de oportunidade para o atacante aproveitar as potenciais flutuações de preço.
Preparando o Sanduíche: Assim que a transação de destino é identificada, o atacante age rapidamente enviando duas transações próprias. Essas transações são estrategicamente cronometradas para serem incluídas no bloco antes e depois da transação de destino. Isso cria uma situação em que a transação de destino fica "no meio do sanduíche" entre as transações do atacante.
Transação de Frontrun: A primeira transação do atacante, conhecida como transação de frontrun, ocorre antes da transação de destino. Neste passo, o atacante pode realizar uma troca de tokens, alterando o preço dos tokens envolvidos na próxima transação de destino.
Transação de Backrun: A segunda transação do atacante, chamada de transação de backrun, ocorre após a transação de destino. Aqui, o atacante pode executar uma troca reversa de tokens, visando lucrar com o preço alterado.
Manipulando o Preço: Ao executar essas duas transações em torno da transação de destino, o objetivo do atacante é manipular o preço do token. O preço alterado pode levar o usuário envolvido na transação de destino a receber uma quantidade diferente de tokens do que inicialmente esperava.
Lucrando com a Flutuação de Preço: O atacante visa lucrar com a variação de preço causada por suas transações estratégicas. Dependendo se o preço foi elevado ou reduzido devido ao ataque, o atacante pode ganhar comprando tokens a um preço mais baixo ou vendendo-os a um preço mais alto.
Seguindo este tutorial, você aprenderá como realizar um Ataque Sanduíche na UniSwapV2.
Vamos começar!
Iniciando
Para começar, acesse o repositório do Scaffold-ETH x BuildBear.
Aqui está o motivo pelo qual recomendamos o uso do Scaffold-ETH x BuildBear:
Ele permite que você faça forks facilmente de cadeias compatíveis com a EVM (como Ethereum, Polygon, Binance Smart Chain, Fantom, Optimism e Arbitrum Mainnet) diretamente a partir da CLI, economizando tempo valioso que seria gasto procurando RPCs funcionais.
Você pode criar tokens nativos e ERC20 facilmente usando a CLI, eliminando a necessidade de procurar torneiras funcionais.
Para começar, clique no botão "Fork" (bifurcação) para criar uma cópia do repositório em sua própria conta do GitHub. Aguarde o término do processo de fork antes de prosseguir.
Em seguida, abra um terminal e clone o repositório bifurcado, que inclui todos os componentes necessários para construir um aplicativo descentralizado:
git clone <paste the URL you fork repo>
cd scaffold-eth
Para instalar todos os pacotes necessários, execute o seguinte comando:
yarn install
Para executar a arbitragem por meio de empréstimos relâmpago, podemos aproveitar o protocolo Aave existente e as DEXs fazendo um fork na Ethereum Mainnet, em vez de reimplantar esses protocolos. Use o seguinte comando:
yarn fork-bb
Implantando os contratos
yarn deploy
🚨 Se você estiver usando uma versão do Node < v18, será necessário remover openssl-legacy-provider
do script de início no arquivo package.json
.
Iniciando o frontend
yarn start
Depois que a aplicação estiver em execução, você poderá acessá-la em http://localhost:3000 e verá o seguinte:
Antes de aprofundar nos contratos inteligentes, vamos começar explorando as funcionalidades do site SandwichAttack. Para começar, vá para a página principal do SandwichAttack.
Na página principal do SandwichAttack, você tem a opção de executar três transações-chave: a transação de Frontrun, a transação do Usuário e a transação de Backrun.
Agora, vamos aprofundar nos contratos inteligentes.
Podemos encontrar o contrato SandwichAttack.sol
no diretório packages/hardhat/contracts
.
Vamos detalhar os principais componentes e funcionalidades do contrato:
Importação e Interface:
O contrato importa a interface
IERC20
da biblioteca OpenZeppelin ERC20, que fornece funções padrão para tokens ERC20.O contrato declara uma interface
IUniswapV2Router02
para a função de troca do roteador UniswapV2. Essa interface representa a interação com a funcionalidade de troca do roteador UniswapV2.
Função de Frontrun:
frontrun
: Uma função que executa a primeira etapa do ataque sanduíche. Ela trocaamount
detoken0
portoken1
na UniswapV2.A função exige que os saldos de
token0
etoken1
no contrato sejam maiores do queamount
.A função aprova o roteador UniswapV2 a gastar no máximo
maxValue
detoken0
etoken1
.Ela configura o caminho de troca de tokens e os parâmetros, incluindo a quantidade mínima de
token1
esperada (amountOutMin
) e um prazo para a troca (deadline
).A função executa a troca de tokens e armazena os montantes resultantes.
Função de Backrun:
backrun
: Uma função que executa a segunda etapa do ataque sanduíche. Ela troca o saldo restante detoken0
portoken1
.Ela configura o caminho de troca de tokens e os parâmetros, incluindo a quantidade mínima de
token1
esperada (definida como 0) e um prazo para a troca.A função então executa a troca de tokens e armazena os montantes resultantes.
Iniciando um Ataque Sanduíche: Um Guia Passo a Passo
Para compreender verdadeiramente a mecânica de um Ataque Sanduíche, vamos aprofundar na execução e nas complexidades.
1. Preparando o Contrato sandwichAttack
:
Precisamos garantir que o contrato sandwichAttack
esteja adequadamente financiado com os tokens que pretendemos manipular, como mostrado abaixo.
2. Executando o Ataque de Frontrun:
Nosso próximo passo envolve a execução do ataque de Frontrun, como mostrado abaixo.
- Transações do Usuário:
Aqui, estamos trocando 100000000
tokens DAI por tokens UNI. No entanto, devido ao ataque de Frontrun, o resultado difere significativamente das expectativas. Como mostrado, o resultado é de apenas 0.062
tokens UNI para os substanciais 100000000
tokens DAI.
- Executando o Ataque de Backrun:
Aqui, estamos trocando 200000000.0
tokens UNI por 200008627
tokens DAI.
🎉🎉 Parabéns!
Realizamos com sucesso um Ataque Sanduíche, alterando efetivamente os preços dos tokens nas pools da UniswapV2.
Se você aprecia o que estamos fazendo, siga-nos no Twitter e LinkedIn e junte-se ao grupo do Telegram se ainda não o fez.
Repositório no Github: Scaffold-ETH x BuildBear
Sobre o BuildBear:
O BuildBear é uma plataforma para testar dApps em escala, para equipes. Ele fornece aos usuários sua própria Testnet privada para testar seus contratos inteligentes e dApps, que podem ser derivados de qualquer cadeia EVM. Ele também oferece um Faucet, Explorer e RPC para fins de teste.
O BuildBear tem como objetivo construir um ecossistema de ferramentas para testar dApps em escala para as equipes.
Confira os projetos que construímos no Scaffold-ETH x BuildBear e continue aprendendo:
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 artigo foi escrito por BuildBear Team e traduzido por Adriano P. de Araujo. O original em inglês pode ser encontrado aqui.
Latest comments (0)