Górnik oblicza hash, czyli liczbowy odcisk nagłówka bloku. Aby spełnić Proof of Work (czyli dowód wykonanej pracy obliczeniowej), wynik musi być mniejszy lub równy ustalonej granicy zwanej target. Nonce jest jedną z wartości, które można zmienić przed kolejną próbą. Nie jest hasłem ani tajnym kluczem: po opublikowaniu bloku każdy może je odczytać.
Anna ma urządzenie wydobywcze, które próbuje utworzyć nowy blok transakcji. Z nagłówka, czyli zwięzłego zestawu danych o bloku, wylicza ono za pomocą SHA-256 liczbowy odcisk nazywany hashem. Bitcoin wykonuje to obliczenie dwukrotnie, stąd double-SHA-256. Jeśli wynik przekracza dozwoloną granicę, urządzenie zmienia na przykład Nonce z 10 na 11 i próbuje ponownie. Anna nie zgaduje liczb ręcznie; sprzęt automatycznie wykonuje ogromną liczbę prób. Większe Nonce nie oznacza mniejszego hasha ani zbliżenia się do celu. Dokładnie ten sam nagłówek zawsze daje ten sam hash, więc ponowne obliczenie nie stwarza nowej szansy. [1] [2]
Na Nonce przeznaczono cztery bajty, czyli 32 bity. Mieszczą one liczby całkowite od 0 do 4 294 967 295 włącznie: razem 4 294 967 296 możliwości, czyli 2^32. Dla człowieka to dużo, ale wyspecjalizowane urządzenie wydobywcze ASIC sprawdza taki zakres bardzo szybko. Wypróbowanie wszystkich wartości nie gwarantuje sukcesu. Jeśli pozostałe dane nagłówka się nie zmienią, powrót do początku tylko odtworzy poprzednie wyniki. Dlatego oprogramowanie musi przygotowywać także inne nagłówki. [1] [5]
Jednym ze sposobów jest zmiana Extranonce. Podobna nazwa może mylić: nie jest to dodatkowe pole nagłówka, lecz dane w transakcji coinbase, pierwszej transakcji bloku, która przydziela nagrodę za wydobycie. Jej zmiana wpływa na identyfikator txid, a następnie na Merkle Root, wspólny odcisk transakcji zapisany w nagłówku. Urządzenie otrzymuje więc inne dane wejściowe. Może użyć tych samych wartości Nonce ponownie, lecz teraz oblicza hashe innych nagłówków. Kolejne 2^32 możliwości również nie gwarantują znalezienia bloku. [2] [3]
Eksplorator może pokazywać małe Nonce dla jednego bloku, a duże dla innego. Sama liczba nie mówi, jak trudno było znaleźć blok ani czy jest on lepszy. Full Node, czyli program samodzielnie sprawdzający bloki i transakcje zgodnie z regułami Bitcoina, oblicza hash całego nagłówka i porównuje go z poprawnym targetem, którego skrócony zapis zawiera nBits. Liczy się to, czy hash jest mniejszy lub równy tej granicy, a nie wielkość Nonce. Węzeł musi też zweryfikować transakcje i pozostałe reguły poprawności bloku. [1] [8]
Nonce pojawia się także w opisach podpisywania transakcji. Może wtedy oznaczać tajną liczbę pomocniczą, fachowo skalar, używaną przez algorytm wraz z Private Key — kluczem prywatnym uprawniającym do wydania środków. Błędne ponowne użycie tej liczby dla różnych wiadomości może ujawnić klucz. Wydobywczy Nonce jest inny: jest publiczny, a ta sama liczba może występować w różnych nagłówkach. Publiczne części podpisu również nie są tą tajną liczbą pomocniczą. Zasad jednego zastosowania nie można więc bez kontekstu przenosić na drugie. [9]
Kiedy wiele urządzeń współpracuje w Mining Pool, nie powinny wszystkie obliczać hashy tych samych nagłówków. Powtórzenia nie dodają nowych prób. Koordynator przydziela więc różne dane, na przykład dla coinbase i Extranonce. Protokoły takie jak Stratum przekazują zadania; podłączone jednostki wydobywcze określa się też jako workers. BIP23 opisuje ponadto opcjonalny parametr noncerange wyznaczający zakres Nonce. Nie oznacza to, że każdy pool musi go używać ani że może zmieniać reguły poprawności bloków. [4] [2]
Merkle Tree stopniowo łączy odciski transakcji we wspólny odcisk, Merkle Root. Identyfikator transakcji coinbase, jej txid, uczestniczy w obliczeniu jako jeden z liści drzewa. Zmiana Extranonce prowadzi więc przez nowy txid do nowego Merkle Root. Górnik może zachować pozostałe transakcje i odwołanie do poprzedniego bloku, a mimo to uzyskać inny nagłówek. Nie przepisuje zatwierdzonego bloku: zmienia projekt nowego, dla którego dopiero szuka poprawnego Proof of Work. [1] [2]
Oprogramowanie może tworzyć kolejne nagłówki, zmieniając czas nTime w dozwolonych granicach lub dozwolone bity wersji. Drugi sposób nazywa się version rolling. BIP320 proponuje ogólne wykorzystanie wybranych bitów nVersion; sama propozycja nie pozwala dowolnie zmieniać wszystkich bitów. Reguły sieci i przydzielonego zadania wydobywczego nadal obowiązują. Żadna z tych możliwości nie omija wymogu, aby wynikowy hash spełniał właściwy próg target. Nowszy BIP323 proponuje więcej bitów i nadal ma status Draft, czyli projektu. [4] [5] [10]
Do czytania dokumentacji technicznej przydaje się znajomość formatu. Nagłówek ma 80 bajtów: wersję, hash poprzedniego bloku, Merkle Root, czas, nBits i czterobajtowy Nonce. Nonce jest 32-bitową liczbą całkowitą bez znaku, typu uint32. Zapisuje się ją w kolejności little-endian, z najmniej znaczącym bajtem jako pierwszym. Zmiana samego Nonce zmienia nagłówek i jego hash double-SHA-256, nie listę transakcji. Program potrzebuje tego dokładnego zapisu, choć zrozumienie wydobycia nie wymaga ręcznego składania go. [1]
Zaawansowany czytelnik może użyć getblockheader w Bitcoin Core z hashem konkretnego bloku. Domyślny szczegółowy wynik obejmuje między innymi nonce, bits i time. Ustawienie parametru verbose na false zwraca dokładne 80 bajtów nagłówka w zapisie szesnastkowym. Można z nich obliczyć double-SHA-256 i porównać wynik liczbowy z poprawnym targetem. Własna implementacja musi przestrzegać kolejności bajtów Bitcoina: błędne odwrócenie bajtów zmienia porównanie. Odczytanie Nonce w eksploratorze nie zastępuje tej weryfikacji. [1] [6] [8]
Pełniejszy obraz uzyskasz, czytając to hasło razem z Block Header, Wydobywanie, Proof of Work, Mining Target, Transakcja coinbase, Bitcoin. Do tego hasła prowadzą również odsyłacze z Block Header, Transakcja coinbase, ASIC Miner, Stratum V1.