WEB3DEV

Cover image for Arbitragem de empréstimo instantâneo na PancakeSwap: bolo gostoso ou torta no céu? parte II
Dimitris Carvalho Calixto
Dimitris Carvalho Calixto

Posted on

Arbitragem de empréstimo instantâneo na PancakeSwap: bolo gostoso ou torta no céu? parte II

Image

As oportunidades de arbitragem baseadas em flash loan têm sido exploradas em boa parte dos últimos dois anos. Mas, a partir de 2013, essa ainda é uma proposta lucrativa ou é apenas uma ilusão? Mais especificamente, os pools de liquidez e os pares de negociação da PancakeSwap ainda oferecem oportunidades de arbitragem triangular de flash loan, como faziam no início dos flash loans?

Na parte anterior deste artigo "Ainda existem oportunidades de arbitragem triangular de flash loan na PancakeSwap? Parte I: Análise estática", mostrei como, dos mais de 1,2 milhão de pools da PancakeSwap disponíveis no início de 2023, praticamente apenas 10.221 ciclos de tamanho 3 podem ser derivados, o que tem o potencial de gerar arbitragem.

Lembre-se de que, para que surja uma oportunidade de arbitragem, deve ocorrer um evento de mercado que desloque suficientemente as relações de preço dos pares de moedas em um ciclo triangular, de modo que a negociação circular se torne lucrativa. Os eventos de mercado relevantes e acionáveis para nossos propósitos são causados por negociações nos pools da PancakeSwap. Felizmente para nós, o respectivo contrato inteligente de pool/par da PancakeSwap emite um evento de sincronização para cada negociação, e esses eventos de sincronização podem ser monitorados no blockchain do BSC (para obter detalhes, consulte, por exemplo, o Protocolo de pares Pancake)

Insights da análise de eventos de sincronização

Para obter uma visão inicial do tipo e do tamanho das oportunidades de arbitragem nos 10'221 ciclos triangulares, começamos analisando a frequência das negociações e os pools em que elas ocorrem. Isso é feito por meio dos eventos de sincronização que as negociações geram.

1'171'114

Tomando 23892902 como o número de bloco inicial na cadeia BSC, a presente análise abrangeu um total de 1'171'114 blocos. O primeiro bloco foi cunhado em 14 de dezembro de 2022 e o último bloco, com o número 25064016, em 24 de janeiro de 2023. Portanto, essa análise de evento abrange um período de pouco mais de um mês. Como lembrete, na cadeia BSC, um bloco é gerado aproximadamente a cada 3 segundos.

20'693'930

O número total de eventos de sincronização possivelmente relevantes (ou seja, negociações) durante esse período foi exatamente 20'693'930. Assim, pelo menos teoricamente falando, houve mais de 20 milhões de oportunidades de arbitragem no período de observação de 5 semanas. No entanto, esses não são todos os eventos de sincronização que ocorreram, mas apenas aqueles que poderiam ser potencialmente relevantes para a arbitragem. Essa é uma diferença sutil, mas importante, especialmente quando se trata de qualquer implementação prática e, portanto, vale a pena dedicar um pouco de tempo a ela.

Um bloco normalmente inclui várias transações, e qualquer número dessas transações provém de negociações na PancakeSwap. Além disso, em qualquer bloco, é possível e, na verdade, bastante comum, que duas ou mais negociações no mesmo pool da PancakeSwap sejam registradas. Isso resulta em vários eventos de sincronização dentro do mesmo bloco. Para identificar oportunidades de arbitragem, somente a última negociação e, portanto, o último evento Sync de um pool é relevante, pois somente esse último evento determina o estado em que podemos agir. Vejamos, por exemplo, o pool WBNB-BUSD (0x58F876857a02D6762E0101bb5C46A8c1ED44Dc16). As negociações nesse pool acontecem o tempo todo, e há uma boa chance de encontrar mais de uma dessas negociações em qualquer bloco. Mas somente a última negociação define o novo "preço" para o par de moedas que é útil como entrada para uma negociação de arbitragem. Esse é, na verdade, o mesmo "preço" que se obtém ao usar a respectiva função de contrato inteligente do pool (getReserves). Essas últimas negociações e seus eventos de sincronização são o que chamo de "relevantes" aqui. E, embora óbvio, ainda é bom deixar claro: como consequência da definição, todos os eventos de sincronização relevantes em um único bloco pertencem necessariamente a negociações em diferentes pools.

