O Nonce de mineração é um parâmetro público de pesquisa do tipo uint32, não um segredo nem um nonce de assinatura. Mantendo os outros campos do cabeçalho inalterados, oferece 2^32 valores que um ASIC moderno esgota rapidamente. Por isso, o software de mineração também renova o espaço de pesquisa alterando o Extranonce na transação coinbase e, consequentemente, o Merkle Root, ou alterando nTime e os bits version permitidos.
O cabeçalho Bitcoin tem 80 bytes: version, hash do bloco anterior, Merkle Root, time, nBits e um Nonce de quatro bytes. O Nonce é um inteiro sem sinal de 32 bits, serializado em ordem little-endian. Alterar este campo modifica o cabeçalho serializado e o seu hash double-SHA-256 sem, por si só, alterar a lista de transações. [Bitcoin Developer Reference — Block headers]
Uma pequena alteração na entrada de SHA-256 não fornece uma direção útil para alcançar o sucesso. Aumentar o Nonce em uma unidade produz um hash de 256 bits praticamente sem relação com o anterior, pelo que cabeçalhos diferentes podem ser modelados como tentativas probabilísticas independentes. Repetir exatamente o mesmo cabeçalho, pelo contrário, devolve sempre o mesmo hash; não existe um gradiente útil que conduza ao valor vencedor. [Bitcoin Developer Reference — Block headers] [Bitcoin Developer Guide — Mining]
O Nonce de quatro bytes oferece exatamente 4 294 967 296 valores, ou seja, 2^32, se os restantes campos do cabeçalho permanecerem inalterados. Um ASIC atual pode percorrer este intervalo muitas vezes por segundo, pelo que o campo Nonce, por si só, não basta para a mineração moderna. Esgotar o intervalo não garante encontrar um Proof of Work válido. [Bitcoin Developer Reference — Block headers] [BIP 320 — nVersion bits for general purpose use]
O Mining Pool e o software de mineração utilizam o Extranonce dentro da transação coinbase. Apesar do nome semelhante, não se trata de outro campo do cabeçalho. Alterar o Extranonce modifica o txid da coinbase e, depois, o Merkle Root no cabeçalho, abrindo um novo espaço de 2^32 valores do Nonce de mineração. [Bitcoin Developer Guide — Mining] [Bitcoin Developer Reference — Transactions]
A transação coinbase constitui uma folha da árvore de Merkle. Ao recalcular a árvore, uma alteração do seu txid reflete-se no Merkle Root do cabeçalho. O minerador obtém assim um novo cabeçalho com o mesmo hash do bloco anterior e um conteúdo de bloco quase igual; não precisa de alterar as restantes transações para isso. [Bitcoin Developer Reference — Block headers] [Bitcoin Developer Guide — Mining]
É possível obter espaço adicional alterando nTime dentro dos limites permitidos ou variando os bits version autorizados, o chamado version rolling. O BIP320 propõe o uso geral de determinados bits nVersion; a proposta, por si só, não significa que todos os bits possam ser alterados arbitrariamente. Continuam a aplicar-se as regras de consenso e da tarefa de mineração pertinentes, e o hash resultante tem de satisfazer o target. [BIP 23 — getblocktemplate pooled mining] [BIP 320 — nVersion bits for general purpose use]
Na mineração conjunta, o Mining Pool ou o coordenador das tarefas atribui aos workers valores coinbase/Extranonce diferentes ou outros parâmetros distintos, para que os dispositivos não calculem desnecessariamente hashes de cabeçalhos idênticos. O BIP23 descreve também o parâmetro opcional noncerange. Os protocolos Stratum distribuem o espaço de pesquisa por muitos dispositivos ASIC. [BIP 23 — getblocktemplate pooled mining] [Bitcoin Developer Guide — Mining]
O valor numérico do Nonce não é, por si só, bom nem mau. Um Full Node calcula o hash de todo o cabeçalho em questão e compara o resultado com o target válido derivado de nBits. Um Nonce baixo não prova nada; o que conta é o hash de todo o cabeçalho ser menor ou igual ao target. Cumprir esta condição não substitui a verificação das restantes regras de validade do bloco. [Bitcoin Developer Reference — Block headers] [Bitcoin Core v30.0 — Proof of Work validation]
Nonce também é usado no contexto de assinaturas criptográficas. Um escalar secreto de assinatura pode revelar a Private Key se for incorretamente reutilizado para mensagens diferentes. O Nonce de mineração, pelo contrário, é um dado público do cabeçalho e não exige segredo. Os dados públicos da assinatura não devem ser confundidos com o seu escalar secreto nem com o contador de mineração. [BIP 340 — Schnorr Signatures]
O Bitcoin Core devolve nonce, bits, time e outros campos através de getblockheader na saída detalhada predefinida. Com o parâmetro verbose definido como false, devolve o cabeçalho serializado em formato hexadecimal. Para uma verificação independente, monte ou descodifique exatamente os seus 80 bytes, calcule double-SHA-256 e, respeitando a ordem dos bytes do Bitcoin, compare o valor numérico do hash com o target válido. [Bitcoin Developer Reference — Block headers] [Bitcoin Core RPC — getblockheader] [Bitcoin Core v30.0 — Proof of Work validation]
Para ter uma visão mais completa, leia este verbete junto com Cabeçalho de bloco, Mineração, Proof of Work, Mining Target, Transação coinbase, Bitcoin. Também há referências a este verbete em Cabeçalho de bloco, Transação coinbase, ASIC Miner, Mining Target.