Como criar bot/robô trader para Uniswap V3 em Node.js

Cripto

Como criar bot/robô trader para Uniswap V3 em Node.js

Luiz Duarte
Escrito por Luiz Duarte em 16/11/2023
Junte-se a mais de 34 mil devs

Entre para minha lista e receba conteúdos exclusivos e com prioridade

As exchanges decentralizadas ou DEX, como são popularmente chamadas, são uma alternativa às exchanges tradicionais, ou centralizadas, como Binance e Coinbase. Enquanto que nas exchanges centralizadas você compra e vende moedas com a corretora como mediadora das negociações e sem a custódia das suas próprias moedas (“not your keys, not your money”), nas DEX temos todas as negociações, chamadas de swaps (trocas), sendo feitas através de usuários que se conectam à rede com suas próprias carteiras de criptomoedas (como MetaMask) e a mediação acontecendo através de contratos inteligentes (smart contracts). Ou seja, não é um P2P “cru”, direto, ainda existe um intermediador, mas ele é um software aberto e transparente, publicado na blockchain.

Como Chanpeng Zhao afirma, o próprio fundador da Binance, as DEX são o futuro das corretoras de criptomoedas já que por rodarem nativamente na blockchain eles garantem a segurança, o anonimato e a descentralização a todas as partes envolvidas, diferente das exchanges tradicionais que sofrem cada vez mais ataques dos órgãos reguladores nos países em que operam. No entanto, operar em uma DEX é ligeiramente mais complicado do que operar em exchanges comuns, pela própria natureza das criptomoedas e blockchain em si. Da mesma forma, programar bots para este tipo de corretora é um desafio maior também.

Desta forma, neste tutorial eu espero lhe ajudar a entender como criar um primeiro bot trader de criptomoedas que fará swaps em seu nome em uma DEX, a Uniswap (V3). A escolha por essa DEX não é por acaso: além dela ser a maior DEX existente, com quase metade do volume mundial de transações em dex, ela opera principalmente em cima da Ethereum, a blockchain com suporte a smart contracts mais bem sucedida e detentora da segunda maior criptomoeda em valor de mercado, a Ether (ETH). Não obstante, a Uniswap detém mais de 70% do volume transacionado em dex na rede Ethereum, e esse suporte garante que ela segue muitos padrões de desenvolvimento para redes “EVM compatible” (compatíveis com Ethereum Virtual Machine). Assim, uma vez que consiga programar um bot para Uniswap, possivelmente conseguirá criar bots para outras redes “EVM compatible” no futuro, como PancakeSwap.

É importante você entender, antes de começarmos a programar, que operar no mercado cripto é muito arriscado por este ser um mercado muito volátil e auto-regulado. Não posso prometer ou me responsabilizar por qualquer lucro ou prejuízo que você possa ter ao colocar o seu dinheiro em uma Uniswap ou qualquer outra DEX, independente se usar os códigos que ensino ou não. Além disso, é imprescindível que você já possua conhecimentos básicos de programação para poder fazer este tutorial e também que já tenha feito swaps manualmente na Uniswap antes, pois são coisas que não ensinarei aqui.

Dito isso, vamos ao tutorial.

#1 – Ambiente

Usaremos neste tutorial a tecnologia Node.js, cujo setup deve ser feito antes do projeto começar de fato. Baixe e instale diretamente do site oficial e caso tenha dificuldade, pode usar o vídeo abaixo. O vídeo também ensina a instalar o Visual Studio Code, que é a ferramenta de desenvolvimento que uso.

Você vai precisar também de uma carteira de criptomoedas e se já é usuário da Uniswap certamente você já tem uma. Usarei aqui a MetaMask como exemplo pois é uma carteira bem popular e que consigo dar algum suporte. Via de regra, qualquer carteira compatível com rede Ethereum vai servir. Caso ainda não tenha uma MetaMask, no vídeo abaixo eu ensino a criar uma (é grátis), apenas ignore a parte que ensino a configurar a rede BSC, o que não será necessário aqui, já que usaremos a rede de teste da Ethereum. Usarei aqui a rede Ethereum Goerli (Testnet), mas você pode usar qualquer rede suportada pela Uniswap, com saldos de teste obtidos neste faucet.

Agora com saldo na carteira e ela apontada para a Goerli Testnet, pode testar as suas configurações na Uniswap apontada para Goerli também. Experimente se autenticar no app da Uniswap com sua carteira apontada para Testnet, escolher a rede testnet Goerli na lista de redes e fazer alguns swaps a fim de ter algumas moedas na carteira de testes, recomendo WETH (wrapped token do ETH) e UNI (token de governança da Uniswap), pois costumam ter liquidez, o que facilita nos testes.

O próximo passo é obter um full node RPC da rede Ethereum para podermos nos conectar. Você pode obter um gratuitamente com a Infura, um dos maiores provedores de Blockchain as a Service do mundo. Crie uma conta gratuita no site deles e depois crie um node da Goerli para você assim que conseguir entrar no painel. Guarde a API Key que vai receber, vamos precisar dela mais tarde.

E por fim, para o monitoramento do mercado vamos usar a API Token Price da Moralis. Para usar qualquer API da Moralis, o primeiro passo é acessar o site oficial e fazer o seu cadastro gratuitamente. Avance por todas etapas do cadastro e ao término do assistente de configuração você deverá ter um projeto criado e com este projeto, uma API Key que você pode acessar na área de Settings. Se quiser entender mais sobre monitoramento de dex usando Moralis, recomendo este tutorial.