Então, depois desse pequeno desvio, voltamos à análise. O gráfico abaixo mostra o número de eventos relevantes por bloco ao longo do tempo.

Image

O gráfico revela que o número médio, 17, de eventos relevantes por bloco (e, portanto, pools/pares de moedas afetadas) é bastante estável durante o período de observação. O número máximo de eventos relevantes em um único bloco foi 362 no bloco número 24898410 em 18 de janeiro de 2023.

Sem surpresa, os cinco principais pools com o maior número de eventos de sincronização no total de 1.171.114 blocos foram os seguintes (o número ao lado do pool mostra o número de eventos de sincronização relevantes identificados)

  1. USDT-WBNB 937'596
  2. WBNB-BUSD 724'588
  3. USDT-BUSD 224'411
  4. Cake-WBNB 161'804
  5. USDC-WBNB 102'165

Observe que, como esses pools/pares de moedas também são os que ocorrem com mais frequência nos ciclos triangulares viáveis (consulte a Parte I para obter mais detalhes), cada evento desse tipo, se for grande o suficiente, poderá resultar em uma oportunidade de arbitragem entre a maioria dos mais de 10.000 ciclos.

85'906

Como deve ser lembrado (Parte I), os mais de 10'000 ciclos triangulares foram criados a partir de 16'458 pools, de um total de mais de 1,2 milhão disponíveis na PancakeSwap. Compare isso agora com os 85.906 pools, que é o número total de pools para os quais ocorreu pelo menos um evento de sincronização relevante durante o período de observação. Isso significa, em particular, que ocorreram negociações em mais de 70.000 pools que não fazem parte de nenhum ciclo triangular e, portanto, são irrelevantes do ponto de vista da arbitragem. Isso também significa que mais de 1,1 milhão dos cerca de 1,2 milhão de pools da PancakeSwap existentes em janeiro de 2023 não tiveram uma única negociação nas 5 semanas observadas e, portanto, podem ser considerados inativos com segurança.

10'002

Mapeando os pools dos eventos de sincronização observados para os ciclos triangulares, vemos que 10.002 ciclos do total viável de 10.221 foram afetados e, portanto, poderiam conter oportunidades de arbitragem. Por sua vez, isso também significa que apenas 219 ciclos triangulares podem ser excluídos de uma análise mais aprofundada, pois não ocorreram negociações em nenhum de seus pools.

Sobre lucros de arbitragem

Para ir mais longe, precisamos começar a analisar as receitas hipotéticas da negociação nos vários ciclos triangulares. As receitas são hipotéticas porque, por enquanto, estamos apenas reproduzindo eventos passados, sem tomar nenhuma medida.

A seguir, presumo que o leitor tenha uma compreensão geral dos MVAs do tipo UniswapV2 e, em particular, de como as reservas de pool são usadas para calcular os preços relevantes e as possíveis receitas de negociação em ciclos de arbitragem triangulares. Como será lembrado, qualquer negociação em um pool envolve alguma derrapagem, ou seja, um movimento adverso de preço, que depende do tamanho da negociação e das reservas do pool. Essa derrapagem limita o quanto podemos colocar em uma operação de arbitragem triangular e ainda assim sermos lucrativos. O diagrama abaixo mostra esquematicamente como a receita em uma arbitragem triangular muda com o valor negociado. O intervalo no qual a receita é positiva é limitado e, em alguns casos ou relações de reserva, a receita pode ser negativa em todo o intervalo.

Image

Isso significa, em particular, que fixar um valor para negociar antecipadamente, como é feito em muitos dos tutoriais que introduzem flash loans e arbitragem triangular, não é uma opção no mundo real. Em vez disso, para cada ciclo triangular e para cada conjunto de reservas do pool, precisamos encontrar o valor ideal que maximize a receita da negociação do ciclo. Se esse valor máximo cobrir todos os custos, em especial as taxas de gas da transação (como veremos na próxima terceira parte, há muitos outros custos a serem considerados também), teremos uma oportunidade de arbitragem lucrativa e extrairemos o valor máximo possível.

