WEB3DEV

Cover image for Aprenda Como Realizar um Ataque Sanduíche
Adriano P. Araujo
Adriano P. Araujo

Posted on

Aprenda Como Realizar um Ataque Sanduíche

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

Enter fullscreen mode Exit fullscreen mode

Para instalar todos os pacotes necessários, execute o seguinte comando:


yarn install

Enter fullscreen mode Exit fullscreen mode

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

Enter fullscreen mode Exit fullscreen mode

Implantando os contratos


yarn deploy

Enter fullscreen mode Exit fullscreen mode

🚨 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

Enter fullscreen mode Exit fullscreen mode

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 troca amount de token0 por token1 na UniswapV2.

  • A função exige que os saldos de token0 e token1 no contrato sejam maiores do que amount.

  • A função aprova o roteador UniswapV2 a gastar no máximo maxValue de token0 e token1.

  • 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 de token0 por token1.

  • 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:

  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 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)