E com isso nós estamos com tudo preparado para começar a programar.

Curso Node.js e MongoDB

#2 – Criando o Projeto

Agora vamos criar nosso projeto Node.js, começando pela criação de uma pasta uniswap e inicialização de um projeto Node.js nela.

Depois, vamos instalar as dependências que vamos precisar:

A saber:

  • DotEnv: dependência para carregamento das variáveis de ambiente;
  • Ethers: biblioteca para integração com a blockchain;
  • Moralis e MoralisWeb3/Common-EVM-Utils: SDK de integração com a Moralis;

Agora crie um arquivo .env na raiz do seu projeto e coloque nele as seguintes variáveis:

  • MORALIS_API_KEY: a sua API Key da Moralis;
  • INTERVAL: a recorrência do monitoramento, recomendo 300000, que é equivalente a 5 minutos;
  • TOKEN0_ADDRESS: o endereço do contrato do token que vai negociar via bot. Se estiver na Goerli, use 0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984 para o token UNI, por exemplo;
  • TOKEN1_ADDRESS: o endereço do contrato do token que vai usar para pagar/receber. Se estiver na Goerli, use 0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6 para o token WETH, por exemplo;
  • WALLET: endereço público da carteira que vai usar para o bot (você pega ela na MetaMask);
  • PRIVATE_KEY: chave privada da carteira que vai usar para o bot (você pega ela dentro da MetaMask, em Detalhes da Conta);
  • NETWORK: o nome da rede que vai operar, no meu caso, goerli;
  • INFURA_API_KEY: a sua API Key da Infura;
  • ROUTER_ADDRESS: o endereço do contrato de swap routing da Uniswap na rede em questão. No caso da Goerli, é 0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45;
  • PRICE_TO_BUY: o preço que servirá como gatilho para o bot comprar a moeda, em dólares. Ex: 5;
  • AMOUNT_TO_BUY: a quantidade de TOKEN1 que será usada em cada compra, na escala ‘ether’, com até 18 casas decimais. Ex: 0.1;
  • PROFITABILITY: o multiplicador percentual que será usado como gatilho de venda. Ou seja, define a sua lucratividade. Ex: 1.1 (=10%);

Muita atenção aqui à variável INTERVAL, pois cada chamada à API da Moralis consome créditos e o plano free deles tem limitação de uso. Outro ponto de atenção é com os endereços dos tokens ERC-20 que você vai monitorar, pois eles mudam de rede para rede. Usarei como exemplo aqui o monitoramento a cada 5 minutos do preço em dólar do token UNI e estarei comprando e vendendo ele usando WETH, tudo na rede Ethereum Goerli (Testnet).

Crie o arquivo index.js e coloque o código abaixo dentro dele, para carregar o .env e também para testar o carregamento.

Além de carregar o .env para memória, o código acima importa as bibliotecas que vamos usar e guarda as variáveis de ambiente em constantes locais, para facilitar seu uso mais tarde. Também adicionei algumas variáveis auxiliares ao final do código, que vamos precisar e recomendo que coloque algum console.log também, para ver mais facilmente se subiu o projeto com sucesso.

Ainda sobre o código acima, a maioria das constantes e variáveis ainda serão usadas ao longo do código, quando serão melhor explicadas.

Agora ajuste o seu package.json, na seção scripts, para iniciar o index.js, que será o arquivo principal da aplicação.

Assim, se quiser fazer um teste, use sempre o comando abaixo.

O resultado deve ser o código que colocou no index.js, se tiver algum console.log.

#3 – Monitorando o Mercado

A primeira coisa que vamos programar em nosso bot é o monitoramento do mercado. Eu discuti bastante isso, nos mínimos detalhes, neste tutorial, então aqui vamos ser mais diretos.

Ao final do index.js, adicione uma função start que será responsável pela inicialização do robô, com o código abaixo.

Aqui temos a inicialização do SDK da Moralis, com uso da API Key que você recebeu quando criou sua conta gratuita com eles, na etapa 1 do tutorial. Depois, a execução do primeiro ciclo, imediatamente, com a função executeCycle que vamos criar na sequência. E por fim, a definição do timer de repetição com setInterval e uso da variável INTERVAL definida anteriormente também.

Agora vamos criar a executeCycle, como abaixo.

Nesta função, teremos a obtenção do preço do ativo, com uma função getPrice que já vamos criar na sequência, e a impressão desse preço no terminal. Segue a getPrice:

Aqui nós usamos o SDK da Moralis para consultar a API de preço de token, informando o endereço do contrato TOKEN0 (no meu caso estou monitorando UNI), a rede (Goerli, se tiver problemas, use Ethereum) e a exchange Uniswap V3. O resultado traz várias informações, mas queremos apenas o preço em dólar.

Com isso rodando, você já tem um bot monitorando o preço de um ativo.

A próxima etapa é justamente tomar a decisão e fazer a compra ou a venda de tokens, mas este é um assunto para a parte dois deste tutorial, acesse aqui.

Está tendo erros? Consulte no meu guia de erros comuns de integração com Uniswap, neste link.

Olá, tudo bem?

O que você achou deste conteúdo? Conte nos comentários.

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

2 Replies to “Como criar bot/robô trader para Uniswap V3 em Node.js”

Paulo

Boa tarde, andei pesquisando sobre vc na net e vi que é um cara expert no assunto, pergunta: Você vende o bot pronto para operar na uniswap?

Luiz Duarte

Não vendo bots e nem desenvolvo personalizado, eu apenas ensino a programação deles mesmo, aqui no blog e no Youtube.