WEB3DEV

Cover image for Modelos MEV escritos em Python, Javascript e Rust
Dimitris Carvalho Calixto
Dimitris Carvalho Calixto

Posted on

Modelos MEV escritos em Python, Javascript e Rust

Todos os componentes essenciais de um bot MEV reunidos em um só. Escolha um e vamos para a lua

Image

Que bom. Vejo que você está aqui.

Hoje, vou prepará-los para a jornada MEV que está por vir. Será uma viagem longa e acidentada, que às vezes exige um mergulho completo e que pode não ser tão proveitosa para todos.

Mas que também é: uma viagem que o inspirará a querer ir mais longe e que o manterá acordado à noite, sonhando com as possibilidades.

No entanto, há apenas um obstáculo: não é tão fácil quanto parece. A lista de coisas que temos que estudar foi apresentada na semana passada (os leitores que não a viram podem acessá-la rapidamente e rolar a tela para baixo para ver o que está acontecendo):

https://medium.com/@solidquant/the-mev-roadmap-everyones-been-waiting-for-429b5963cb0c?source=post_page-----ddd3d324d709--------------------------------

E, como você pode ver, a lista é interminável. Abordá-los um a um tomará meses de seu tempo.

Por isso, criei um kit inicial para todos. É um modelo com o qual todos podem trabalhar com confiança.

Preparei versões distintas usando as três linguagens mais predominantes no comércio de blockchain: Python, Javascript e Rust.

Ao final deste post, você já terá um bot básico de arbitragem triangular DEX no Polygon, utilizando todos os pools no Sushiswap V2 para negociação - totalizando cerca de 7.000 pools.

Vamos dar uma olhada no que esses modelos podem fazer para ajudá-lo, começando com a versão Python.

Antes de começarmos, porém, certifique-se de clonar o projeto do Github:

https://github.com/solidquant/mev-templates?source=post_page-----ddd3d324d709--------------------------------

**📍 **Clone do projeto

Clonar o projeto é tão simples quanto executá-lo:

