23 / 736HDR

Block Header

nagłówek bloku

Niewielka część bloku, która łączy jego zawartość z wcześniejszą historią i pozwala sprawdzić pracę górnika.

Block Header to krótki zapis na początku bloku Bitcoina. Zawiera odcisk poprzedniego bloku, wspólny odcisk transakcji oraz dane potrzebne do weryfikacji Proof of Work. Same płatności znajdują się w innej części bloku.

Wyobraź sobie blok jako paczkę transakcji, a nagłówek jako dołączoną do niej metrykę. Nie ma w nim listy odbiorców ani kwot. Zamiast tego zawiera odciski kryptograficzne: krótkie wartości obliczane z danych, które pozwalają wykrywać ich zmiany. Jeden wskazuje poprzedni blok. Drugi, nazywany Merkle root, podsumowuje identyfikatory transakcji w tym bloku. Nagłówek wiąże więc konkretną zawartość z konkretnym miejscem w historii. Nie jest jednak pomniejszoną kopią transakcji: z odcisku nie można odczytać ich treści. [1] [4]

Górnik przygotowuje kandydata na blok i szuka odpowiedniego hasha, czyli odcisku interpretowanego jako liczba. Musi ona być mniejsza lub równa wyznaczonemu celowi. To poszukiwanie nazywa się Proof of Work: górnik zmienia dane i ponawia obliczenie, ponieważ nie da się po prostu przewidzieć właściwego wyniku. Najbardziej znaną zmienną jest nonce, pomocnicza liczba w nagłówku. Aby uzyskać więcej możliwości, górnik może zmienić dane szczególnej Coinbase Transaction, którą tworzy na początku bloku. Zmienia to również Merkle root i daje inny nagłówek. Pozostałe węzły mogą szybko powtórzyć obliczenie i sprawdzić wynik. [1] [3] [4]

Łańcuch nagłówków pozwala śledzić powiązania bloków i sprawdzać odpowiadającą im pracę bez pobierania wszystkich transakcji. Wyobraź sobie jednak blok z prawidłowym Proof of Work, w którym ktoś próbuje wydać cudze środki bez wymaganego podpisu. Kontrola samego nagłówka nie wykryje tego problemu. Dlatego Full Node sprawdza również transakcje, ich podpisy, dostępne niewydane wyjścia i dozwoloną nagrodę. Prawidłowy nagłówek nie gwarantuje zatem prawidłowości całego bloku. [2]

Pole nBits określa cel, który musi spełniać hash. Jest to zwięzłe kodowanie celu, a nie wartość „difficulty” wyświetlana w eksploratorze bloków. Węzeł sprawdza też, czy cel jest zgodny z regułami dla danego miejsca w łańcuchu. Górnik nie może również podać dowolnego czasu. Musi on być późniejszy niż mediana poprzednich 11 bloków, czyli środkowa wartość ich uporządkowanych czasów, i nie może wskazywać czasu zbyt odległego w przyszłości. Mimo to nie jest dokładnym czasem każdej płatności ani pomiarem długości wydobywania. [2] [3]

Kolejność i rozmiary pól są stałe: version zajmuje 4 bajty, hash poprzedniego nagłówka 32, Merkle root 32, time 4, nBits 4 i nonce 4. Razem to 80 bajtów, niezależnie od liczby transakcji. Identyfikator bloku powstaje przez dwukrotne zastosowanie SHA-256 do tak zapisanego nagłówka. Pola liczbowe stosują little-endian, czyli najmniej znaczący bajt jako pierwszy; hashe mają wewnętrzną kolejność bajtów inną niż zwyczajowy zapis identyfikatora. Aby samodzielnie odtworzyć obliczenie, nie wystarczy więc połączyć wartości widocznych w eksploratorze. [1] [4]

Pełniejszy obraz uzyskasz, czytając to hasło razem z Block, Proof of Work, Merkle Tree, Nonce. Do tego hasła prowadzą również odsyłacze z Block, Hash, SHA-256, Merkle Tree.

DOC · 001Bitcoin Core v29.0: header serializationŹródło pierwotne DOC · 002Bitcoin Core v29.0: header validationŹródło pierwotne DOC · 003Bitcoin Core v29.0: proof of workŹródło pierwotne DOC · 004Bitcoin Developer Reference: Block HeadersŹródło pierwotne
Zaktualizowano: Najpierw źródła · To nie jest porada inwestycyjna