A aprovação que ela não leu
Fevereiro 2025. Uma titular em Recife clica num anúncio do Twitter para um "claim grátis do BAYC temporada 2". O site parece o OpenSea, pede para ela conectar a carteira e abre uma solicitação rotulada "Confirmar elegibilidade ao airdrop". Não é uma assinatura inofensiva: é uma transação setApprovalForAll no contrato dos Bored Apes dela, e o site emenda o mesmo pedido para cada uma das outras coleções. Ela confirma todos.
Em quatro minutos, três Bored Apes, um Pudgy Penguin e um Doodle saem da carteira.
O que setApprovalForAll realmente faz
É uma única chamada de função em contrato ERC-721 ou ERC-1155 que concede a um terceiro endereço permissão para transferir qualquer NFT daquela coleção que você tenha agora ou venha a ter no futuro, até que você revogue. Uma vez concedida, o operador pode chamar transferFrom sem nenhuma interação adicional sua. Na carteira, é só mais um botão de confirmar. Se você não parar na linha que diz que o site quer acesso a todos os seus NFTs daquela coleção, parece rotina.
Os três sinais na tela de confirmação
- "setApprovalForAll" quase nunca é legítimo para airdrop. Airdrops reais usam ou uma função Merkle-claim (você assina uma transação chamando
claim, sem aprovação) ou um transferFrom da própria carteira do projeto (você não assina nada). Se uma página de "claim" pede setApprovalForAll, feche a aba. - O endereço operador deve ser o contrato em que você confia. Veja para quem você está aprovando. No OpenSea, é o contrato Conduit listado na documentação oficial do próprio OpenSea. Um EOA aleatório (externally owned account) ou um contrato que você não consegue casar com a documentação de nenhum marketplace é o drainer.
- Respeite o alerta da carteira. O MetaMask marca muitas aprovações de alto risco com um alerta de segurança em vermelho. Não passe por cima dele — e não trate a ausência de alerta como sinal verde.
Se já assinou
Vá em revoke.cash ou etherscan.io/tokenapprovalchecker imediatamente. Conecte a carteira afetada. Encontre toda aprovação para endereços não-marketplace e revogue. Cada revogação é uma transação com gas, então deixe um pouco de ETH na carteira para isso. Se o drainer ainda não moveu os NFTs, dá para salvar. A corrida costuma se decidir em minutos.
A regra permanente
Reviso minhas aprovações no revoke.cash uma vez por mês. Mantenho um screenshot da lista do mês anterior. Qualquer aprovação nova que eu não tenha autorizado conscientemente é revogada na mesma hora.