▶️ git clone [https://github.com/solidquant/mev-templates.git](https://github.com/solidquant/mev-templates.git)

que criará um diretório chamado mev-templates na pasta em que você está agora.

📍 Crie um arquivo .env

No diretório mev-templates, haverá um arquivo chamado .env.example:


HTTPS_URL=http://192.168.200.182:8545

WSS_URL=ws://192.168.200.182:8546

CHAIN_ID=137

BLOCKNATIVE_TOKEN=

PRIVATE_KEY=0xb3e5dc08b18918cce982438a28877e440aafc01fef4c314b95d0609bf946585f

SIGNING_KEY=0x34f55bef77aca52be9f7506da40205f8ecd7e863fd3b465a5db9950247422caf

BOT_ADDRESS=0xEc1f2DADF368D5a20D494a2974bC19e421812017

Enter fullscreen mode Exit fullscreen mode

Usaremos essas variáveis de ambiente para executar nosso código de modelo, portanto, copie e cole isso em um arquivo .env recém-criado e altere os valores das variáveis de acordo.

Agora, estamos prontos para mergulhar de cabeça 🏝

As pessoas interessadas em outras linguagens podem simplesmente pular para as outras versões abaixo.

Versão em Python

Image

A versão Python do nosso projeto pode ser facilmente executada.

https://github.com/solidquant/mev-templates/tree/main/python?source=post_page-----ddd3d324d709--------------------------------

Precisamos instalar as dependências primeiro, portanto, criaremos um novo ambiente virtual para trabalhar.

Se você tiver criado um novo ambiente virtual, acesse o diretório python no diretório mev-templates e instale todas as dependências:


▶️ cd mev-templates/python

▶️ pip install -r requirements.txt

Enter fullscreen mode Exit fullscreen mode

🛑 Pode ocorrer um erro durante a instalação. Muitas vezes, isso é um conflito entre as bibliotecas web3 e websockets. Nesse caso, remova o campo websockets do seu arquivo de requisitos e instale manualmente o websockets mais tarde, forçando o processo. Isso resolveu problemas semelhantes para o me.ctory e instalou todas as dependências:

Se você tiver:

  • instalado todas as dependências,
  • criado seu arquivo .env (não se esqueça disso)

podemos tentar executar nosso código Python e ver se ele funciona corretamente, faça isso:

▶️ python main.py

Ou simplesmente clique com o botão direito do mouse no IDE onde você abriu o arquivo main.py e execute o programa python. Você obterá um resultado como:

Image

Veremos o que isso pode fazer na seção "Em que ponto do roteiro estamos?".

Antes de prosseguirmos, porém, para ajudar nossos desenvolvedores de Javascript a se prepararem, vamos analisar um pouco o projeto Javascript.

Versão em javascript

O Javascript funciona exatamente como a versão Python.

https://github.com/solidquant/mev-templates/tree/main/javascript?source=post_page-----ddd3d324d709--------------------------------

Portanto, precisamos instalar suas dependências primeiro. Fazemos isso acessando o diretório javascript e executando o npm install como abaixo:


▶️ cd mev-templates/javascript

▶️ npm install

Enter fullscreen mode Exit fullscreen mode

🛑 Inicialmente, usei a versão [email protected], mas ontem percebi que a biblioteca flashbots foi implementada usando a versão 5. Então, rapidamente fiz o downgrade da minha versão do ethers e corrigi meu código para funcionar com a versão 5.7.2, que é o padrão do setor no momento. No entanto, migrarei lentamente esse código para a versão 6.

Se tivermos nossas 1º. dependências e 2º. o arquivo .env configurado corretamente, podemos agora executar:

▶️ node index.js

A saída será a seguinte:

Image

Que é quase idêntico ao funcionamento da versão em Python, mas para o formato de registro.

Por fim, deixaremos nossos colegas pesquisadores de MEV que usam Rust se atualizarem antes de analisarmos o que esses modelos podem fazer para ajudá-lo.

Versão em Rust

Image

A versão em Rust, assim como as duas anteriores, pode fazer todas as coisas que os outros modelos podem fazer.

https://github.com/solidquant/mev-templates/tree/main/rust?source=post_page-----ddd3d324d709--------------------------------

Entraremos no diretório rust e instalaremos as dependências antes de tentarmos executar nosso código Rust:


▶️ cd mev-templates/rust

▶️ cargo build

Enter fullscreen mode Exit fullscreen mode

Se a compilação for executada com êxito, estaremos prontos para executar nosso código Rust:

▶️ cargo run

Isso fará com que nosso bot comece a funcionar:

Image

Em que ponto do roteiro estamos?

Já vimos que nossos bots podem ser executados com alguns comandos. Agora, vamos explorar o que esses modelos podem fazer por você.

📚 Antes de prosseguir, quero enfatizar que este projeto foi concebido exclusivamente para fins educacionais. Tenho uma inclinação natural para fazer ajustes e gosto de enfrentar desafios. Assim, eu sabia que queria me desafiar tentando construir o sistema usando várias linguagens de programação e avaliando a variação de seu desempenho.

No entanto, tentei executá-lo usando uma conta real na rede Mainnet (especificamente Polygon), pois o desenvolvimento de um bot MEV gira em torno da criação de sistemas que operam em condições de mercado genuínas. Isso significa que ele funcionará em cenários da vida real, embora a obtenção de lucro seja uma questão à parte - uma tarefa que você deve explorar de forma independente 😄.

Na semana passada, vimos que há muito o que aprender nesse cenário.** Portanto, você deve estar se perguntando o quanto pode aprender apenas com esse modelo*. A boa notícia é: **bastante*.

✅ Primeiro, a parte da blockchain. Com esse modelo, você pode facilmente:

  • transmitir eventos em tempo real
  • decodificar dados brutos de transações
  • interagir facilmente com qualquer contrato inteligente

Tente observar os blocos onde eles estão enfatizados (tom mais escuro):

Image

✅ Segundo, a parte do dApp. O modelo é uma tentativa de mostrar uma estratégia de arbitragem Flashloan DEX, portanto, poderemos fazer isso:

  • usar DEXs variantes do Uniswap V2 para fazer trocas de n-hop
  • tomar um empréstimo rápido tanto do Uniswap V2 quanto do Balancer (o Balancer tem 0% de taxas)

Image

✅ Terceiro, parte do desenvolvimento do contrato inteligente. Esse modelo tem um contrato que pode receber flashloans de dois fornecedores (Uniswap V2, Balancer), gerar caminhos de n-hop e executá-los. Isso é feito usando o Solidity e o Yul.

Image

✅ Por fim, as partes restantes, como Flashbots/Estratégias:

  • você pode enviar transações para o mempool e para os Flashbots
  • você pode implementar a arbitragem DEX, executar estratégias sanduíche e também estender as funcionalidades para dar suporte à arbitragem CEX-DEX.

Image

Vou presumir por um momento que os blocos representados aqui são tudo o que você precisa saber no cenário do MEV. Isso nos colocará em cerca de:

Image

O progresso. Talvez isso não seja muito satisfatório para você, mas, como em todos os outros campos, criar seu primeiro produto é metade da batalha. Após concluí-lo, os próximos se tornarão mais fáceis, e você encontrará seu lugar no mercado em pouco tempo.

Benchmark de desempenho

Esta é a parte que estou disposto a fazer há pouco mais de um mês. Em uma de minhas postagens anteriores:

https://medium.com/@solidquant/what-i-learned-from-a-month-of-intensive-mev-bot-study-38a4e357da0b?source=post_page-----ddd3d324d709--------------------------------

Comparei o desempenho entre a utilização de um nó completo local e o uso de um serviço de nó como o Alchemy ou o Infura para interagir com blockchains. Os resultados foram bastante evidentes, como a maioria das pessoas poderia ter previsto. No entanto, ter benchmarks reais para visualizar as diferenças reais foi esclarecedor: a configuração de um nó local produz uma velocidade significativamente maior (≥ 10 vezes).

Portanto, quando nosso foco é otimizar a velocidade, as tarefas vinculadas à E/S (incluindo tarefas relacionadas à rede) devem sempre ter prioridade antes de se aprofundar em linguagens de programação ou otimizações de contratos inteligentes (que são igualmente importantes).

Para manter esta postagem curta, publicarei os resultados em um artigo separado.

👉 Um de meus leitores me perguntou se eu também poderia fazer um benchmark usando Golang em comparação com os outros. E eu ainda estou trabalhando na versão Golang, então pode demorar um pouco até que eu possa realmente mergulhar nela, mas vou reservar um tempo para comparar o desempenho do Golang também quando eu terminar!

A versão em Golang é igual ao Pikachu:

Image

O que esperar a seguir

No momento, estou envolvido em pesquisas ativas em vários domínios do cenário de MEV. E, para ser sincero, ainda não tenho vontade de me limitar a uma área específica, porque todas elas são igualmente cativantes para mim.

Entretanto, há certos campos que eu deveria abordar antes de avançar para assuntos mais intrigantes. Essas serão as próximas postagens:

  1. Usando o REVM para simular pacotes de sanduíche e arbitragem e construir whackamole-rs (Rust 🦀)
  2. Usando mev-templates para criar um bot de sanduíche (ainda não sei como chamá-lo, talvez quiznos-py 🌯, o que você acha?)
  3. Compartilhar os resultados da pesquisa de *arbitragem CEX-DEX *(https://github.com/solidquant/cex-dex-arb-research)

Ah, e explicarei os mev-templates em meus próximos posts. Juntos, estaremos construindo estratégias reais de MEV :)

🧗 Continuaremos escalando. Longe de nosso acampamento base, onde toda a verdadeira diversão acontece.

Image

⚡️ Então, junte-se à nossa comunidade do Discord para fazermos essa jornada juntos. Estamos revisando ativamente o código usado nestas postagens do blog para garantir o uso seguro por todos os nossos membros. Embora ainda esteja em sua infância, estamos crescendo lentamente e colaborando em pesquisas/projetos no espaço 💫 MEV 🏄‍♀️🏄‍♂️:

https://discord.com/invite/e6KpjTQP98?source=post_page-----ddd3d324d709--------------------------------

Além disso, se as pessoas quiserem entrar em contato comigo, podem me enviar um e-mail diretamente para: [email protected]

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

Latest comments (0)