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).
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.
Fail with error ‘LOK’
Esse erro ocorre em swaps e segundo a documentação oficial ele é um erro gerado pelo Reentrancy Guard, um mecanismo de segurança implementado no contrato para evitar Reentrancy Attacks. Se você não estiver tentando fazer dois swaps na mesma transação, pode ser apenas um erro gerado por alguma inconsistência de parâmetros do seu swap. Por exemplo, certa vez eu estava tentando testando o contrato de factory e criei um novo pool, mas sem adicionar liquidez nele e ao tentar fazer swap nesse pool tive esse erro.
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.
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 }
)
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.
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)
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).
opa irei ver jazin muito obrigado
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)
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.
Boa noite sou o Valdomiro eu comprei um token chamado BOME AI (BOME 2.0) é aparece IDENTIFICAÇÃO RISK no momento que eu adiciono o token na plataforma para fazer o Swap em seguida eles pedem para eu assinar um formulario na plataforma PancakSwap
Desculpe, mas sua dúvida não se refere ao meu artigo, que é de integração/programação com a PancakeSwap, não tenho como prestar suporte de uso desta corretora pois não sou funcionário da mesma. Além disso, muito cuidado com estas compras de tokens aleatórios da Internet, a maioria são apenas golpes/scams, prefira moedas mais consolidadas e com grande marketcap.
Boa noite Luis……não sei se esse assunto vc poderia me ajudar
Quando fazemos uma opraçao n Pancake e aparece a seguinte mensagem ja traduzida ” A APROVAÇÃO DA TRANSAÇÃO FOI CONCLUIDA , MAS A APROVAÇÃO AINDA NÃO FOI REDEFINIDA PARA 0 . TENTE NOVAMENTE… tentei umas 15 vezes +- a taxa é cobrada e o token ñ é vendido…
Desde já agradeço a atenção
Forte abraço
Realmente não tenho como ajudar pois sua dúvida é de uso da PancakeSwap, esse meu artigo é sobre erros de integração, de programação entende? São coisas bem distintas. Infelizmente não tenho tutoriais de uso da mesma, do ponto de vista de usuário.