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:
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.
- Você não fica mais perto de minerar um bloco a cada tentativa. O resultado da função de hash é completamente imprevisível, então cada resultado é independente do anterior. Você tem a mesma chance de minerar com um nonce de 0 ou de 4294967295.
- Você não precisa incrementar o nonce. Poderia ir de trás para frente, ou até tentar valores aleatórios. Não faz diferença, desde que você não repita os mesmos valores.
- Nem todo bloco tem um nonce "mágico". Na verdade, é provável que não haja nenhum nonce que produza um hash abaixo do alvo. Se você esgotar o nonce, precisa começar de novo com um novo cabeçalho.
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.