Pular para o conteúdo
buybitcoinsmart

Glossário / Mineração e consenso

Nonce

O que é um nonce?
Um nonce é o contador de quatro bytes no cabeçalho de um bloco que os mineradores incrementam enquanto buscam um hash abaixo do alvo, o que dá apenas 4.294.967.296 tentativas por cabeçalho.

Especificação no BIP-320.

A palavra é a abreviação de "number used once" (número usado uma vez), e em bitcoin ela nomeia o único campo do cabeçalho que existe puramente para ser alterado. Quatro bytes pareciam generosos em 2009 e hoje são triviais: uma única máquina moderna percorre todo o intervalo em uma fração de segundo. Por isso os mineradores variam também outras partes do cabeçalho, e o nonce é apenas o laço mais interno da busca.

Como funciona

Um nonce ocupa os últimos quatro bytes do cabeçalho de 80 bytes, e minerar é o ato de percorrer seus valores.

O minerador monta um cabeçalho candidato, aplica SHA-256 duas vezes a ele e compara o resultado com o alvo. Se o resultado for grande demais, o contador é incrementado e o cabeçalho é hasheado de novo. Nada mais precisa mudar, o que mantém o laço barato: o SHA-256 trabalha com blocos de 64 bytes, então os primeiros 64 bytes do cabeçalho podem ser processados uma vez e reutilizados em cada tentativa.

O problema é o intervalo. Quatro bytes comportam 4.294.967.296 valores distintos, e um ASIC com capacidade nominal de 200 terahashes por segundo percorre todos eles em cerca de 21 microssegundos. Por isso a busca tem três laços externos. O minerador varia o nonce extra, alguns bytes livres no script de entrada da transação coinbase, o que muda essa transação, o que muda a raiz de Merkle, o que gera um cabeçalho totalmente novo para buscar. Ele pode avançar o carimbo de tempo dentro das regras. E, desde o BIP320, pode variar dezesseis bits do campo de versão, usando a máscara 0x1fffe000, o que multiplica o espaço por outros 65.536 sem tocar na lista de transações.

A própria busca de Satoshi deixou um registro. O cabeçalho do bloco gênese traz o valor 2083236893, encontrado em uma CPU em 2009 sem variação de nonce extra e sem nenhum bit de versão à vista.

Onde você o encontra

Toda página de bloco em todo explorador mostra o nonce vencedor, e esse número quase não diz nada.

Como as máquinas percorrem o espaço em ordem imprevisível, e como a maior parte da variação real hoje vem do nonce extra e da variação de versão (version rolling), o número em um bloco minerado é quase aleatório. Atribuir significado a um nonce baixo ou alto é um erro comum de iniciante. O campo importa mais para quem escreve firmware: o Stratum atribui a cada máquina conectada sua própria fatia do nonce extra para que dois trabalhadores do mesmo pool nunca dupliquem o esforço, e o Stratum V2 reformula a negociação de tarefas em torno do mesmo problema de coordenação.

Você também encontrará a palavra bem longe da mineração. Esquemas de criptografia usam nonces para evitar que duas mensagens produzam o mesmo texto cifrado, o Ethereum usa um nonce de conta como contador de transações e logins na web usam um para bloquear ataques de repetição. Nenhum deles é o campo do cabeçalho de bloco, e a palavra compartilhada causa mais confusão evitável do que qualquer outro termo emprestado em bitcoin.

Perguntas frequentes

Por que o nonce do bloco tem apenas quatro bytes?

Bastava em 2009, quando nenhuma máquina conseguia testar quatro bilhões de hashes com rapidez. Os mineradores modernos esgotam o intervalo instantaneamente e encontram espaço de busca adicional no nonce extra da transação coinbase e na variação de versão.

O que é um nonce extra?

São bytes livres dentro do script de entrada da transação coinbase que o minerador altera quando o nonce do cabeçalho se esgota. Alterá-los muda a raiz de Merkle, o que produz um cabeçalho totalmente novo com um intervalo de nonces novo.

Termos relacionados

Mais em Mineração e consenso

Ler esta página em inglês