46 / 736STALE

Stale Block

Poprawny blok poza głównym łańcuchem

Stale Block to poprawny blok Bitcoina, który pozostał w bocznej gałęzi. Nie wymaga to oszustwa: dwóch górników może znaleźć bloki niemal jednocześnie, po czym sieć kontynuuje tylko jedną z tych gałęzi.

Stale Block spełnia reguły Bitcoina, lecz nie należy do aktywnego łańcucha — historii, według której dany węzeł, czyli komputer sprawdzający bloki i transakcje, liczy potwierdzenia i ustala dostępne środki. O wyborze decyduje praca wydobywcza zgromadzona przez poprawne gałęzie. Dla odbiorcy płatności może to oznaczać utratę potwierdzenia i ponowne oczekiwanie, a nie automatyczną utratę bitcoinów.

Wyobraźmy sobie górników Annę i Pavla. Oboje pracują nad następcą tego samego ostatniego bloku. Anna znajduje nowy blok, ale zanim wiadomość dotrze do Pavla, on znajduje własny. Oba mogą być poprawne, choć zawierają nieco inne zestawy transakcji. Węzły sprawdzające bloki i transakcje dowiadują się o nich w różnej kolejności. Przez chwilę podążają więc za różnymi końcami łańcucha. Gdy jedna poprawna gałąź zgromadzi więcej pracy, a węzły ją zweryfikują, przechodzą na nią. Blok pozostawiony w porzuconej gałęzi nazywamy Stale Block. [1]

Bitcoin potrzebuje jednej historii, aby tych samych środków nie dało się skutecznie wydać dwa razy. Nie wystarczy więc stwierdzić, że każdy z dwóch bloków osobno spełnia reguły. Węzeł musi także wybrać poprawną gałąź, którą będzie śledził. Poprawność bloku i wybór łańcucha to dwie różne kwestie. Stale Block może mieć prawidłowy Proof of Work, czyli dowód pracy wydobywczej, poprawne transakcje i podpisy, a mimo to nie należeć do wybranej historii. Nie oznacza to, że jest wadliwy lub oszukańczy. [1] [2]

Załóżmy, że blok Pavla zawierał twoją płatność, a portfel pokazał jedno potwierdzenie. Jeśli wygra gałąź Anny, wynik zależy od jej zawartości. Ta sama transakcja może znajdować się również w niej i pozostać potwierdzona. W przeciwnym razie może wrócić do Mempoolu, lokalnej listy niepotwierdzonych transakcji węzła, i poczekać na kolejny blok. Powrót nie jest jednak pewny: transakcja musi nadal nadawać się do przyjęcia i nie może przeczyć nowej historii. Jeśli ta zawiera już inną transakcję wydającą te same środki, pierwotna płatność nie może być w niej jednocześnie potwierdzona. [2]

Zwykła płatność różni się od Coinbase Transaction, pierwszej transakcji w bloku, która przyznaje nagrodę górnikowi. Obejmuje ona nowo wyemitowane bitcoiny i opłaty transakcyjne. Jeśli blok Pavla pozostanie poza aktywnym łańcuchem, jego nagrody coinbase nie da się wydać w tej historii. Nie trafia ona do Mempoolu jak zwykła płatność. Zużytej energii elektrycznej Pavel jednak nie odzyska. Dlatego górnikom zależy zarówno na znalezieniu bloku, jak i na szybkim poinformowaniu o nim innych. [1] [2]

Artykuły i eksploratory czasem nazywają Stale Block również Orphan Block. Nazwy bywają używane zamiennie, ale ich dokładniejsze znaczenie jest różne. Orphan Block to blok, którego poprzednika węzeł jeszcze nie zna, więc nie może go jeszcze dołączyć do łańcucha. Stale Block może mieć znanego poprzednika i być poprawny; po prostu znajduje się poza wybraną gałęzią. Słowo orphan stosuje się także do transakcji, gdy węzłowi brakuje wcześniejszych transakcji potrzebnych do sprawdzenia ich wejść. Warto więc ustalić, które znaczenie przyjmuje dane źródło. [1]

