21 de abril de 2023
Dissecando outro tipo de atividade de arbitragem MEV (Maximal Extractable Value - Valor máximo extraível).
Introdução
Em nossos artigos anteriores descrevendo a Dark Forest do MEV, abordamos a arbitragem do sanduíche de LP (também conhecido como liquidez Just-in-Time) com grandes detalhes.
Para recapitular, o atacante da liquidez JIT (Just-in-Time) identifica uma grande negociação em uma pool AMM (Automated Market Maker - Formador de Mercado Automatizado). de Liquidez Concentrada (na maior parte das vezes a Uniswap V3), deposita uma grande quantidade de liquidez na pool logo antes da negociação e retira a liquidez logo após a negociação, embolsando assim as taxas e o impacto do preço do negócio.
Neste artigo, falaremos sobre um ataque sanduíche de LP reverso (Reverse LP Sandwich Attack), que pode ser pensado como o oposto do ataque sanduíche de LP.
Aqui, o atacante primeiro identifica uma operação de provisão de liquidez (ou depósito ou retirada) que está prestes a ser realizada em uma pool. Calculando como exatamente a nova liquidez influenciará os preços, o atacante insere uma negociação antes e depois da mudança na liquidez, obtendo lucro.
Como funciona o ataque sanduíche reverso
Basicamente, o ataque sanduíche de LP reverso se trata de encontrar uma transação na qual um LP modifica a liquidez da pool e obter lucro executando o front-run e, em seguida, o back-run dessa transação.
Vamos considerar um exemplo teórico simples usando o AMM de produto constante básico:
Digamos que temos uma pool entre dois ativos, precificadas em US$ 1 e US$ 2, respectivamente, e, para simplificar, afirmamos que a pool contém 200X e 100Y.
Agora, alguém está prestes a adicionar liquidez à pool.
O atacante detecta que a liquidez está para ser adicionada, digamos que o novo LP queira adicionar 100X e 50Y.
O atacante insere uma transação de front-run antes da transação do LP e uma transação de back-run logo após, da seguinte maneira:
- Vende 100X para a pool e recebe 33,26Y. A pool agora contém 300X e 66,73Y, e a proporção X/Y na pool muda de 2/1 antes da venda para 4,49/1.
- O LP deposita fundos. Em AAMs de produto constante, a liquidez só pode ser depositada na proporção atual de ativos na pool. Como a proporção mudou devido à execução do front-run, no lugar de 100 e 50, o LP depositará 100X e 22,24Y, ao invés de 100X e 50Y, conforme planejado originalmente.
- O atacante vende os 33,26Y para a pool. Como a pool se tornou mais funda agora, ela recebe 111,99X — 12% a mais do que foi vendido na etapa 1, obtendo um lucro.
Observação importante: na maioria dos contratos inteligentes de AMM, o método de depósito de liquidez tem uma maneira de controlar a derrapagem, ou seja, para a mudança inesperada na razão entre dois ativos na pool. Na Uniswap V2, isso é obtido por dois parâmetros — amountAMin e amountBMin, especificando os valores mínimos das duas moedas que o LP está disposto a depositar. No exemplo acima, se o LP tivesse especificado, digamos, 98 e 49 como valores mínimos (equivalente a 1% de concessão de derrapagem), esse ataque não teria acontecido.
Um exemplo da vida real
Aqui está um exemplo da vida real de um ataque sanduíche de LP reverso em uma pool da Uniswap V2.
O atacante detecta um depósito futuro no valor de 90 ETH em liquidez em uma pool SUDO-WETH e cria um pacote MEV, envolvendo a transação de depósito em um sanduíche de 3 pedaços:
O atacante vende 204,97 ETH para a pool antes da operação, recebendo 177.653 SUDO.
A vítima realiza o depósito de LP pretendido (em uma proporção diferente da originalmente esperada pelo LP), fornecendo 45 ETH e 27.652 SUDO à pool.
O atacante executa o back-run, vendendo 177.653 SUDO de volta à pool por 207,77 ETH, obtendo um belo lucro de 2,79 ETH.
Veja as transações no Etherscan: Front-run, LP Victim, Back-run.
Por que o ataque funciona?
Quando a liquidez é adicionada à pool, a curva de AMM torna-se mais alta. No gráfico abaixo, a linha verde representa a curva antes do depósito de liquidez adicional e a linha vermelha mostra a curva após o depósito de nova liquidez.
Para melhor visibilidade, modificamos o exemplo da vida real acima da seguinte forma:
A liquidez na pool XY é X=607,36 e Y=494,30.
Front-run: o atacante troca 204,97Y para 177,65X.
A vítima deposita 691,32X e 1.125Y na pool (intencionalmente fizemos o depósito muito grande em relação ao tamanho original para tornar o gráfico mais expressivo).
Back-run: o atacante troca 177,65X de volta para 248,90Y, obtendo 43,9Y de lucro.
Os pontos A e B mostram o estado da pool antes e depois do front-run e os pontos C e D mostram o estado da pool antes e depois do back-run.
A seta pontilhada mostra o depósito do LP, movendo a curva de AMM do verde para o vermelho, e o estado da pool de B para C.
É claramente visível no gráfico que a curva vermelha está muito mais próxima de uma linha reta do que a curva verde, o que significa que o impacto no preço da curva vermelha é muito menor. Isso é exatamente o que gera o lucro da arbitragem.
Variações do ataque
Enquanto os ataques “clássicos” de sanduíche de LP reverso pegam depósitos de LP, há casos em que o LP não apenas deposita ou retira liquidez, mas também realiza uma troca. Em muitos casos, os LPs possuem apenas um dos dois ativos e trocam metade do valor desejado para segundo ativo antes de depositar. Da mesma forma, depois de retirar a participação do LP de uma pool, os LPs, em alguns casos, desejam receber tudo em um único ativo e trocar um dos ativos retirados pelo outro diretamente na pool. Essas trocas necessariamente desequilibram a pool, criando uma oportunidade adicional de arbitragem.
Aqui está um exemplo bastante notável de um ataque combinado:
- 1. Front-run (veja no Etherscan):
— O atacante troca 618 WETH para 43,3M SHIB na Uniswap V3.
— Atacante troca 43,3M SHIP para 499,9 WETH.
- 2. Transação de LP atacada (veja no Etherscan):
— LP retira 233 WETH e 22,12M SHIB da pool V2 (aproximadamente 4,5% de liquidez).
— LP imediatamente troca 22,12M SHIB para 221 WETH nessa pool, desequilibrando-a.
- 3. Back-run (veja em Etherscan):
— O atacante troca 499,9 WETH para 46,8M SHIB na pool V2 desequilibrada.
— O atacante troca 46,8 milhões de SHIB para 652 WETH na pool V3, gerando um rendimento de 34 WETH.
Outros protocolos
O ataque funciona não apenas na Uniswap V2. Na verdade, ultimamente, como a Uniswap V2 é ofuscada por outros protocolos, apenas uma pequena parte dos ataques sanduíche de LP reverso acontecem na Uniswap V2. Curve, Balancer, Dodo e Uniswap V3 e outros estão todos sujeitos a esse tipo de ataque.
Quem está perdendo dinheiro?
A arbitragem é um jogo de soma zero, então, quando o atacante ganha dinheiro, alguém está perdendo. No ataque sanduíche de LP reverso, o perdedor é o LP que está adicionando liquidez. O invasor força o LP a fornecer liquidez ao preço errado e arbitra o preço de volta ao preço de mercado imediatamente depois do depósito de liquidez, essencialmente roubando do LP parte de seu investimento. Em princípio, definir uma tolerância de derrapagem baixa deve evitar que os ataques aconteçam, mas, aparentemente, bastante LPs estão definindo o limite muito alto ou não o definindo.
Estatísticas
Vamos mergulhar nos números. Neste artigo, abordaremos apenas a Ethereum, deixando outras blockchains para mais tarde.
Quanto
O gráfico abaixo mostra a quantidade de ataques por protocolo:
# Número de ataques por protocolo
Estamos testemunhando um forte crescimento no número mensal de ataques a partir de 22 de agosto e o número total atingiu o recorde de todos os tempos de 629 ataques em março de 2023.
No entanto, comparado com o número total de eventos de provisão de liquidez, o número de ataques é bastante limitado. Para referência, segue abaixo o gráfico que mostra o número total de depósitos de liquidez por protocolo no ano passado.
# Número de depósitos de LP por protocolo
Apenas uma pequena fração de todos os depósitos de LP é atacada (em média, 0,0024% de todas as operações de LP são atacadas). Isso provavelmente se explica pelo fato de que, geralmente, o LP configurou a proteção contra derrapagem corretamente, não permitindo um ataque. Outra razão é que a maioria dos depósitos de LP não são grandes o suficiente para tornar o ataque lucrativo. Como mostramos no Apêndice A, na Uniswap V2, o depósito deve ser de pelo menos 0,6% do tamanho total da pool para ser um alvo adequado para ataque.
Quanto dinheiro
No total, mais de US$ 1,2 bilhão foram usados por bots para ataques sanduíche de LP reversos, e a receita total gerada por eles é de US$ 5,5 milhões, bastante semelhante ao lucro da liquidez JIT, também conhecida como ataques sanduíche de LP, que discutimos em nosso artigo anterior. Aqui está o gráfico histórico que mostra os volumes totais usados para execução de front-run e o lucro bruto mensal (ou seja, a receita de ataque menos os custos de gás) gerado pelos atacantes, dividido por protocolo:
Historicamente, a Uniswap V2 foi a principal fonte de alvo para ataques e a principal fonte de receita para bots de MEV. No entanto, nos últimos 12 meses, a Uniswap V3 e o Curve se tornaram os alvos principais.
# Receita total por protocolo
Lucro líquido
No ecossistema da Ethereum MEV pós-fusão, arbitradores (também conhecidos como pesquisadores) competem em um leilão contra o Block Builder para ter seus pacotes de transações inclusos em um bloco. Os lances (também conhecidos como recompensas de MEV) são enviados na forma de transferências diretas para o endereço Coinbase, e a soma de todos os lances de arbitragem pode ser observada como o valor da última transação no bloco. No entanto, há uma dificuldade - a maioria dos blocos tem mais de um ataque MEV neles e não é possível deduzir qual parte da recompensa total do MEV deve ser atribuída a um ataque específico usando os dados da blockchain.
Para estimar as recompensas de MEV pagas pelos atacantes, escolhemos as instâncias de ataques JIT em que a recompensa de MEV paga no bloco foi menor do que a receita estimada das taxas de negociação. Assumimos que o invasor pode calcular com precisão a receita que espera receber do ataque e que esta é racional, portanto, ele não irá propor uma recompensa de MEV maior do que a receita de taxa esperada.
Do total de 3.179 ataques ocorridos após a fusão, apenas 408 satisfizeram essa condição. As participações média e mediana no lucro dos atacantes pagas aos validadores é de 58,2% e 63,9%, respectivamente.
Variação de receita
Embora, na maioria dos ataques (76%), a receita do atacante seja inferior a US$ 1.000, existem alguns pontos fora da curva significativos com lucro superior a US$ 100 mil por transação.
O gráfico abaixo mostra a distribuição do número de transações e lucro gerado por faixas de lucro.
O ataque sanduíche de LP reverso de maior sucesso ocorreu em 25 de novembro de 2022 às 16h28min23s + UTC, e teve um lucro bruto de US$ 535.000. Nós o abordamos em nossa série #contosdodarkforest aqui: https://twitter.com/VirtuSwap/status/1597178044392693765?s=20.
Existe uma certa diferença por protocolo atacado, conforme mostrado abaixo, com o Curve apresentando a maior receita mediana por ataque:
# Receita de atacante mediana por protocolo
Abaixo está a função de distribuição de probabilidade da receita total e número de ataques por faixas de receita de US$ 1.000. Ataques com receita abaixo de US$ 1.000 constituem 75% de todos os ataques, mas geram apenas 11% de toda a receita.
# Distribuição do número de ataques por faixas de receita
Onde
Para que o ataque aconteça, o LP precisa permitir alta tolerância à derrapagem. A tolerância é definida na interface do usuário, por isso, consideramos interessante verificar quais front-ends são responsáveis pelos ataques. Abaixo está a discriminação do número total de ataques sanduíche de LP reverso por roteador, ou seja, pelo produto do front-end com o qual o LP interage.
# Número de ataques por roteador
Um roteador que se destaca é o Zapper.fi - parece que entre maio de 2021 e julho de 2022 a proporção de depósitos de LP atacados originários do Zapper foi muito maior do que em qualquer outro roteador. Suspeitamos que a tolerância de derrapagem estava ou muito solta por padrão ou não foi implementada. Também parece que o Zapper parou de oferecer a seus usuários a opção de depositar fundos em pools AMM por volta de julho de 2022.
# Depósitos de LP originários do Zapper e números de ataques
Além disso, cada depósito de LP atacado no Zapper é precedido por uma troca, o que significa que foi oferecido aos usuários o uso de apenas um ativo do LP (trocando metade do valor para o segundo ativo nos bastidores). Isso levou a um desequilíbrio adicional da pool, oferecendo oportunidade adicional aos atacantes.
Quem
Vamos conhecer os atacantes. No total, foram observados 61 contratos de bots observados como atuantes nos ataques de sanduíche de LP reverso.
# Principais bots atacantes
Mais de 80% de toda a receita é feita por apenas 6 bots.
O bot principal é 0x000000…b40 — esse contrato fez 470 ataques e produziu US$ 1,57 milhão em receita. Parabéns ao 0x000000…b40!
Conclusões
Neste artigo, analisamos os ataques sanduíche de LP reverso — um subconjunto de ataques sanduíche. O princípio da operação do ataque é baseado em fazer uso da definição da tolerância de derrapagem da vítima ser muito alta e executar as operações de front-run e back-run.
Esse ataque prejudica os LPs e beneficia apenas o atacante (ao contrário do ataque de liquidez JIT, que também beneficia aquele que realiza a negociação).
O número desses ataques está crescendo de forma bem abrupta, atingindo o recorde mensal em março de 2023. Podemos supor que os ataques continuarão a crescer.
Apêndice A - Fórmulas
Neste apêndice, apresentaremos a modelagem matemática de um ataque sanduíche de LP reverso “clássico” em uma pool da Uniswap V2 com ativo X e ativo Y. O ataque clássico tem os seguintes estágios:
O atacante troca o valor ∂x do ativo X para ∂y do ativo Y.
O LP adiciona liquidez à pool — valor X do ativo X e um valor correspondente do ativo Y.
O atacante executa o back-run, trocando ∂y recebido na etapa 1 de volta ao ativo X e obtendo um lucro.
Vamos indicar os níveis iniciais de liquidez do ativo X e do ativo Y como X e Y, respectivamente.
Estágio 1 — o atacante troca ∂x por ∂y
O valor ∂y é calculado da seguinte forma:
Aqui e nas fórmulas subsequentes, f representa a taxa da pool (na Uniswap V2 geralmente é 0,003).
Após a troca, as reservas de ativos na pool mudam para o seguinte:
Estágio 2 - LP fornece liquidez
Originalmente, o LP designa os valores X e Y. No entanto, devido ao fato de a proporção da pool ser alterada desde que o atacante realizou uma troca antes do depósito do LP, o valor do segundo ativo será diferente.
Dado o valor de X que o usuário gostaria de fornecer, podemos calcular o valor Y que corresponde a ele e, em seguida, as liquidez atualizadas na pool após o depósito do LP:
Vamos introduzir a razão de crescimento da liquidez r:
Dado r, podemos calcular as novas liquidez após o depósito:
Estágio 3 - Back-run
A venda do valor ∂y inicialmente recebido do ativo Y de volta à pool após a mudança de liquidez produzirá o seguinte valor ∂x''' do ativo X:
Vamos substituir as fórmulas calculadas para ∂y, X'' e Y'' e simplificar. Por conveniência, substituiremos * t* por ∂x(1-taxa)
Substituindo t de volta, obtemos:
Agora, vamos calcular o lucro de arbitragem de uma transação sanduíche reversa. A receita (excluindo as taxas de gás) é igual a ∂x''' — ∂x. Por conveniência, substituiremos F por (1-f)²:
Agora, vamos abrir o membro r-1 :
E expandir ainda mais a expressão do lucro para obter o seguinte resultado bastante desagradável:
Avançando na substituição de F' por 1-F, obtemos a seguinte forma ligeiramente mais simples:
Valores Mínimos
Vamos agora quantificar os valores mínimos de X e ∂ x necessários para que a arbitragem seja bem-sucedida:
Na equação final para P acima, o denominador é obviamente sempre positivo.
Assim, o lucro será positivo se e somente se o numerador for maior que zero. Vamos expressar isso em uma inequação:
# Inequação 1
Observe que o denominador da última inequação também deve ser positivo:
Lembrando que F' representa 1-(1-f)² e, dada a taxa habitual da Uniswap V2 de 0,03, obtemos isto:
Portanto, se a liquidez for aumentada em pelo menos 0,6%, a arbitragem sanduíche de LP clássica é possível e o valor mínimo que o atacante deve usar para obter um lucro, dada a quantidade atual de liquidez na pool e o valor do LP que está prestes a ser depositado, é definido pela fórmula abaixo:
Observação — a discussão acima não considera os custos de gás. Deixamos isso para um leitor curioso.
Apêndice B - Metodologia
Detectamos um ataque sanduíche de LP reverso como um conjunto de 3 transações, estritamente uma seguida da outra e com endereçamento à mesma pool AMM, como se segue:
- Troca;
- Provisão de Liquidez (depósito ou retirada);
- Outra troca.
As transações 1 e 3 devem ser do mesmo endereço (o atacante), enquanto a transação 2 deve ser de um endereço diferente (a vítima).
Para cada ataque, determinamos múltiplos pontos de dados, incluindo os seguintes:
- Receita do atacante e volume de negociação.
- Valor de liquidez fornecido pela vítima LP.
- Se a vítima realizou ou não trocas antes ou depois da operação de LP.
- Contratos usados pela vítima e pelo atacante.
Estamos usando o banco de dados VirtuSwap Research derivado das tabelas blockchain_etl da Ethereum.
O VirtuSwap usa engenharia financeira revolucionária, pesquisa de ponta e governança baseada em inteligência artificial para permitir negociações eficientes e econômicas, ao mesmo tempo em que multiplica os rendimentos para provedores de liquidez.
Um comércio. Uma taxa. Um impacto de preço.
Não esqueça de curtir e compartilhar.
Siga-nos em: Twitter | Discord | LinkedIn | Telegram | Medium | Site
Esse artigo foi escrito por Alexandre Zaidelson e traduzido por Isabela Curado Nehme. Seu original pode ser lido aqui.
Latest comments (0)