Owlio
PT
← Blog
Passo a passoIniciante

Transação Ethereum falhou: por que o gás foi cobrado

Uma ação que falhou pode manter seus tokens intactos e reduzir seu ETH. Leia o registro da transação antes de pagar por outra tentativa.

Uma transação Ethereum com falha ainda pode custar ETH porque a execução usa processamento pago, mesmo quando a ação pretendida é revertida. Se a transação foi incluída em um bloco e seu status geral é Failed, a transferência ou as alterações de contrato dessa transação não entram em vigor. A taxa de execução ainda é cobrada.

Este guia aborda transações comuns da Ethereum Mainnet a partir de uma conta que paga seu próprio gás. Contas inteligentes, transações patrocinadas, saques de exchanges e transferências envolvendo várias redes podem ter etapas ou cobranças adicionais. Uma etapa com falha em um aplicativo não basta para estabelecer que a transação inteira na rede falhou.

Primeiro descubra o que realmente falhou

Abra a transação na atividade da carteira e confira no explorador da Ethereum Mainnet. Anote o hash completo da transação, o remetente, o número do bloco e o status geral. Você pode inspecionar esses dados públicos sem assinar nada.

A distinção importa porque os recibos da Ethereum registram o resultado da execução no nível principal: status 0 significa falha e 1 significa sucesso. Uma chamada interna com falha em um rastreamento não significa necessariamente que a transação inteira falhou. Se o status geral for Success, inspecione o resultado real da ação em vez de supor que tudo foi revertido.

Se não houver número de bloco e a transação ainda estiver pendente, use a lista de verificação de transação pendente. As verificações abaixo começam após a inclusão; aumentar a taxa de uma transação que já falhou não muda seu resultado registrado.

Leia a taxa separadamente do valor pretendido

Na página da transação com falha, procure Transaction Fee, Gas Used e o Gas Price efetivo, quando o explorador os fornecer. Mantenha separado o valor da transferência pretendida. Um campo Value pode descrever o que foi enviado para execução sem comprovar que o valor chegou ao destinatário.

Em uma transação comum da Mainnet, a taxa de execução cobrada é o gás usado multiplicado pelo preço efetivo por unidade de gás. A configuração de taxa máxima e o limite de gás descrevem limites, portanto multiplicar esses dois tetos não estabelece o que você pagou de fato. A documentação de gás da Ethereum explica essas diferenças.

Este cálculo é ilustrativo, não é uma transação real nem uma estimativa de taxa atual:

Item Valor de exemplo
Transferência de tokens pretendida 100 tokens
Status geral do recibo Failed
Gás usado 60,000 unidades
Preço efetivo do gás 5 gwei por unidade
Taxa de execução 300,000 gwei, ou 0.0003 ETH

Sem outra atividade, a transferência com falha deixa o saldo de tokens do remetente intacto, enquanto o saldo de ETH diminui pelo valor da taxa. Este exemplo não define um limite de gás adequado nem informa o preço da sua próxima transação.

Se sua redução de ETH for maior que a taxa registrada, examine outras transações da mesma conta. Não use um gráfico do portfólio em dólares para reconstruir a cobrança: os preços de mercado podem mudar ao mesmo tempo. Se as quantidades ainda divergirem entre telas, continue com a lista de verificação do saldo do portfólio.

Diferencie falta de gás de reversão do contrato

O guia de falhas do Etherscan diferencia uma execução que fica sem gás de um contrato que reverte. Ambos podem produzir uma transação com falha, mas exigem investigações diferentes.

Falta de gás durante a execução: o processamento esgotou o gás disponível. As alterações tentadas são revertidas e o gás fornecido é consumido. Compare o gás usado com o limite e leia o erro do explorador. Se era uma ação legítima que você ainda deseja realizar, consulte as orientações atuais da carteira ou do protocolo para estimá-la. Não copie um limite antigo de uma transferência sem relação.

Execução revertida: um contrato interrompeu a execução e desfez suas alterações. Ele pode retornar um erro explicando uma condição não atendida. A especificação REVERT permite que o gás não usado permaneça, portanto um recibo com falha não precisa mostrar 100% do limite consumido.

Salve o erro exato e procure-o na documentação do protocolo que pretendia usar. Um explorador pode não decodificá-lo, e uma mensagem genérica de reversão pode não identificar a causa. Nesse caso, a causa continua sem solução. Uma reserva maior de gás não prova que a condição do contrato mudou.

Preço e limite de gás são controles separados. Pagar mais por unidade não faz um contrato aceitar uma ação que ele rejeita. Não afrouxe as proteções da transação nem aumente limites só para dispensar um aviso que você não entende.

Confira as etapas anteriores bem-sucedidas antes de tentar de novo

O fluxo de um aplicativo pode envolver mais de uma transação. Por exemplo, uma aprovação pode ter sucesso em uma transação e uma troca posterior falhar em outra. A falha posterior não desfaz uma transação anterior. Confira cada hash e seu status independentemente.

Faça um pequeno registro antes de autorizar outra tentativa:

  1. Ação com falha: hash, bloco, status geral e erro exato.
  2. Custo: taxa da transação, gás usado e preço efetivo do gás.
  3. Outras etapas: hashes e resultados de aprovações, depósitos ou novas tentativas separados.
  4. Estado atual: quantidade de tokens e qualquer posição relevante no protocolo para esta conta na Mainnet.
  5. Motivo para tentar de novo: a causa identificada e o que mudou para resolvê-la.

Se você não consegue preencher o último item, tentar novamente deixa a causa sem solução e pode custar outra taxa se a nova transação for incluída em um bloco. Use o canal oficial de suporte do protocolo com os dados públicos da transação, mantendo sua frase-semente e suas chaves privadas em sigilo.

Uma ação com falha não cria um saldo de gás reembolsável

A MetaMask explica que não recolhe a taxa de gás da rede e não pode reembolsá-la. A reserva de gás não usada é diferente da taxa já consumida pela execução. Não é preciso conectar-se a um site de reembolso para reivindicar essa reserva não utilizada.

Um rastreador de portfólio pode ajudar a comparar os ativos, mas seu total não explica um erro de contrato nem reverte a transação. Guarde o recibo com falha e sua taxa como registro dessa tentativa. Antes de prosseguir, você deve saber qual ação falhou, quanto custou e qual condição uma nova tentativa mudaria.

Perguntas frequentes

Perco os tokens que tentei enviar quando uma transação Ethereum falha?

Em uma transação comum da Ethereum Mainnet cujo recibo informa falha no nível principal, a transferência pretendida e as mudanças de estado dos contratos são revertidas. O remetente ainda paga a taxa de execução. Confira transações separadas e o contrato exato do token se seus saldos não corresponderem a esse resultado.

Uma transação com falha sempre usa todo o limite de gás?

Não. Um contrato pode reverter deliberadamente antes de usar todo o gás disponível. Ficar sem gás durante a execução consome o gás fornecido. Leia o gás usado no recibo e a causa da falha em vez de deduzir o resultado pelo limite.

Aumentar o preço do gás corrige uma transação revertida?

Um preço maior por unidade de gás não altera as condições do contrato. Identifique o erro primeiro. Limite e preço do gás são configurações distintas, e uma nova tentativa pode falhar e gerar outra taxa.