Jeśli węzeł korzystał już z bloku Pavla, a następnie zastępuje go gałęzią Anny, wykonuje Reorg: zmienia część historii uznawanej za aktywną. Stąd może zmienić się liczba potwierdzeń w portfelu. Krótki wyścig z naszego przykładu jest możliwy także przy uczciwym wydobyciu. Atakujący może jednak próbować wykorzystać zmianę historii do Double Spend, czyli przepchnięcia innej płatności z tych samych środków. Sam Stale Block nie dowodzi takiego zamiaru. Trzeba przeanalizować przebieg zdarzeń i ewentualne sprzeczne transakcje. [1] [2]

Wiadomość o nowym bloku nie dociera do całego świata natychmiast. Im dłużej trwa jej rozchodzenie się, tym dłużej inni górnicy mogą nieświadomie pracować nad tym samym poprzednikiem. Znaczenie mają szybkość transmisji, połączenia między węzłami oraz czas propagacji w stosunku do odstępu między blokami. Stale Rate to udział znalezionych poprawnych bloków, które nie pozostają w aktywnym łańcuchu. Nie jest to stały procent określony regułami Bitcoina. Porównując wyniki, trzeba uwzględnić również okres pomiaru i bloki, które obserwator rzeczywiście zauważył. [1] [3]

Specyfikacja BIP152 opisuje Compact Block Relay. Węzeł często zna już z Mempoolu większość transakcji nowego bloku, więc nie trzeba ponownie wysyłać ich pełnej treści. Krótkie identyfikatory pozwalają złożyć blok z posiadanych danych, a brakujące transakcje pobrać od innych węzłów. To ogranicza przesyłane dane i w sprzyjających warunkach pozwala szybciej poznać nowy blok. Usprawnia transmisję, lecz nie zmienia reguł poprawności. Nie eliminuje całkowicie możliwości niemal równoczesnego znalezienia dwóch bloków. [3]

Praca zgromadzona przez gałąź nosi techniczną nazwę chainwork. Nie jest to pomiar rzeczywiście zużytej energii ani głosowanie liczbą komputerów. Każdy blok wnosi wartość wynikającą z trudności jego Proof of Work, czyli dowodu pracy wydobywczej. Dlatego „wygrywa dłuższy łańcuch” jest mniej precyzyjne niż „wygrywa poprawna gałąź z większym chainwork”. Węzeł musi sprawdzić przestrzeganie reguł: nawet ogromna praca nie czyni niepoprawnych transakcji poprawnymi. Określenie stale opisuje też relację bloku do historii wybranej w danym momencie przez konkretny węzeł. [1] [2]

Eksplorator bloków daje przydatny przegląd, ale pokazuje perspektywę swojej usługi. Własny Full Node, czyli węzeł sprawdzający reguły, pozwala przyjrzeć się historii zaakceptowanej samodzielnie. Jeśli węzeł przechowuje dane bloku, polecenie getblock w Bitcoin Core zwraca confirmations: -1 dla bloku poza aktywnym łańcuchem. Gdy danych brakuje, na przykład usunięto je w trybie pruning, aby oszczędzić miejsce, polecenie zwróci błąd. Sam ten wynik nie dowodzi, że blok przeszedł wszystkie kontrole poprawności. Aby go dokładnie umiejscowić, sprawdź też hash — identyfikator bloku — jego poprzednika, wysokość (liczbę bloków przed nim) i chainwork; los konkretnej płatności zbadaj osobno. Dwa bloki mogą mieć tę samą wysokość, lecz różne hashe. [4] [5]

Pełniejszy obraz uzyskasz, czytając to hasło razem z Reorg, Potwierdzenie, Block, Block Header, Proof of Work, Wydobywanie. Do tego hasła prowadzą również odsyłacze z Reorg, Mining Pool, Hashrate, Selfish Mining.

DOC · 001Bitcoin Developer Guide — Block ChainDokumentacja DOC · 002Bitcoin Core v29.0 — chain activation and mempool reconciliationŹródło pierwotne DOC · 003BIP 152 — Compact Block RelaySpecyfikacja DOC · 004Bitcoin Core v29.0 — getblockDokumentacja DOC · 005Bitcoin Core v29.0 — block RPC implementationŹródło pierwotne
Zaktualizowano: Najpierw źródła · To nie jest porada inwestycyjna