Usando alguns cálculos e álgebra fáceis (embora confusos), a fórmula a seguir pode ser derivada, fornecendo o valor a ser negociado para obter a receita ideal de um ciclo triangular com flash loan. Qualquer valor a menos ou a mais levará a uma redução na receita.

Image

Nessa fórmula, os r's referem-se às reservas dos pools envolvidos, ou seja, r0, r1 são as reservas do pool um, r2, r3 são as reservas do pool dois e** r4*, **r5* são as reservas do pool três. f é a taxa cobrada pelos pools, que no caso da PancakeSwap é de 0,25%. A fórmula também pressupõe que um empréstimo instantâneo seja usado para obter a quantidade de moeda a ser negociada e que a mesma taxa se aplique também ao empréstimo. Esse é certamente o caso se o flash loan e o ciclo triangular usarem exclusivamente os pools da PancakeSwap, como nesta análise.

Aqui está um pequeno exemplo:

Consideremos o ciclo de arbitragem triangular WBNB > SonM > BUSD e de volta ao WBNB no bloco número 23892902. Isso envolve os três pools a seguir e suas respectivas reservas expressas na unidade básica do token:

WBNB-SonM

r0 = 3286737067090

r1 = 7854654854

SonM-BUSD

r2 = 18656996

r3 = 18039659217741649083

BUSD-WBNB

r4 = 84142804193278841528263584

r5 = 305313076263510807823690

Quanto ao flash-loan, qualquer pool líquido que inclua o WBNB e não faça parte do ciclo triangular pode ser escolhido, por exemplo, WBNB-USDT. Com a taxa de 0,25% do PancakeSwap, podemos calcular que o valor ideal que maximiza a receita é

451032257445159 wei ou 0,000451032 WBNB

Usando esse valor como a quantia a ser negociada, a receita da arbitragem chega a 0,0651361 WBNB após o pagamento do flash loan, mas sem nenhum custo de gas.

Agora vamos à parte divertida: começando no primeiro bloco do período de observação, ou seja, o bloco número 23892902, primeiro coletamos as reservas de todos os mais de 16 mil pools e, em seguida, para cada bloco, usamos os eventos de sincronização relevantes para atualizar as reservas dos pools correspondentes e verificar se algum dos ciclos triangulares afetados apresenta uma oportunidade de arbitragem usando o valor de negociação ideal, conforme determinado acima. Para ficar mais próximo da realidade, um custo de gás de 0,0025 WBNB é deduzido de qualquer receita obtida. Como será explicado na próxima Parte III, o valor de 0,0025 WBNB é uma representação justa do custo de transação envolvido usando um contrato inteligente otimizado, embora com algumas ressalvas.

Devido a restrições práticas, a análise da receita de arbitragem inclui apenas blocos até o número 24170796, ou seja, um total de 277.894 blocos, abrangendo 10 dias entre 14 e 24 de dezembro. Apesar dessa limitação, as percepções são representativas de outros períodos de observação.

1'589'709

Durante esse período, ocorreram 4'838'044 eventos de sincronização, para os quais foi identificado um total de 1'589'709 oportunidades de arbitragem. Ao somar todas as receitas de arbitragem ideais após a cobertura dos custos de gás, o lucro extra é de mais de 10.000 WBNB. E isso em apenas 10 dias. Parece muito promissor, certo? .... Mas não tão rápido!

A primeira questão é que somos apenas observadores passivos no mercado, reproduzindo eventos passados e considerando as hipóteses. Em particular, ainda não executamos nenhuma negociação. E assim como qualquer observação de fenômenos quânticos altera o que é observado de acordo com o princípio da incerteza da física, uma negociação também altera o mercado no qual é negociada. Em outras palavras, é bem possível que, se tivéssemos aproveitado algumas das 1,5 milhão de oportunidades, isso teria removido outras oportunidades que ainda estão nos registros.

25

Uma maneira de se aproximar da realidade é ver quantos dos mais de 10.000 ciclos de arbitragem foram acionados como tendo algum lucro e com que frequência. Pense nisso por um momento: quanto mais distribuídas estiverem as oportunidades de arbitragem entre os ciclos (ou seja, quanto mais ciclos estiverem envolvidos) e quanto menor for o número de oportunidades de arbitragem por ciclo, maior será a probabilidade de que essas oportunidades de arbitragem representem oportunidades reais que poderiam ter sido aproveitadas por outros árbitros.

