50 / 691NONCE

Nonce

Licznik wydobywczy w nagłówku bloku

Nonce w wydobyciu Bitcoina to 32-bitowe pole w 80-bajtowym nagłówku bloku. Górnicy zmieniają je, szukając hasha double-SHA-256, którego wartość liczbowa jest mniejsza lub równa target dla Proof of Work.

Wydobywczy Nonce jest publicznym parametrem poszukiwań typu uint32, a nie sekretem ani nonce podpisu. Przy niezmienionych pozostałych polach nagłówka oferuje 2^32 wartości, które współczesny ASIC szybko wyczerpuje. Oprogramowanie wydobywcze odnawia więc przestrzeń poszukiwań także przez zmianę Extranonce w transakcji coinbase i w konsekwencji Merkle Root lub przez zmianę nTime i dozwolonych bitów version.

Nagłówek Bitcoina ma 80 bajtów: version, hash poprzedniego bloku, Merkle Root, time, nBits i czterobajtowy Nonce. Nonce jest 32-bitową liczbą całkowitą bez znaku, serializowaną w kolejności little-endian. Zmiana tego pola zmienia serializowany nagłówek i jego hash double-SHA-256, nie zmieniając sama w sobie listy transakcji. [Bitcoin Developer Reference — Block headers]

Niewielka zmiana wejścia SHA-256 nie wskazuje użytecznego kierunku prowadzącego do sukcesu. Zwiększenie Nonce o jeden tworzy praktycznie niezwiązany z poprzednim 256-bitowy hash, dlatego różne nagłówki można modelować jako niezależne próby probabilistyczne. Powtórzenie dokładnie tego samego nagłówka zawsze natomiast zwraca ten sam hash; do zwycięskiej wartości nie prowadzi użyteczny gradient. [Bitcoin Developer Reference — Block headers] [Bitcoin Developer Guide — Mining]

Czterobajtowy Nonce oferuje dokładnie 4 294 967 296 wartości, czyli 2^32, jeśli pozostałe pola nagłówka pozostają niezmienione. Współczesny ASIC może przejść ten zakres wiele razy na sekundę, więc samo pole Nonce nie wystarcza do dzisiejszego wydobycia. Wyczerpanie zakresu nie gwarantuje znalezienia poprawnego Proof of Work. [Bitcoin Developer Reference — Block headers] [BIP 320 — nVersion bits for general purpose use]

Mining Pool i oprogramowanie wydobywcze używają Extranonce wewnątrz transakcji coinbase. Mimo podobnej nazwy nie jest to dodatkowe pole nagłówka. Zmiana Extranonce zmienia txid transakcji coinbase, a następnie Merkle Root w nagłówku, otwierając nową przestrzeń 2^32 wartości wydobywczego Nonce. [Bitcoin Developer Guide — Mining] [Bitcoin Developer Reference — Transactions]

Transakcja coinbase tworzy liść drzewa Merkle. Zmiana jej txid podczas ponownego obliczenia drzewa przekłada się na Merkle Root w nagłówku. Górnik otrzymuje dzięki temu nowy nagłówek z tym samym hashem poprzedniego bloku i niemal taką samą zawartością bloku; nie musi w tym celu zmieniać innych transakcji. [Bitcoin Developer Reference — Block headers] [Bitcoin Developer Guide — Mining]

Dodatkową przestrzeń można uzyskać, zmieniając nTime w dozwolonych granicach lub modyfikując dozwolone bity version, co określa się jako version rolling. BIP320 proponuje ogólne wykorzystanie wybranych bitów nVersion; sama propozycja nie oznacza, że można dowolnie zmieniać wszystkie bity. Nadal obowiązują odpowiednie reguły konsensusu i zadania wydobywczego, a wynikowy hash musi spełniać target. [BIP 23 — getblocktemplate pooled mining] [BIP 320 — nVersion bits for general purpose use]

Przy wspólnym wydobyciu Mining Pool lub koordynator zadań przydziela workerom różne wartości coinbase/Extranonce lub inne parametry, aby urządzenia niepotrzebnie nie haszowały identycznych nagłówków. BIP23 opisuje również opcjonalny parametr noncerange. Protokoły Stratum rozdzielają przestrzeń poszukiwań między wiele urządzeń ASIC. [BIP 23 — getblocktemplate pooled mining] [Bitcoin Developer Guide — Mining]

Sama wartość liczbowa Nonce nie jest ani dobra, ani zła. Full Node haszuje cały konkretny nagłówek i porównuje wynik z poprawnym target wyprowadzonym z nBits. Niski Nonce niczego nie dowodzi; decyduje hash całego nagłówka mniejszy lub równy target. Spełnienie tego warunku nie zastępuje sprawdzenia pozostałych reguł poprawności bloku. [Bitcoin Developer Reference — Block headers] [Bitcoin Core v30.0 — Proof of Work validation]

Nonce występuje także w kontekście podpisów kryptograficznych. Tajny skalar podpisu może ujawnić Private Key, jeśli zostanie błędnie ponownie użyty do różnych wiadomości. Wydobywczy Nonce jest natomiast publiczną daną nagłówka i nie wymaga utajnienia. Publicznych danych podpisu nie wolno utożsamiać z jego tajnym skalarem ani z licznikiem wydobywczym. [BIP 340 — Schnorr Signatures]

Bitcoin Core przez getblockheader zwraca nonce, bits, time i inne pola w domyślnym szczegółowym wyniku. Gdy parametr verbose ma wartość false, zwraca serializowany nagłówek w zapisie szesnastkowym. Aby przeprowadzić niezależną kontrolę, dokładnie zbuduj lub zdekoduj jego 80 bajtów, oblicz double-SHA-256 i, uwzględniając kolejność bajtów Bitcoina, porównaj liczbową wartość hasha z poprawnym target. [Bitcoin Developer Reference — Block headers] [Bitcoin Core RPC — getblockheader] [Bitcoin Core v30.0 — Proof of Work validation]

Pełniejszy obraz uzyskasz, czytając to hasło razem z Nagłówek bloku, Górnictwo Bitcoin, Proof of Work, Mining Target, Transakcja coinbase, Bitcoin. Do tego hasła prowadzą również odsyłacze z Nagłówek bloku, Transakcja coinbase, ASIC Miner, Mining Target.

DOC · 001Bitcoin Developer Reference — Block headersDokumentacja ↗DOC · 002Bitcoin Developer Guide — MiningDokumentacja ↗DOC · 003Bitcoin Developer Reference — TransactionsDokumentacja ↗DOC · 004BIP 23 — getblocktemplate pooled miningSpecyfikacja ↗DOC · 005BIP 320 — nVersion bits for general purpose useSpecyfikacja ↗DOC · 006Bitcoin Core RPC — getblockheaderDokumentacja ↗DOC · 007Bitcoin Core RPC — getblocktemplateDokumentacja ↗DOC · 008Bitcoin Core v30.0 — Proof of Work validationŹródło pierwotne ↗DOC · 009BIP 340 — Schnorr SignaturesSpecyfikacja ↗
Najpierw źródła · To nie jest porada inwestycyjna