Vai al contenuto
buybitcoinsmart

Glossario / Mining e consenso

Nonce

Che cos'è un nonce?
Un nonce è il contatore di quattro byte nell'intestazione di un blocco che i miner incrementano mentre cercano un hash inferiore al target, il che dà solo 4.294.967.296 tentativi per intestazione.

Specificato nel BIP-320.

La parola è l'abbreviazione di "number used once" (numero usato una volta), e in bitcoin indica l'unico campo dell'intestazione che esiste solo per essere modificato. Quattro byte sembravano generosi nel 2009 e oggi sono trascurabili: una singola macchina moderna esaurisce l'intero intervallo in una frazione di secondo. Per questo i miner variano anche altre parti dell'intestazione, e il nonce è solo il ciclo più interno della ricerca.

Come funziona

Un nonce occupa gli ultimi quattro byte dell'intestazione di 80 byte, e il mining è l'atto di percorrerne i valori.

Il miner assembla un'intestazione candidata, la sottopone due volte a SHA-256 e confronta il risultato con il target. Se il risultato è troppo grande, il contatore si incrementa e l'intestazione viene sottoposta di nuovo a hash. Nient'altro deve cambiare, il che mantiene economico il ciclo: SHA-256 lavora su blocchi di 64 byte, quindi i primi 64 byte dell'intestazione possono essere elaborati una volta sola e riutilizzati a ogni tentativo.

Il problema è l'intervallo. Quattro byte contengono 4.294.967.296 valori distinti, e un ASIC con una capacità nominale di 200 terahash al secondo li percorre tutti in circa 21 microsecondi. La ricerca ha quindi tre cicli esterni. Il miner varia l'extra nonce, alcuni byte liberi nello script di input della transazione coinbase, il che cambia quella transazione, il che cambia la radice di Merkle, il che produce un'intestazione completamente nuova in cui cercare. Può spostare avanti il timestamp entro le regole. E dal BIP320 può variare sedici bit del campo versione, usando la maschera 0x1fffe000, il che moltiplica lo spazio per altri 65.536 senza toccare affatto la lista delle transazioni.

La ricerca di Satoshi ha lasciato una traccia. L'intestazione del blocco genesi porta il valore 2083236893, trovato su una CPU nel 2009 senza variare alcun extra nonce e senza bit di versione in vista.

Dove lo vedi

Ogni pagina di un blocco su ogni explorer mostra il nonce vincente, e quel numero non ti dice quasi nulla.

Poiché le macchine percorrono lo spazio in un ordine imprevedibile, e poiché oggi la maggior parte della variazione reale deriva dall'extra nonce e dal version rolling, il numero in un blocco minato è quasi casuale. Attribuire un significato a un valore basso o alto è un errore tipico da principiante. Il campo conta di più per chi scrive firmware: Stratum assegna a ogni macchina connessa la propria porzione dell'extra nonce, così due worker dello stesso pool non duplicano mai il lavoro, e Stratum V2 riorganizza la negoziazione dei job attorno allo stesso problema di coordinamento.

Incontrerai la parola anche molto lontano dal mining. Gli schemi di cifratura usano i nonce per evitare che due messaggi producano lo stesso testo cifrato, Ethereum usa un nonce di conto come contatore delle transazioni e gli accessi web ne usano uno per bloccare gli attacchi di replay. Nessuno di questi è il campo dell'intestazione di un blocco, e la parola condivisa causa più confusione evitabile di qualsiasi altro termine preso in prestito in bitcoin.

Domande frequenti

Perché il nonce di un blocco ha solo quattro byte?

Bastavano nel 2009, quando nessuna macchina poteva provare quattro miliardi di hash in fretta. I miner moderni esauriscono l'intervallo all'istante e trovano spazio di ricerca aggiuntivo nell'extra nonce della transazione coinbase e nel version rolling.

Che cos'è un extra nonce?

Sono byte liberi all'interno dello script di input della transazione coinbase che un miner modifica quando il nonce dell'intestazione si esaurisce. Modificarli cambia la radice di Merkle, il che produce un'intestazione del tutto nuova con un nuovo intervallo di nonce.

Termini correlati

Altro in Mining e consenso

Leggi questa pagina in inglese