Erros comuns ao se integrar com a PancakeSwap

Cripto

Erros comuns ao se integrar com a PancakeSwap

Luiz Duarte
Escrito por Luiz Duarte em 27/02/2024
Junte-se a mais de 34 mil devs

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

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 implantação de Pancake mais famosa), geralmente usando Node.js com bibliotecas como Ethers ou Web3.js. 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.

Caso nunca tenha feito uma integração com PancakeSwap antes, este tutorial é o que estava buscando (inclui vídeo).

Curso Beholder
Curso Beholder

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_ASSET_LIQUIDITY ou We are not able to fulfill an order for this token pair at the requested amount due to a lack of liquidity

O mesmo que o erro anterior.

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.

TypeError: invalid value for Contract target (argument=”target”, value=null, code=INVALID_ARGUMENT)

Esse erro é quando você não passou o endereço do contrato (target) que deseja se conectar. Geralmente são os contratos dos pools de liquidez que estão ausentes por má configuração de variáveis de ambiente ou não definição no código mesmo.

Contract runner does not support sending transactions.

Esse erro indica que o seu objeto contract, usado para enviar comandos ao smart contract da dex não está devidamente conectado com uma carteira inicializada com chave privada. Sendo assim, ele não tem como fazer a transação pois não tem quem pague as taxas. A solução é revisar e corrigir a inicialização do seu objeto de conexão com o contrato.

no Route matched with those values

Esse erro quer dizer que o contrato de roteamento de swaps não conseguiu encontrar um caminho entre os liquidity pools existentes para fazer com que o swap desejado aconteça. Se você tem certeza que existe o liquidity pool com o par de moedas desejado, talvez você tenha apenas errado o endereço de algum dos tokens envolvidos.

UNPREDICTABLE_GAS_LIMIT ou Cannot estimate gas; transaction may fail or may require manual gas limit

Esse erro indica que você não passou as configurações de preço do gás (gasPrice) e gás limite (gasLimit) a serem usadas no envio de uma transação de swap. Recomendo 10000000000 wei (10 gwei) para o primeiro e 250000 para o segundo.

Se o seu erro não está aqui, deixe nos comentários abaixo desse post.

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 *

7 Replies to “Erros comuns ao se integrar com a PancakeSwap”

fernando

ola o meu esta com esse erro de Contract runner does not support sending transactions.
esse e o meu codigo da parte do swapExactTokensForTokens

const tx = await contract.swapExactTokensForTokens(
value, //amountIn
0, //amountOutMin
[TokenFrom, tokenTo], // contratos da negociação
CFG_WALLET, // wallet que vai receber
deadline,
{ value: amountIn, gasLimit: 210000 }

)

Luiz Duarte

Conforme citado no artigo, esse erro indica que seu bot está se comunicando com o contrato sem estar devidamente autenticado com uma carteira com permissão de escrita/transações. Revise e corrija o objeto de conexão com o contrato, mais especificamente a parte que configura a carteira nele.

fernando

mas ja esta configurado com a chave privada td certinho mas o erro continua
contract runner does not support sending transactions (operation=”sendTransaction”, code=UNSUPPORTED_OPERATION, version=6.11.1)

Luiz Duarte

Acabei de revisar completamente esse tutorial e inclusive atualizei os fontes no GitHub, testei agora e está tudo funcionando 100%. Dá uma revisada geral desde a parte 1 pois além dos pontos que ajustei relativos a mudanças de 2024, podem ter erros seus de programação. Esse seu erro acontece por exemplo quando esquece de usar promises em algumas funções ou quando usa async e não precisa (gerando promises).

fernando

opa irei ver jazin muito obrigado

AIBANK

https://bscscan.com/tx/0x1a9bf46f57702dcb344c3a853fa002a71dd615c27d1d7c59371ec6c8c5d18440

Swap result: ContractTransactionResponse {
provider: JsonRpcProvider {},
blockNumber: null,
blockHash: null,
index: undefined,
hash: ‘0x1a9bf46f57702dcb344c3a853fa002a71dd615c27d1d7c59371ec6c8c5d18440’,
type: 0,
to: ‘0x10ED43C718714eb63d5aA57B78B54704E256024E’,
from: ‘0x430980dfF0e32D5Cce573c5Ea2f5941C29f8CacF’,
nonce: 165,
gasLimit: 300000n,
gasPrice: 2000000000n,
maxPriorityFeePerGas: null,
maxFeePerGas: null,
maxFeePerBlobGas: null,
data: ‘0x18cbafe50000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000430980dff0e32d5cce573c5ea2f5941c29f8cacf0000000000000000000000000000000000000000000000000000018ed5423cdd0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000b813c7f070918b0cf237f6b2f1820a7c64cce044000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c’,
value: 0n,
chainId: 56n,
signature: Signature { r: “0x45478a73a703e6a61534abf2be2a57b82b7553e5bf893ca6f2414914dd5f5fac”, s: “0x5a4f3136229164cf6e998bd251dc5277449f165e91023ad9c4293bdd96935b1d”, yParity: 0, networkV: 147 },
accessList: null,
blobVersionedHashes: null
}

There is no transaction sir, could you help me ( there is a tax in ca)

Luiz Duarte

A transação está aí, você mesmo passou o link com o recibo da mesma. Lá diz que teve um Pancake Error, com código K. Esse eu não conheço, vai ter de dar uma olhada na documentação deles para entender do que se trata.