Como o Nonce funciona
Na Ethereum, toda conta (tanto uma EOA quanto uma conta de contrato) tem um nonce armazenado em seu estado on-chain. No caso das EOAs, o nonce da conta aumenta a cada vez que uma transação desse endereço é aceita na rede, o que impõe uma ordem estrita para as transações dessa conta.
Ao enviar uma transação, você inclui um nonce de transação. Os nós verificam se o nonce da transação corresponde ao nonce esperado da conta de origem; se não corresponder, a transação é rejeitada. É por isso que carteiras e endpoints RPC podem retornar erros como “nonce too low” (você já usou esse nonce) ou “nonce too high” (você pulou um).
Nonces também aparecem na camada de aplicação. Muitos smart contracts e esquemas de assinatura off-chain incluem um nonce (ou contador) por usuário ou por ordem nos dados assinados e depois o verificam on-chain para evitar que a mesma mensagem assinada seja executada duas vezes. Esses nonces de aplicação são separados do nonce de conta da Ethereum no nível do protocolo e só funcionam se o contrato realmente os verificar e atualizar.
O termo tem vários significados no universo cripto. Na prova de trabalho (proof-of-work) no estilo do Bitcoin, o “nonce de mineração” é um campo que os mineradores variam para encontrar um hash de bloco válido. Na criptografia em geral, um nonce pode ser um valor aleatório de uso único empregado em assinaturas ou criptografia.
Exemplo
Se a senha de atendimento de uma padaria mantém os pedidos em ordem, o nonce de conta da Ethereum é a senha que torna cada transação única e corretamente ordenada.
Por que é importante
A proteção contra replay baseada em nonce impede que transações antigas ou mensagens assinadas sejam copiadas e executadas novamente. Ela também explica comportamentos comuns das carteiras: se uma transação com nonce baixo ficar travada como pendente, transações com nonce mais alto da mesma conta podem continuar pendentes até que a lacuna seja resolvida.
Riscos ou limitações
Lacunas de nonce podem causar filas de transações “travadas”: enviar uma transação com nonce mais alto não contorna um nonce anterior ausente. Nonces na camada de aplicação podem ser mal utilizados se um contrato deixar de validá-los ou incrementá-los, e padrões como o ERC-5008 (nonces por NFT que mudam na transferência) exigem suporte do ecossistema para serem eficazes.
Termos relacionados
- Replay Protection
- Externally Owned Account (EOA)
- Smart Contract
- ERC-721
- Account Abstraction