A tabela abaixo mostra o que está acontecendo:

Image

Isso é surpreendente, eu diria.

Em primeiro lugar, dos mais de 10'000 ciclos possíveis, apenas 25 apresentaram alguma oportunidade de realização de lucro. Portanto, apesar do fato de que dos 10'022 ciclos totais, até 10'002 ciclos foram afetados pelos mais de 1,5 milhão de eventos, apenas 25 ciclos apresentaram oportunidades de arbitragem dentro da janela de 10 dias. Isso, devo dizer, e acho que vocês concordarão, é bastante decepcionante!

Em segundo lugar, em alguns desses ciclos, por exemplo, WBNB > USDT > IDAC, parece haver um número bastante grande de oportunidades, ou seja, 225'792. Isso é significativo, pois o número total de blocos na análise foi de apenas 277'894. Isso implicaria que esse é um poço de dinheiro inexplorado (altamente improvável), ou que ninguém identificou a arbitragem (improvável) ou que há algo mais acontecendo aqui (muito provável). Para revelar fatos escondidos: há algo mais acontecendo, mas o que poderia ser, terá que esperar até a Parte III.

Em terceiro lugar, o lucro médio por arbitragem potencial está, novamente de forma surpreendente, apenas na faixa de 1/100 de um WBNB. E, embora não seja aparente na tabela, os lucros de arbitragem individuais também não variam muito. Embora se saiba que os lucros de arbitragem tendem a diminuir com a maturidade do mercado, essa percepção é outra surpresa... e outra decepção.

2

Se houver alguma esperança neste momento, talvez alguns desses 25 ciclos triangulares tenham realmente representado algumas oportunidades de arbitragem em várias ocasiões. Sem fazer uma exploração "em campo" ou, em outras palavras, executar negociações reais e ao vivo, podemos pelo menos verificar se outros árbitros, que são muitos, conseguiram entrar no jogo e realizar a arbitragem. Como as arbitragens triangulares baseadas em flash-loan aproveitam a atomicidade das transações de contratos inteligentes, primeiro queremos encontrar todos os blocos que incluem eventos correspondentes a todos os pools pertencentes a pelo menos um dos 25 ciclos. Ao fazer isso, chegamos a outro insight surpreendente: somente eventos completos para dois (2!) ciclos podem ser encontrados em qualquer um dos blocos observados, e esses são:

  • WBNB > SGPro > BUSD no bloco 24847713, 24847747
  • WBNB > RMES > ShinjaV3 no bloco 24786919

E para fechar com chave de ouro, uma análise mais profunda dos registros de transações revela que não havia arbitragem triangular em jogo e que foi apenas coincidência o fato de os eventos relevantes do pool Sync aparecerem todos juntos em um único bloco.

0 (?)

Com o que tudo isso nos deixa? A conclusão deve ser que, apesar de todos os cenários possíveis sob os quais as oportunidades de arbitragem poderiam ocorrer, pelo menos para a arbitragem triangular baseada em flash loan na PancakeSwap, o mercado já é eficiente demais e não há oportunidades de arbitragem disponíveis em circunstâncias normais. Seria necessário um grande deslocamento do mercado para que ocorressem oportunidades de arbitragem lucrativas desse tipo. Então, é isso. Criar bots de arbitragem triangular de flash loan para a PancakeSwap pode ser um experimento de laboratório interessante, mas se você planeja ganhar a vida com isso, procure outro lugar!

Mas será que é isso mesmo? Esse é o fim dos árbitros na PancakeSwap? Bem, talvez não. Talvez existam outras oportunidades que possam ser exploradas na PancakeSwap, se formos além dos ciclos triangulares baseados em empréstimos rápidos. Essa e outras questões terão de esperar para serem exploradas na Parte III.

Se você achou essas informações úteis ou tem alguma dúvida ou feedback, deixe um comentário na seção de comentários.

As doações são muito bem-vindas para : 0xE17083697160dAA6c9a80Ae558cdE2D323F783Dc

Artigo escrito por PVK . A versão original pode ser encontrada aqui. Traduzido e adaptado por Dimitris Calixto.

Top comments (0)