Nonces: por que as transações do Ethereum esperam na fila

·4 min de leitura·Por SSP Editorial Team
Capa da SSP Academy: nonces do Ethereum explicados

Nonces: por que as transações do Ethereum esperam na fila

No Bitcoin, dois pagamentos sem relação entre si, feitos da mesma carteira, podem ser confirmados em qualquer ordem. No Ethereum, não: cada transação de um endereço tem um número, e a rede as processa estritamente em sequência. Esse número é o nonce, e ele explica alguns dos momentos mais confusos em uma carteira Ethereum: uma transação que não confirma, seguida de todas as posteriores presas atrás dela.

O que é o nonce

Em uma conta Ethereum comum, o nonce é um contador: o número de transações que aquele endereço já enviou. A primeira transação usa o nonce 0, a seguinte usa o 1, e assim por diante. Cada transação que você assina inclui seu nonce, e a rede só aceita o nonce n depois que o nonce n − 1 foi incluído.

Ele tem duas funções:

  • Proteção contra repetição. Uma transação assinada não pode ser enviada duas vezes, porque, depois que o nonce 5 é usado, qualquer outra transação com nonce 5 daquele endereço é inválida.
  • Ordem. As transações de uma conta são executadas exatamente na ordem que você pretendia, o que importa quando uma depende da outra: aprovar e depois fazer o swap.

Por que uma transação travada bloqueia as demais

A regra de ordem tem um efeito colateral. Se o nonce 5 está parado na mempool com uma taxa baixa demais para ser processado, os nonces 6, 7 e 8 também não podem ser incluídos, não importa quanto paguem. Eles esperam na fila atrás dele.

É por isso que uma única transação com taxa baixa demais pode fazer uma carteira parecer congelada. Nada é perdido; a fila está apenas bloqueada em uma posição.

Desbloqueando a fila

Como cada nonce só pode ser usado uma vez, você resolve uma transação travada substituindo-a:

  • Acelerar: assine uma nova transação com o mesmo nonce e uma taxa maior. Os nós substituem a versão antiga, e vence a que for incluída primeiro.
  • Cancelar: assine uma transação com o mesmo nonce que não envia nada para você mesmo, com uma taxa maior. Quando ela confirmar, a original nunca mais poderá confirmar.

Em geral, as substituições precisam de uma taxa bem maior que a da original para serem aceitas. Transações travadas e replace-by-fee aborda as ferramentas equivalentes no Bitcoin.

Problemas comuns com o nonce

  • "Nonce too low" (nonce muito baixo). Uma transação com esse nonce já foi usada, muitas vezes porque outra carteira ou outro dispositivo enviou do mesmo endereço.
  • Lacunas. Uma transação com nonce 9 quando a conta ainda está no 7 vai esperar até que o 7 e o 8 existam. Geralmente é sinal de que algo foi descartado ou assinado em outro lugar.
  • Dois dispositivos, uma conta. Se dois apps enviam do mesmo endereço ao mesmo tempo, os dois podem escolher o mesmo nonce; uma das transações vai falhar.

Como outras blockchains lidam com isso

  • Bitcoin e outras blockchains UTXO não têm nonces de conta. Cada transação gasta moedas específicas, e uma moeda só pode ser gasta uma vez: é isso que impede repetições e gastos duplos.
  • Solana usa um blockhash recente no lugar: uma transação só é válida por uma janela curta. Para assinaturas que demoram mais, como reunir aprovações em dois dispositivos, ela oferece nonces duráveis, armazenados em uma conta especial.

Contas inteligentes também têm nonces

Contas de contrato inteligente baseadas no ERC-4337 não enviam transações comuns. Elas assinam operações de usuário, que um bundler envia por meio de um contrato EntryPoint compartilhado. Cada conta continua tendo um nonce, controlado pelo EntryPoint, com a mesma proteção contra repetição. O padrão também permite várias sequências de nonces independentes por conta, para que operações sem relação não precisem esperar umas pelas outras. Abstração de contas a partir dos princípios básicos explica o panorama geral.

Nonces no SSP

No Ethereum e nas outras redes EVM compatíveis com o SSP, sua conta SSP é uma conta inteligente ERC-4337 controlada pelo seu multisig 2 de 2. Cada operação inclui seu nonce, e tanto a SSP Wallet quanto a SSP Key assinam sobre ele, então uma operação aprovada não pode ser repetida nem reutilizada em outra posição do seu histórico.

Uma consequência prática: o contrato da sua conta é implantado pela primeira operação que você envia a partir dela. Esse primeiro envio inclui a implantação, por isso usa bem mais gas do que os envios seguintes. Isso é esperado e acontece uma única vez por conta em cada rede.

O resumo honesto

O nonce é um contador que faz cada conta Ethereum processar suas transações uma única vez e em ordem. Isso protege você contra repetições e mantém as transações dependentes em sequência, ao custo de que uma única transação com taxa baixa demais pode segurar tudo o que vem atrás dela.

Quando isso acontecer, não envie mais transações por cima. Substitua a que está travada com o mesmo nonce e uma taxa maior, ou cancele-a, e a fila se libera.

Compartilhar este artigo

Artigos relacionados