Como criar bot/robô sniper para PancakeSwap V3 em Node.js (Sniperbot)

Cripto

Como criar bot/robô sniper para PancakeSwap V3 em Node.js (Sniperbot)

Luiz Duarte
Escrito por Luiz Duarte em 13/06/2024
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 sniper de criptomoedas que fará swaps o mais rápido possível, assim que um novo pool de liquidez seja listado na dex PancakeSwap (V3). A escolha por essa DEX não é por acaso: ela é a dex como maior volume na rede BNB Chain (também chamada de BSC ou “blockchain da Binance”) e uma das maiores do mundo. Além disso, como ela nasceu a partir de um fork da Uniswap, você consegue aproveitar boa parte dos aprendizados desse bot para outras dex (sniperbot para Uniswap aqui  e SushiSwap aqui).

É 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 PancakeSwap 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 PancakeSwap antes, pois são coisas que não ensinarei aqui.

Dito isso, vamos ao tutorial.

#1 – O que é e como funciona um bot sniper?

Sniping é o ato de ficar mirando em um alvo, para acertá-lo no momento e local certos e sniper é o profissional especializado nesse tipo de tática. Inclusive aproveito para recomendar o filme Sniper Americano, com Bradley Cooper, que conta a história real de um famoso sniper. Mas e no mundo dos bots?

Antes de explicar sobre o bot sniper em si, é importante entender a oportunidade que torna-os interessantes. Quando uma nova criptomoeda surge em uma corretora, seja uma criptomoeda 100% original ou apenas uma nova oferta dela (não estava na exchange antes) é comum que ocorra uma corrida para aproveitar o seu preço antes de sua possível valorização. Acontece que essa corrida de compradores justamente é o que faz o valor da cripto inflacionar rapidamente graças à alta demanda logo no seu lançamento. Assim, não é incomum em bons projetos que o preço suba dezenas ou até mesmo milhares de % em poucas horas assim que o ativo é listado, o que permite que se você vender no topo, tenha um lucro expressivo mesmo com investimentos pequenos.

No entanto, considerando que a janela de oportunidade é curta, como conseguir comprar o mais cedo possível no lançamento e vender antes do preço cair novamente?

Aí que entram os sniping bots ou bots sniper.

No mundo dos bots cripto chamamos de sniper os robôs que ficam monitorando um ativo que ainda não foi lançado, para comprá-lo assim que ele for listado, seja em um exchange centralizada ou descentralizada. Em exchanges centralizadas, como a Binance, podemos usar dos anúncios que a exchange promove para nos prepararmos, alertando o mercado de que um novo token será listado e então comprarmos ele rapidamente (sniperbot para Binance aqui).

Já em exchanges descentralizadas (dex), como PancakeSwap, não temos anúncios comerciais porque qualquer investidor pode, a qualquer momento, criar um liquidity pool de um novo par de tokens e colocá-lo à disposição para swap na dex. Assim, a todo momento surgem “novas” criptomoedas nas dex o que parece impossibilitar o trabalho para um bot sniper, certo? Errado.

Acontece que toda vez que um novo pool de liquidez é criado em uma dex, ele é feito diretamente na blockchain e dispara um evento. Esses eventos podem ser monitorados e portanto identificados por um robô que então pode iniciar um swap tão logo receba o “sinal”. Depois para vender, é mais simples ainda, ficando a critério do desenvolvedor a lógica da decisão de venda baseado em %, tempo, etc conforme preferir.

O que vamos fazer neste tutorial é justamente isso: um bot que vai ficar monitorando eventos da dex PancakeSwap na blockchain, e assim que um evento de pool de liquidez novo for identificado, ele vai comprar uma quantidade de tokens assim que possível.

#2 – 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 PancakeSwap 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 BNB vai servir. Caso ainda não tenha uma MetaMask, no vídeo abaixo eu ensino a criar uma (é grátis). Usarei aqui a rede BNB Testnet, com saldos de teste obtidos neste faucet, mas você pode usar qualquer rede suportada pela PancakeSwap.

