Tecnologia

8 ago, 2023

Erros comuns ao se integrar com a PancakeSwap

Publicidade

Durante o desenvolvimento e ensino de programação de bots para PancakeSwap eu fui tendo e ajudando a resolver diversos erros diferentes ligados à comunicação com os smart contracts na blockchain da Binance (BSC, onde está a Pancake). A ideia deste post é de servir como referência para tais erros e ajudar outros devs que estejam passando por algum deles.

Para erros HTTP comuns (400, 403, 500, etc), consulte este outro post genérico para status HTTP.

Use a busca do seu navegador (Ctrl+F) e procure por alguma palavra do seu erro para encontrar mais facilmente nesta página. Se estiver no grupo de alunos do meu curso no Telegram, use a pesquisa do grupo para encontrar respostas por lá também.

Fail with error ‘PancakeLibrary: INSUFFICIENT_LIQUIDITY’

Esse erro acontece quando você tenta fazer um swap entre um par de moedas que esteja sem liquidez suficiente na corretora no momento. É muito comum que não existam pools de liquidez para todas as combinações de pares principalmente de moedas menos conhecidas, mas ao mesmo tempo é muito comum que existam pools de liquidez para as moedas pareando com WBNB (Wrapped BNB), então a recomendação para solucionar esse problema é no seu roteamento do swap incluir uma etapa a mais de fazer swap para WBNB primeiro.

Exemplo, você quer fazer swap de XXX para YYY, mas está sem liquidez na corretora (rota [XXX, YYY]). Então inclua na sua rota XXX para WBNB e depois WBNB para YYYY, geralmente isso resolve (rota [XXX, WBNB, YYY]).

INSUFFICIENT_OUTPUT_AMOUNT

Esse erro acontece quando você tenta fazer swap mas a quantidade “out” (de saída) do swap exige uma quantidade “in” (de entrada) de tokens que você não dispõe no momento. a quantidade de tokens enviada é insuficiente para conseguir fazer o swap. Exemplo, você quer fazer swap de BTC para USDT e colocou que quer como saída 1000 USDT, mas a quantidade de BTC que colocou como entrada do swap é insuficiente para receber esta quantidade de USDT.

A solução é colocar uma quantidade maior de tokens “in” ou ajustar o “out” para zero (0), assim o swap irá acontecer e você receberá o máximo de tokens “out” que a exchange conseguir dada a quantidade de tokens “in” que forneceu para swap.

{“code”:-32000,”message”:”already known”}

Este erro acontece quando você envia um swap repetido para a corretora. Cada transação na blockchain possui uma assinatura criptográfica e se uma transação tiver com essa assinatura repetida fica fácil pra blockchain detectar essa duplicidade, rejeitando a mesma. A solução aqui costuma ser ajustar a sua lógica para não enviar transações repetidas ou apenas aguardar, pois se a transação original ainda não foi registrada em um bloco ela deve estar na mempool e será registrada em alguns instantes.

Fail with error ‘TransferHelper: TRANSFER_FROM_FAILED’

Esse erro acontece quando você está fazendo um swap e a corretora tenta transferir os fundos “in” da sua carteira para a do destinatário. Essa transferência é feita usando a função transferFrom da ERC-20 e para que ela funcione você deve ter aprovado o contrato da corretora com a função approve previamente ao swap. A correção costuma ser chamar a função approve uma linha antes do swap, informando a quantidade autorizada para a exchange transferir.

Em algumas raras ocasiões esse erro pode acontecer se você estiver fazendo swap usando BNB ao invés de WBNB. Como BNB não é um token ERC20 na rede BSC, ele é o token nativo, deve sempre usar WBNB que é a versão “wrapped” do BNB.

Error: network does not support ENS

Esse erro acontece quando você vai fazer a comunicação com o contrato da corretora e informou o endereço errado, em um formato inválido ou ausente. Aí a biblioteca de web3 acha que é um ENS (o serviço de nomes da Ethereum) e dá esse erro. A correção costuma ser simples e envolve revisar o o endereço de contrato que está sendo usado para comunicação.

Error: no matching fragment (operation=”fragment”, code=UNSUPPORTED_OPERATION)

Este erro é quando você está tentando chamar uma função de um smart contract da corretora mas a função que passou não existe ou os parâmetros passados estão incorretos. Isso pode ser  resolvido revisando a função e parâmetros que está usando, tanto no seu código quanto no ABI (Application Binary Interface) que está usando, pois isso pode representar ABI incorreto também.

*O conteúdo deste artigo é de responsabilidade do(a) autor(a) e não reflete necessariamente a opinião do iMasters.