226 / 736XNONCE

Extranonce

Skąd górnik bierze kolejne możliwości poszukiwania

Alena poznaje sposób powstawania bloku. Górnik zmienia dane wejściowe i oblicza hash, cyfrowy skrót danych, którego wartość liczbowa musi spełnić warunek sieci. Co jednak zrobić, gdy wypróbowano już wszystkie wartości jednego zmiennego pola bez powodzenia? Extranonce pozwala przygotować kolejne warianty i szukać dalej. Nie łagodzi zasad sieci Bitcoin ani nie obiecuje nagrody; pomaga urządzeniom unikać ciągłego powtarzania tych samych prób.

Extranonce to dodatkowe zmienne dane, które oprogramowanie wydobywcze zwykle umieszcza w coinbase, specjalnej pierwszej transakcji bloku przyznającej nagrodę za wydobycie. Ich zmiana wpływa na zbiorczy skrót transakcji zapisany w nagłówku bloku, dając nowe dane do poszukiwań. Oddzielne pole nonce w nagłówku nie zwiększa przy tym rozmiaru.

Nagłówek jest zwięzłym podsumowaniem danych bloku. Bit zapisuje zero albo jedynkę; osiem bitów tworzy bajt. Nagłówek zawiera między innymi pole nonce o długości 32 bitów, oferujące 2^32 wartości przy niezmienionej reszcie. Ponowne sprawdzenie tego samego nagłówka z tym samym nonce da ten sam hash, czyli ten sam wynik. Extranonce nie wydłuża tego pola: zmienia inne dane, z których powstaje nowy nagłówek. Alena może wyobrazić sobie nowe zadanie, dla którego da się ponownie przejść przez licznik. W praktyce w granicach reguł można zmieniać także inne części nagłówka. [1] [5]

Coinbase oznacza tutaj pierwszą transakcję każdego bloku, a nie giełdę. Zmiana jej extranonce zmienia zapis danych transakcji oraz TXID, obliczany na ich podstawie identyfikator. Przez drzewo stopniowo łączonych skrótów prowadzi od niego droga do Merkle root, zbiorczego skrótu transakcji zapisanego w nagłówku. Oprogramowanie musi przeliczyć odpowiednią gałąź. Pozostałe transakcje mogą zostać bez zmian, ale starego korzenia nie wolno po prostu zachować. Dzięki temu ciągowi obliczeń nowy nagłówek daje inne dane wejściowe do wydobycia. [1]

W prostym modelu pozostawmy resztę bez zmian i dopuśćmy dwa całkowicie swobodne bajty extranonce. Dają 2^16 wariantów; razem z 32-bitowym nonce powstaje 2^48 kombinacji wejściowych. To możliwe próby, a nie liczba znalezionych bloków. Alena nie dostaje łatwiejszego warunku ani pewności sukcesu w tej puli możliwości. Korzyść jest praktyczna: może szukać dalej. Dodanie wolnej przestrzeni samo w sobie nie przyspiesza też urządzenia, które musi rzeczywiście wykonać obliczenia. [1]

Miejsce na extranonce nie jest pustym formularzem bez zasad. BIP 34, konkretna reguła sieci Bitcoin, wymaga prawidłowo zakodowanej wysokości bloku, czyli jego pozycji w łańcuchu, na początku pola danych wejścia coinbase zwanego scriptSig. Limit 100 bajtów dotyczy całego coinbase scriptSig, nie tylko extranonce. Oprogramowanie musi zostawić miejsce na obowiązkowe dane i zachować poprawny format. Gdyby Alena je nadpisała, dalsze obliczenia szukałyby rozwiązania dla nieprawidłowego bloku. [3] [4]

Przy wspólnym wydobyciu w poolu warto, aby różne urządzenia przeszukiwały różne warianty. Stratum V2, protokół przekazywania zadań wydobywczych, wykorzystuje w tym celu również podział extranonce. Nadrzędny serwer, określany jako upstream, przydziela stały extranonce_prefix, czyli początkową część tych danych. Lokalny pośrednik może zarezerwować kolejną część dla swoich klientów, a resztę przekazać dalej, downstream. Kierunki są względne wobec danego połączenia. Przydzielony prefiks nie jest automatycznie obszarem, który końcowy górnik może zmieniać; jego stałość pomaga rozdzielić pracę uczestników. [2]

Na rozszerzonym kanale Stratum V2 komunikat SubmitSharesExtended przekazuje zmieniane bajty wraz z wynikiem. Coinbase jest składana w kolejności: coinbase_tx_prefix, extranonce_prefix, extranonce i coinbase_tx_suffix. Te nazwy oznaczają części danych wymienianych przez programy wydobywcze. Pole extranonce musi mieć uzgodnioną długość. Nawet jeśli krótszy zapis wygląda jak ta sama liczba, inny ciąg bajtów może tworzyć inną transakcję. Komputery porównują dokładne dane, nie ich przybliżoną ludzką interpretację. [2]

Standard Job w Stratum V2 to zadanie ze stałym Merkle root. Końcowe urządzenie może zmieniać wyłącznie dozwolone części pól version, nonce i nTime: wersję, licznik i czas nagłówka. Nie wysyła więc własnego extranonce tak jak kanał rozszerzony. Nadrzędne oprogramowanie może przygotować nową coinbase i nowy korzeń, a następnie dostarczyć kolejne zadanie. Alena może zatem nie znaleźć ustawienia extranonce na swoim urządzeniu, mimo że mechanizm działa w całym systemie. [2]

Wyobraźmy sobie, że nowy prefiks przychodzi podczas przetwarzania wyniku wcześniejszej pracy. SetExtranoncePrefix w Stratum V2 dotyczy zadań wysłanych później na danym kanale, czyli w odpowiedniej sesji wydobywczej. Wynik musi pozostać związany z właściwym job_id, identyfikatorem zadania, oraz przydzieloną mu przestrzenią. Wstawienie wszędzie najnowszego prefiksu mogłoby zmienić dane, z których powstał starszy wynik. Extranonce służy do tworzenia różnych prób i zachowania ich powiązań, a nie do późniejszego przepisywania zadań. [2]

Pełniejszy obraz uzyskasz, czytając to hasło razem z Nonce, Merkle Tree, Mining Share, Block Template, Bitcoin. Do tego hasła prowadzą również odsyłacze z ASIC Miner, Stratum V1, Stratum V2, Block Template.

DOC · 001Bitcoin Developer Guide — Mining and nonce spaceDokumentacja DOC · 002Stratum V2 — Extended extranonce and jobsSpecyfikacja DOC · 003BIP 34 — Height in coinbaseSpecyfikacja DOC · 004Bitcoin Developer Reference — Coinbase inputDokumentacja DOC · 005NIST — Binary data unitsDokumentacja
Zaktualizowano: Najpierw źródła · To nie jest porada inwestycyjna