50 / 691NONCE

Nonce

Contador de mineração no cabeçalho do bloco

O Nonce na mineração de Bitcoin é um campo de 32 bits no cabeçalho do bloco de 80 bytes. Os mineradores alteram-no ao procurar um hash double-SHA-256 cujo valor numérico seja menor ou igual ao target de Proof of Work.

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.

DOC · 001Bitcoin Developer Reference — Block headersDocumentação ↗DOC · 002Bitcoin Developer Guide — MiningDocumentação ↗DOC · 003Bitcoin Developer Reference — TransactionsDocumentação ↗DOC · 004BIP 23 — getblocktemplate pooled miningEspecificação ↗DOC · 005BIP 320 — nVersion bits for general purpose useEspecificação ↗DOC · 006Bitcoin Core RPC — getblockheaderDocumentação ↗DOC · 007Bitcoin Core RPC — getblocktemplateDocumentação ↗DOC · 008Bitcoin Core v30.0 — Proof of Work validationFonte primária ↗DOC · 009BIP 340 — Schnorr SignaturesEspecificação ↗
Fontes em primeiro lugar · Não é recomendação de investimento