Agora com saldo na carteira e ela apontada para a BNB Testnet, pode testar as suas configurações na PancakeSwap apontada para Testnet também. Experimente se autenticar no app da PancakeSwap com sua carteira apontada para Testnet (clique no link), escolher a rede testnet na lista de redes e fazer alguns swaps a fim de ter algumas moedas na carteira de testes, recomendo WBNB (wrapped token do BNB), pois costuma ser escolhida como par de novas moedas que é justamente o que estamos buscando aqui. No entanto, entenda que se um novo par, exemplo LTOOLS-XYZ for listado e você não tiver tokens XYZ na carteira, seu bot não conseguirá fazer swap, ok? É impossível prever e aproveitar 100% das oportunidades de listagens.

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

Curso Web3 para Iniciantes

#3 – Criando o Projeto

Agora vamos criar nosso projeto Node.js, começando pela criação de uma pasta pancakeswap-sniper 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;

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

  • NODE_RPC_URL: a sua URL de RPC do nó. Testnet: https://data-seed-prebsc-1-s1.binance.org:8545/
  • NODE_WS_URL: a sua URL de WebSockets do nó. Testnet: wss://bsc-testnet-rpc.publicnode.com
  • TOKEN_ADDRESS: o endereço do contrato do token que vai usar para pagar/receber. Se estiver na BNB Testnet, use 0xae13d989daC2f0dEbFf460aC112a837C89BAa7cd para o token WBNB, 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);
  • ROUTER_ADDRESS: o endereço do contrato de swap routing da PancakeSwap na rede em questão. No caso da BNB Testnet, é 0x1b81D678ffb9C0263b24A97847620C99d213eB14;
  • FACTORY_ADDRESS: o endereço do contrato de pool factory da PancakeSwap na rede em questão. No caso da BNB Testnet, é 0x0BFbCF9fa4f9C56B0F40a671Ad40E0805A091865;
  • AMOUNT_TO_BUY: a quantidade de TOKEN que será usada em cada compra, na escala ‘ether’, com até 18 casas decimais. Ex: 0.1;

Um 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 de pools criados que usem WBNB, tudo na rede BNB Chain (Testnet). Já os endereços dos contratos você obtém aqui.

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.

#4 – Monitorando os Eventos

A primeira coisa que vamos programar em nosso bot é o monitoramento dos eventos de criação de pools na PancakeSwap. Eu discuti bastante o monitoramento ou escuta de eventos, nos mínimos detalhes, neste tutorial, então aqui vamos ser mais diretos.

Primeiro, vamos precisar de 3 ABIs, sendo que o primeiro é para comunicação com a Pool Factory da PancakeSwap e os outros dois usaremos mais à frente, quando estivermos nos preocupando com swaps.

Abaixo o ABI da PancakeSwap V3 Factory, que você deve salvar na raiz do seu projeto em um arquivo abi.factory.json.

Abaixo o ABI da PancakeSwap V3 Router,, que você deve salvar na raiz do seu projeto em um arquivo abi.router.json.

E abaixo o ABI de ERC20 Token, largamente discutido aqui, que você deve salvar na raiz do seu projeto em um arquivo abi.erc20.json.

Agora vamos carregar esses três ABIs logo abaixo das demais variáveis e constantes que definimos no index.js:

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

O que esse código faz é:

  1. configura um provedor de websocket apontado para o nó RPC (para receber dados em tempo real);
  2. configura um objeto de comunicação com o contrato Factory da PancakeSwap V3 (responsável pela criação dos pools);
  3. definimos um listener que vai ficar escutando via websocket os eventos do tipo PoolCreated, que são disparados sempre que um novo pool é criado;
  4. imprime no console as informações do novo pool

Adicionei ao final um PING a cada 1 minuto, para garantir que a conexão com o nó RPC se mantenha ativa, caso contrário ela pode ser derrubada por ociosidade se ficar vários minutos sem uso.

Com isso rodando, você já tem um bot monitorando o surgimento de novos pools de liquidez (aka novos tokens na dex). Deixe ele rodando e vai perceber como funciona ou então vá no contrato de factory e crie um pool manualmente para ver funcionando mais rapidamente (o pool não terá liquidez, mas irá disparar nosso monitoramento). Caso queira adicionar um pool já com liquidez, terá de criar um token ERC20 novo e adicionar pela interface web da PancakeSwap na Testnet.

A próxima etapa é justamente fazer a compra, mas este é um assunto para a parte dois deste tutorial, que você pode acessar aqui.

TAGS:

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 *