
Kiedy łańcuch przepisuje sam siebie: błąd konsensusu Ravencoina i ile naprawdę warte jest potwierdzenie
Większość incydentów w kryptowalutach dotyczy kluczy. Ktoś wyłudza frazę seed, kontrakt ma błąd reentrancy, giełda traci gorący portfel. Księga pozostaje uczciwa; po prostu konkretny zbiór monet zmienia właściciela wbrew jego woli.
Sierpniowy incydent Ravencoina należał do innej i rzadszej kategorii. Nikt nie tknął żadnych kluczy. Rozpadła się sama księga.
Co się stało
7 sierpnia 2026 roku o 15:44 UTC, na wysokości bloku 4 487 776, sieć przyjęła blok, który powinien być niemożliwy. Potem pojawiły się kolejne. W zbadanym odcinku 2089 bloków 96 było nieprawidłowych. Lukę zademonstrowano publicznie 11 sierpnia, cztery dni po pierwszym wykorzystanym bloku — co znaczy, że łańcuch po cichu produkował podrobione bloki przez prawie tydzień, zanim ktokolwiek to ogłosił.
RVN spadł o około 20%, do mniej więcej 0,0027 dolara. Upbit i Bitget wstrzymały wpłaty i wypłaty. Projekt Ravencoin wezwał giełdy, eksploratory i operatorów węzłów do natychmiastowej aktualizacji, a każdą transakcję potwierdzoną po bloku 4 487 775 oznaczył jako potencjalnie odwracalną.
Przy tym ostatnim zdaniu warto się zatrzymać. Nie „część transakcji została cofnięta". Wszystkie transakcje przez trzy dni były tymczasowe.
Błąd: liczba, której nikt nie sprawdzał
Ravencoin kopie za pomocą KAWPOW, pamięciożernego algorytmu dowodu pracy wywodzącego się z ProgPoW. Pamięciożerność jest tu całym sensem: praca zależy od dużego zbioru danych, który trzeba trzymać w pamięci RAM, i właśnie to czyni układy ASIC nieopłacalnymi, a kopanie dostępnym dla kart graficznych. Ten zbiór danych jest okresowo generowany od nowa, a to, którego potrzebujesz, wynika z wysokości bloku.
Nagłówek bloku zawiera pole nHeight, deklarujące, w którym miejscu łańcucha blok się znajduje. Węzły weryfikowały dowód pracy względem wysokości, którą blok sam sobie przypisywał. Nigdy nie sprawdzały tej deklaracji względem rzeczywistego położenia bloku w łańcuchu.
Można było więc kłamać. Deklarujesz wysokość z początków łańcucha, dostajesz mały zbiór danych, wykonujesz ułamek pracy i produkujesz blok, który podatny węzeł chętnie przyjmie jako prawidłowy. Pamięciożerność, która czyni kopanie Ravencoina kosztownym, stawała się opcjonalna, jeśli po prostu twierdziłeś, że kopiesz inny blok niż w rzeczywistości. Nieprawidłowe bloki stały się, słowami samego projektu, dramatycznie tańsze w produkcji niż uczciwe.
Trudno o bardziej fundamentalny błąd konsensusu. Dowód pracy to mechanizm, którym blockchain przekształca prąd w ostateczność. Jeśli dowód da się podrobić tanio, nie ma ostateczności — jest tylko jej pozór.
Lekarstwem była reorganizacja
Teraz część, która z zewnątrz wygląda alarmująco, a w rzeczywistości jest poprawna.
2Miners i RavenMiner, które razem kontrolują większość mocy obliczeniowej sieci, ogłosiły, że kopią łańcuch wykluczający wykorzystaną gałąź od bloku 4 487 776. Załatane oprogramowanie węzła (2Miners wydały wersję 4.6.1.1-hf1) odrzuca bloki, których zadeklarowana wysokość nie zgadza się z prawdziwą, i zapisuje na stałe blok 4 487 775 jako punkt kontrolny — granicę, za którą stara, zatruta historia nie może już zostać przyjęta.
Efektem była reorganizacja łańcucha o głębokości około trzech dni. Trzy dni bloków odrzuconych i zastąpionych.
Głęboka reorganizacja jest zwykle objawem ataku. Tutaj była lekarstwem. Wykorzystana gałąź nie była prawowitą historią, którą ktoś przepisał; była już nieprawidłowa, a sieć postanowiła przestać udawać, że jest inaczej.
Szew wciąż widać dziś w łańcuchu. Blok 4 487 775 wykopano 7 sierpnia o 15:43:57 UTC. Blok 4 487 776 — ten uczciwy, z odzyskanego łańcucha — nosi stempel 14:09:42 UTC z 10 sierpnia. Dwa dni, dwadzieścia dwie godziny i dwadzieścia sześć minut między kolejnymi blokami w łańcuchu celującym w jedną minutę. Ta luka to tkanka bliznowata.
Co to znaczyło, jeśli trzymałeś RVN
Jeśli twoje monety leżały w portfelu, który kontrolujesz, i nie wykonywałeś wtedy transakcji, nic ci się nie stało. Klucze nigdy nie były problemem. Salda sprzed bloku 4 487 775 nigdy nie były kwestionowane.
Jeśli jednak transakcjonowałeś w tym oknie, twoja transakcja musiała zostać ponownie wkopana w odzyskany łańcuch, żeby przetrwać. Zwykłe płatności na ogół przetrwały — były to poprawne transakcje, które po prostu mieszkały w odrzuconych blokach i wróciły do mempoola, by potwierdzić się jeszcze raz. Reorganizacji nie przetrwa natomiast wszystko, co opierało się na trwałości odrzuconej historii. Klasycznym przypadkiem jest wpłata na giełdę: monety przychodzą, zostają zaksięgowane, sprzedane albo wypłacone, a potem okazuje się, że wpłaty nigdy nie było. Właśnie dlatego wstrzymanie wpłat i wypłat było słuszną decyzją i dlatego giełdy, które zrobiły to szybko, chroniły siebie i swoich użytkowników, a nie panikowały. Zatrzymanie się to tryb awarii, który giełdy mogą i powinny zaabsorbować, gdy alternatywą jest księgowanie pieniędzy, które później wyparują.
Co potwierdzenie naprawdę obiecuje
Większość portfeli, nasz też, pokazuje liczbę potwierdzeń i pozwala ci wyprowadzić z niej poczucie bezpieczeństwa. Warto być precyzyjnym co do znaczenia tej liczby, bo to właśnie przy takich incydentach nieprecyzyjność gryzie.
Potwierdzenie nie jest gwarancją. Jest stwierdzeniem ekonomicznym: przepisanie historii od tego punktu wymagałoby powtórzenia takiej ilości dowodu pracy, a to kosztowałoby więcej, niż warta jest płatność. Sześć potwierdzeń w Bitcoinie to reguła kciuka dotycząca kosztu, nie kryptograficzny dowód trwałości.
W tym stwierdzeniu ukryte jest założenie: że produkowanie bloków jest drogie. Błąd Ravencoina usunął to założenie. Kiedy nieprawidłowe bloki nie kosztują prawie nic, „tyle a tyle potwierdzeń" przestaje mierzyć cokolwiek. Liczba na ekranie dalej rosła; to, co zliczała, po cichu straciło sens.
Uczciwy wniosek nie brzmi „potwierdzenia są bezużyteczne". Brzmi tak, że licznik potwierdzeń jest stwierdzeniem o zdrowiu reguł konsensusu danego łańcucha i dziedziczy każdą ich słabość. Dostosuj cierpliwość do stawki, a trwający incydent konsensusu traktuj jako powód, by całkowicie przestać transakcjonować, a nie by czekać na większą liczbę.
Gdzie stało SSP
Prowadzimy własną infrastrukturę Ravencoina, zamiast odczytywać salda z cudzego API, co sprawia, że pytanie „czy SSP jest na właściwym łańcuchu?" ma odpowiedź sprawdzalną, a nie uspokajającą.
Nasz węzeł działa na Ravencoinie 4.8.0 — daleko za twardym forkiem — i w chwili pisania stoi na wysokości 4 522 205 odzyskanego łańcucha. Obie strony szwu zgadzają się dokładnie z łańcuchem referencyjnym:
- 4 487 775 →
000000000002d64509e06e76ddbbe418c725291687ec62b41ecfc40386a091fd - 4 487 776 →
0000000000042bb50281ebb2f68d3f9143980b041178849015d95b067d52a841
Te same skróty co w oficjalnym eksploratorze Ravencoina, ta sama trzydniowa luka. Od użytkowników SSP niczego nie wymagano, a Ravencoin w SSP działa dokładnie tak jak wcześniej.
Uczciwe granice
Piszemy te teksty, żeby wyjaśnić, przed czym chroni nasza architektura, więc liczy się jasność co do tego, przed czym nie chroni.
Multisig dwa-z-dwóch chroni stronę podpisu. Oznacza, że żadne pojedyncze przejęte urządzenie nie ruszy twoich monet, że każda płatność jest zatwierdzana dwukrotnie na dwóch niezależnych urządzeniach i że złodziej z twoim laptopem nie ma nic. Te własności utrzymały się przez cały incydent i są własnościami, które liczą się w zdecydowanej większości sposobów, w jakie ludzie tracą kryptowaluty.
Żadna z nich nie pomaga przeciwko reorganizacji łańcucha. Nie pomaga też portfel sprzętowy, podpisujący odcięty od sieci, hasło dodatkowe ani kworum multisig dowolnego rozmiaru. Awarie konsensusu leżą pod tym wszystkim — są własnością sieci, nie twojego przechowywania. Kto twierdzi, że jego portfel chroni cię przed złym blokiem, coś ci sprzedaje.
To, co portfel może uczciwie zaoferować, brzmi tak: prowadzić prawdziwą infrastrukturę węzłów, utrzymywać ją zaktualizowaną i mówić przejrzyście, za którym łańcuchem podąża. To zobowiązanie do utrzymania, nie kryptograficzna gwarancja — i to jest właściwy rozmiar obietnicy.
Druga rzecz warta zabrania z sierpnia to przypomnienie, gdzie ryzyko naprawdę mieszka. Błąd Ravencoina siedział w kodzie latami, zanim ktokolwiek go wykorzystał, i to w najmniej efektownym możliwym miejscu: w polu nagłówka, o którym wszyscy zakładali, że sprawdza je ktoś inny. Awaria entropii Coldcarda miała dokładnie ten sam kształt — małą, nudną, niezbadaną linijkę kodu, niewidoczną z zewnątrz, dźwigającą wszystko, co nad nią stało.
To są błędy, które bolą. Nie egzotyczne ataki kryptograficzne, tylko założenie, do którego nikt nie napisał testu.


