Erros comuns ao se integrar com a Uniswap

Cripto

Erros comuns ao se integrar com a Uniswap

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

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

Atualizado em 27/02/24!

Durante o desenvolvimento e ensino de programação de bots para Uniswap eu fui tendo e ajudando a resolver diversos erros diferentes ligados à comunicação com os smart contracts na blockchain da Ethereum (ETH, onde está a Uniswap). 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.

Outra lista de erros muito útil é a oficial da Uniswap V3, caso você tenha o código de erro em mão, consulte aqui. Ela não dá a solução para o problema, mas muitas vezes apenas descreve o que significam as siglas, o que já ajuda um pouco.

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.

Curso Beholder
Curso Beholder

missing revert data, action=”estimateGas” ou UNPREDICTABLE_GAS_LIMIT ou Cannot estimate gas; transaction may fail or may require manual gas limit

Você ainda vai encontrar nos detalhes um CALL_EXCEPTION e um estimateGas, o que indica que esse erro é porque a biblioteca de comunicação web3 que você está usando não conseguiu estimar por conta própria o gás necessário para executar a sua transação. Neste caso, você deve recorrer à configuração manual de gás na transação, informando o gas price e o gas limit junto aos demais parâmetros.

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.

transaction execution reverted

Você ainda vai encontrar nos detalhes um CALL_EXCEPTION e um sendTransaction, o que indica que houve um erro no processamento da sua transação pelo contrato e ela foi revertida, embora as taxas tenham sido cobradas (entenda mais aqui). Você deverá investigar se está chamando corretamente o smart contract e às vezes tem mais detalhes no recibo da transação, olhando no block explorer.

contract runner does not support sending transactions

Esse erro acontece quando você tenta enviar uma transação para a blockchain mas não configurou um objeto de carteira que pagaria pelas taxas desta transação. Essa configuração deve ser feita no objeto provider de comunicação com a rede e muda de biblioteca para biblioteca e é obrigatória para transactions, mas opcional para calls, por isso a falha.

unknown network

Esse erro acontece na configuração do objeto de provider, ou seja, o objeto de comunicação com um nó da blockchain. Todos as classes do tipo Provider esperam que você indique de alguma forma qual a rede que será utilizada e caso você informe um tipo inválido para o provider em questão, receberá um “unknown network” error, que é facilmente corrigível revisando essa informação no seu código.

Transaction maxFeePerGas is too low for the next block, which has a baseFeePerGas of ‘x’

Esse erro acontece quando as suas configurações de maxFeePerGas/gasPrice/gasLimit estão abaixo do necessário para fazer o swap. A solução é você aumentar os parâmetros que estiver passando.

sender doesn’t have enough funds to send tx

Esse erro acontece quando você tenta realizar qualquer transação que seja, mas não possui fundos suficientes na moeda nativa da rede para pagar pelas taxas de transação estimadas. A solução é você colocar saldo na moeda nativa em sua carteira (ETH na rede Ethereum, por exemplo).

could not decode result data ou BAD_DATA

Esse erro acontece quando você tenta fazer qualquer comunicação do seu sistema com um smart contract na blockchain mas passou um endereço onde não existe a função que está tentando chamar. Resumindo: o seu endereço está errado para aquele nó de blockchain em questão (pode ser que o endereço esteja certo mas o nó errado ou o contrário).

Inclusive se você estiver usando a HardHat Network forkada para fazer os testes de integração (que é o cenário mais recomendado), vai encontrar esse erro no terminal do node confirmando o erro acima: “Calling an account which is not a contract”.

abi is not iterable

Esse erro indica uma falha de carregamento do ABI na inicialização do seu objeto local de contrato. O arquivo existe, mas por algum motivo foi carregado de maneira que não consegue ser lido pela lib web3 que está usando (web3.js, Ethers JS, etc). O caso mais comum de problema são as diferenças de carregamento entre require e import, principalmente quando usando TypeScript, alterne entre um e outro e realize novos testes.

Fail with error ‘STF’

Esse erro ocorre em swaps que não foram pré-autorizados pelo dono da carteira. STF indica “Safe Transfer From”, que é a operação que falhou pela falta de permissão. Antes de fazer um swap, seu script deve chamar um approve no contrato do token ERC20 que será enviado (token in).

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 comprar um token novo, recém-lançado na Goerli (PBL2), pagando em WETH, mas eu informei os parâmetros ao contrário, assim a compra estava tentando usar PBL2 para comprar WETH mas não tinha como eu pagar por isso e tive esse erro.

Fail with error ‘SPL’

Esse erro ocorre quando o preço final do swap fica fora do seu Square Root Price Limit, que é um mecanismo de segurança nos swaps para evitar que slippages grandes prejudiquem seus ganhos. Se o seu sqrtPriceLimitX96 já está zerado (o que desabilita essa proteção) e mesmo assim está tendo esse erro, pode indicar que está fazendo um swap em um pool com baixíssima liquidez ou em direção errada ao que pretendia originalmente (uma vez eu estava fazendo swap de WETH > UNI mas estava passando ao contrário, UNI > WETH, aí dava o erro).

Fail with error ‘TF’

Esse erro ocorre quando acontece um erro na transferência de fundos da sua carteira para o router da Uniswap. Geralmente devido a falta de aprovação (allowance), mas também pode ser porque a quantia de tokenIn não compra sequer um wei do tokenOut.

Se o seu erro não está aqui, deixe nos comentários abaixo desse post que de repente eu tenha alguma dica para passar.

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 *