Uma aprovação de tokens ERC-20 é uma permissão que assinas e que permite que um contrato inteligente gaste tokens da tua carteira, e revogar essas aprovações é uma tarefa de segurança rotineira, não um evento pontual. Aprovações inativas ou 'infinitas' são uma das principais formas de as carteiras serem esvazadas meses depois de o utilizador se ter esquecido de um contrato, por isso uma limpeza mensal é o hábito de maior impacto que um utilizador de autocustódia pode criar.
Pontos-chave
- Uma aprovação ERC-20 'infinita' permite que um contrato gaste todos os tokens desse tipo que possuis, e vieres a deter, até a revogares.
- A maioria dos esvaziamentos em DeFi em 2023 e 2024 explorou aprovações antigas, não novas assinaturas de phishing, porque as vítimas já tinham há muito esquecido que o contrato existia.
- O Revoke.cash, a ferramenta de aprovações de tokens do Etherscan e o gestor de aprovações integrado no Rabby leem todos os mesmos dados on-chain; escolhe um e usa-o todos os meses.
- Revogar não reverte um roubo passado. Apenas impede que um contrato que aprovaste anteriormente mova tokens no futuro.
- Na mainnet da Ethereum, uma única revogação pode custar alguns dólares em gas; a mesma chamada numa L2 como a Base ou a Arbitrum custa normalmente cêntimos.
O que é realmente uma aprovação de tokens, e porque sobrevive à transação
Quando trocas um token numa exchange descentralizada, emprestas ativos num mercado monetário ou fazes stake através de um painel de DeFi, não entregas os teus tokens a uma pessoa. Assinas uma mensagem que pede ao contrato inteligente do token que permita que outro contrato inteligente mova um número específico dos teus tokens em teu nome. Essa mensagem assinada é a aprovação, e permanece on-chain indefinidamente até tu ou alguém a cancelar explicitamente.
Esta é a parte que a maioria dos iniciantes compreende mal. A aprovação não está ligada a uma única transação. É uma permissão permanente. A DEX ou o protocolo de empréstimo com que interagiste em 2023 pode, em princípio, continuar a mover tokens da tua carteira hoje, porque o próprio contrato do token registou que tem autorização para o fazer.
Existem duas variantes que verás numa ferramenta como o Etherscan. Uma aprovação 'limitada' define um teto, por exemplo 100 USDC, após o qual o contrato tem de te pedir para assinar de novo. Uma aprovação 'infinita' (tecnicamente o valor máximo representável num uint256, que é um número inteiro sem sinal de 256 bits, ou um número tão grande que é praticamente ilimitado) não define qualquer teto. A maioria das interfaces de DeFi usa como predefinição a aprovação infinita, porque poupa ao utilizador uma assinatura extra em cada transação futura, e porque pagar gas duas vezes para a mesma dapp parece desperdício.
A compensação é real: uma aprovação infinita é cómoda para ti, e também é cómoda para quem quer que, mais tarde, assuma o controlo desse contrato.
O risco: como uma aprovação esquecida se torna num esvaziamento
O modo de falha raramente é um novo ataque engenhoso. É quase sempre um de três padrões mais antigos, e todos são agravados por aprovações que estão on-chain há meses.
1. O próprio contrato é comprometido. Uma chave de developer é alvo de phishing, uma carteira multisig é sequestrada, ou o protocolo sofre um ataque de governance em que os atacantes aprovam uma proposta que atualiza os contratos para uma versão maliciosa. Quando o contrato se torna hostil, cada aprovação ainda ativa que detém é uma arma carregada apontada à carteira do utilizador. O utilizador não precisa de interagir com nada de novo. O contrato limita-se a chamar transferFrom por iniciativa própria.
2. O protocolo é abandonado, mas o contrato não é pausado. Muitos projetos de DeFi são lançados, angariam dinheiro, perdem interesse e encerram discretamente. Os contratos continuam a correr. Se mais tarde for encontrada uma vulnerabilidade e não houver equipa para a corrigir, os atacantes podem esvaziar todas as carteiras que alguma vez aprovaram esse endereço. Isto aconteceu repetidamente com contratos antigos de staking e agregadores de yield do ciclo 2020 a 2021.
3. Aprovaste um site de phishing que parecia uma dapp real. Uma interface falsa de Uniswap ou Aave assina uma aprovação para um contrato controlado pelo atacante. O utilizador pensa que está a negociar, mas na verdade deu a um desconhecido permissão para esvaziar um token específico. Neste caso, revogar é urgente, e é também a única solução, porque a aprovação assinada já está on-chain.
Repara no que falta nesta lista: não precisas de ser 'hackeado de novo' para o esvaziamento acontecer. A vulnerabilidade é a própria aprovação, pousada em arquivo morto na blockchain, à espera de um evento futuro para a ativar.
Como ver o que já aprovou
O primeiro passo é fazer o inventário. Ligue a sua carteira a uma de três ferramentas, todas elas leem os mesmos dados da blockchain subjacente e apresentam-nos de formas ligeiramente diferentes.
O Revoke.cash é o mais acessível para principiantes. Entra no site, liga a carteira, e ele lista todas as aprovações que assinou nas cadeias que suporta, que hoje incluem Ethereum, Arbitrum, Optimism, Base, Polygon, BNB Chain e quase todas as outras redes EVM (Ethereum Virtual Machine) relevantes. Cada linha mostra o token, o spender (o contrato que pode movimentar o token), o allowance (a quantidade que pode movimentar) e um botão “Revoke”. Também assinala contratos que não são usados há muito tempo como potencialmente inativos.
A ferramenta de aprovação de tokens do Etherscan está disponível em etherscan.io/tokenapprovalchecker. É mais rudimentar que o Revoke.cash, mas é mantida por uma equipa com um longo histórico público, e por vezes deteta casos limite que o Revoke.cash deixa passar. O processo é o mesmo: ligar, analisar, revogar.
O gestor de aprovações integrado no Rabby é a única opção on-chain que não exige visitar um site externo. O Rabby é uma carteira (uma extensão de navegador e uma aplicação móvel) que lê as suas aprovações e apresenta uma lista de “aprovações perigosas” dentro da própria interface da carteira. Se já usa o Rabby, este é o caminho com menos atrito. Os dados são os mesmos; a interface apenas vive onde já confia.
Seja qual for a ferramenta escolhida, utilize apenas uma por sessão. O risco de andar a alternar entre vários separadores de verificadores de aprovações é perder o controlo de que site está ligado à sua carteira, o que por si só já é um risco ligeiro de phishing.
Como perceber que aprovações são realmente perigosas
Depois de ter a lista, não precisa de revogar tudo. Uma boa primeira passagem dá prioridade às entradas mais arriscadas.
As aprovações infinitas vêm primeiro. Ordene ou filtre a lista por qualquer linha que apresente um número enorme, frequentemente em notação científica como 1.15792e+59, que é a forma codificada do uint256 máximo. Estas são as limpezas com maior impacto. Cada uma é um contrato que pode movimentar 100% desse token da sua carteira sem voltar a pedir autorização.
A seguir vêm as aprovações limitadas a contratos que já não utiliza. Se aprovou um contrato de staking para exatamente 500 tokens há dois anos e já não o utiliza, essa aprovação continua ativa. Tem um raio de impacto mais pequeno do que uma infinita, mas continua a ser uma arma carregada apontada a um contrato que não monitoriza.
Contratos inativos merecem atenção. A maioria das ferramentas de aprovação mostra uma data de “última utilização” ou marca contratos que não transacionam há mais de um ano. Estas são as aprovações com maior probabilidade de pertencerem a projetos abandonados, e projetos abandonados são as aprovações com maior probabilidade de serem exploradas mais tarde. Revogue-as.
Contratos ativos que ainda utiliza podem esperar. Se negoceia ativamente na Uniswap e empresta na Aave, pode manter essas aprovações abertas. Revogar e voltar a aprovar a cada transação desperdiça gás e gera fadiga de assinaturas, o que é um risco de segurança por si só. O objetivo de uma limpeza mensal não é zero aprovações; é zero aprovações obsoletas.
A mecânica de revogar e quanto custa na prática
Revogar é, por si só, uma transação on-chain. Está a chamar a função approve no contrato do token e a definir o seu allowance para esse spender como zero. O contrato do token regista o novo allowance, e a partir desse bloco o spender deixa de poder movimentar os seus tokens.
Na mainnet da Ethereum, uma única revogação custa tipicamente entre um e cinco dólares em gás, dependendo do congestionamento. Se tiver vinte aprovações obsoletas, a fatura é considerável. Em redes layer-2 (L2s) como Base, Arbitrum ou Optimism, a mesma chamada custa cêntimos, por vezes frações de cêntimo, porque as L2s agrupam transações e herdam a segurança da Ethereum cobrando taxas muito mais baixas. Se está a escolher onde fazer a limpeza mensal, fazê-la na L2 que realmente utiliza é quase sempre a decisão certa.
Há uma armadilha pequena mas real. Quando submete uma transação de revogação, a carteira ainda tem de pagar gás, e o gás tem de vir do ativo nativo dessa cadeia, ou seja, ETH na Ethereum e na Arbitrum, MATIC na Polygon, BNB na BNB Chain. Se a sua carteira só tem stablecoins e o saldo do ativo nativo é zero, a revogação vai falhar. Mantenha uma pequena quantidade do token nativo em qualquer carteira que pretenda limpar, da ordem de alguns dólares.
Outra armadilha: revogar é irreversível no sentido de que não recupera o gás, mas é trivialmente reversível no sentido de que pode voltar a aprovar o mesmo contrato no dia seguinte. Não há qualquer penalização por revogar um contrato que mais tarde decida usar de novo; apenas terá de assinar uma nova aprovação, pagar o respetivo gás, e seguir em frente.
O que revogar não faz
Revogar impede futuros esvaziamentos a partir do contrato que revogou. Não desfaz, nem pode desfazer, um esvaziamento que já aconteceu. Se a sua carteira foi esvaziada em março e revoga em maio, os tokens de março estão perdidos, e a transação de revogação não tem qualquer relação legal, forense ou recuperável com o roubo.
Revogar também não o protege de uma nova aprovação que assine amanhã. Se visitar um site de phishing, assinar uma aprovação para um contrato malicioso e depois tentar fazer a limpeza, a nova aprovação é o problema, e revogar o seu antigo allowance da Uniswap não ajuda em nada.
Revogar não move os seus tokens. Não exige uma troca, uma assinatura de terceiros, nem qualquer interação com o contrato do spender. É uma única chamada de função ao próprio contrato do token, a dizer-lhe para zerar uma linha do seu registo de allowances.
Uma rotina mensal que consegue realmente manter
O maior motivo pelo qual as pessoas nunca revogam aprovações é porque parece uma tarefa pontual, o que garante que nunca será feita. A solução mais fiável é associá-la a um evento no calendário. O primeiro domingo do mês é uma escolha popular porque os fins de semana são mais calmos e é menos provável que esteja a meio de uma negociação; algumas pessoas escolhem o dia em que o extrato do cartão de crédito fecha, pela mesma razão. O dia específico não importa. O que importa é a repetição.
No dia da limpeza, o procedimento é curto. Abra o Revoke.cash, o Etherscan ou o gestor de aprovações da Rabby. Ligue a carteira que utiliza ativamente. Ordene primeiro pelas aprovações infinitas e revoque-as. Depois procure contratos inativos, que a ferramenta geralmente assinala, e revoque-os. Deixe intactos os contratos ativos que ainda utiliza. Confirme cada transação, aguarde que seja processada e feche o separador.
Tempo necessário numa L2: cerca de cinco a dez minutos. Tempo necessário na mainnet: semelhante, mais alguns dólares em gas. O hábito, depois de instalado, demora menos tempo do que verificar o extrato bancário e paga-se da primeira vez que travar um drain.
Como acompanhar as notícias de segurança de carteiras de forma inteligente
Os incidentes de segurança em carteiras acontecem depressa, e a diferença entre um 'hack controlável' e uma 'perda total' está quase sempre na rapidez com que um utilizador ouve falar de um contrato vulnerável e revoga a sua aprovação antes de um atacante a esvaziar. Acompanhar manualmente o fórum de governação, os relatórios de auditoria e as análises pós-incidente de cada protocolo é uma batalha perdida. A Zippfeed destaca notícias de segurança de carteiras e explorações de DeFi com classificação de sentimento (bullish, neutral ou bearish) e uma avaliação de importância, para que possa revogar as aprovações certas antes do próximo drain, e não depois.