Nonce

O campo coringa usado na mineração

O nonce é um campo extra no fim do cabeçalho do bloco usado para a mineração.

Nonce é uma abreviação de number used once (número usado uma vez).

Eu gosto de chamá-lo de "campo de mineração". A forma mais fácil de entender seu propósito é ajustar o nonce em um cabeçalho de bloco e ver como ele afeta o hash do bloco:

Ícone Ferramenta

Cabeçalho do Bloco

Monte os 80 bytes do cabeçalho e calcule o hash do bloco (HASH256 do cabeçalho, em ordem de bytes invertida).

Uso

Para que serve o campo nonce?

O nonce é um campo de 4 bytes que pode conter números entre 0 e 4294967295 (0x0 a 0xffffffff).

Os mineradores incrementam o nonce ao minerar, para obter resultados de hash completamente diferentes para o cabeçalho do bloco candidato. Eles torcem para tropeçar em um valor de nonce "mágico" que produza um hash de bloco abaixo do alvo atual.

Então não há habilidade em tentar encontrar um nonce que funcione. É só um campo extra que permite aos mineradores re-hashear rapidamente o cabeçalho sem ter que reconstruir o bloco inteiro.

Limitações

Todo bloco tem um nonce "mágico"?

Não. Os mineradores geralmente esgotam o campo nonce de 4 bytes sem encontrar um nonce mágico. Quando isso acontece, o passo óbvio é ajustar o campo de tempo. Mas os mineradores são tão rápidos que esgotam o nonce em menos de 1 segundo, então o campo de tempo não ajuda muito. Por isso, eles buscam outras formas de modificar o cabeçalho sem reconstruir o bloco inteiro…

Ter um campo nonce tão pequeno (4 bytes) no cabeçalho foi possivelmente um erro de design do Satoshi.

ExtraNonce

Se um minerador esgota o campo nonce, ele passa a ajustar o que é chamado de "ExtraNonce".

O ExtraNonce fica dentro do scriptSig da transação coinbase. Os mineradores podem colocar qualquer dado no scriptSig, então podem modificá-lo para servir como um campo não oficial para um valor de nonce adicional. Como mudar o scriptSig muda o TXID da coinbase, que muda a raiz de Merkle, que muda o cabeçalho do bloco — é uma forma rápida de modificar o cabeçalho.

Terminologia

Por que se chama nonce?

É um termo usado em criptografia para "número usado uma vez", referindo-se a qualquer momento em que você precisa usar um número aleatório de uso único para algum propósito criptográfico.