Jak błąd zwrotu 10 ETH zamroził handel na THORChain na 10 sieciach
Najważniejsze informacje
- •Reorganizacja jednego bloku w Ethereum 31 października sprawiła, że pojedyncza wpłata 10 ETH do THORChain wygenerowała wypłaty 20 ETH, po tym jak zarówno zaksięgowany swap, jak i sama wpłata zostały zwrócone.
- •Każdy węzeł THORChain zarejestrował reorg, ale automatyczna weryfikacja wpłaty nie zdołała się zakończyć przed sfinalizowaniem obserwacji na sieci THORChain i wysłaniem zwrotu.
- •Automatyczny checker wypłacalności wstrzymał swapy ETH, operatorzy węzłów zatrzymali podpisywanie transakcji w ciągu około dwóch minut, a handel jako środek ostrożności wstrzymano na dziesięciu sieciach, w tym ATOM, BCH, BSC, BTC, DOGE, ETH, LTC, SOL, TRON i ZEC.
- •Odbiorca dobrowolnie zwrócił dodatkowe 10 ETH, ale THORChain ostrzegał, że złośliwy aktor ponownie używający nonce transakcji podczas reorgu mógłby otrzymać wypłatę z vaultów bez powodu zwrotu.
- •Wstrzymanie niezamierzenie opóźniło pranie funduszy z kradzieży 6,4 miliarda dolarów z Binance przypisanej północnokoreańskiej grupie TraderTraitor, a THORChain nie wyznaczył daty wznowienia, zauważając, że po majowym exploście o wartości około 10,7 miliona dolarów porównywalna naprawa i wznowienie zajęły ponad pięć tygodni.

Międzyłańcuchowy protokół płynności THORChain zamroził handel na dziesięciu sieciach blockchain po tym, jak reorganizacja jednego bloku w Ethereum spowodowała podwójną wypłatę z jego vaultów na pojedynczą wpłatę 10 ETH. Protokół pozwala użytkownikom wymieniać aktywa między połączonymi sieciami: wpłaty trafiają do vaultów, a operatorzy węzłów podpisują wypłaty je opuszczające. Sekwencję zdarzeń opisał w poście na X 1 listopada, podając, że użytkownik zwrócił dodatkowe 10 ETH, a deweloperzy pracują nad niezbędnymi zmianami.
Co usunął reorg
O 11:34 UTC 31 października Ethereum zastąpiło jeden z ostatnich bloków jego konkurencyjną wersją. Odrzucony blok zawierał wpłatę 10 ETH do vaultu THORChain, którą obserwatorzy protokołu widzieli i zaksięgowali już wcześniej.
Tak świeże bloki wciąż mogą być zastąpione. Ethereum uznaje blok za sfinalizowany dopiero po około dwóch epokach, czyli około 13 minutach, a w relacji THORChain nic nie wskazuje na zmianę sfinalizowanej historii. Awaria wydarzyła się wewnątrz THORChain, który zareagował na wpłatę, zanim Ethereum ją rozliczyło.
Nastąpiły dwie płatności. Swap powiązany z zaksięgowaną wpłatą nie osiągnął limitu cenowego, więc THORChain zwrócił 10 ETH. Następnie wpłata nadawcy na akceptowanej sieci Ethereum również została zwrócona. Do vaultu trafiła jedna wpłata 10 ETH, a opuściło go 20 ETH.
Własne ostrzeżenie THORChain pokazuje, jak jedna wpłata mogła zostać policzona dwukrotnie. Każde konto Ethereum numeruje swoje transakcje nonce. Gdy oryginalny transfer zniknął wraz ze swoim blokiem, ten nonce mógł zostać użyty ponownie na akceptowanej sieci. THORChain napisał, że podczas każdego zewnętrznego reorgu „złośliwy aktor może wykonać nową transakcję z tym samym nonce” i otrzymać wypłatę z jego vaultów.
Każdy węzeł widział reorg. Zwrot i tak został wypłacony.
Wykrycie nie było problemem. Według THORChain każdy węzeł zarejestrował reorg, ale automatyczna ponowna weryfikacja, która miała ustalić status wpłaty, nie zdołała się zakończyć, zanim THORChain sfinalizował obserwację na własnej sieci. Dokumentacja Bifrost opisuje, jak odwracane są obserwacje po zniknięciu zewnętrznej transakcji. 31 października to odwrócenie nie nastąpiło przed wypłatą zwrotu.
Post nie wyjaśnia, dlaczego ponowna weryfikacja nie zdążyła ani co zmieni poprawka. Zwrot pokrył tę wypłatę tylko dlatego, że odbiorca zdecydował się go zwrócić. Jak opisał flaw THORChain, protokół wypłaca każdemu, kto go uruchomi, a ktoś timingujący transakcje wokół przyszłego reorgu nie miałby powodu niczego odsyłać.
Dlaczego błąd o wartości 10 ETH zamroził dziesięć sieci
Automatyczny checker wypłacalności THORChain wykrył brak i wstrzymał swapy ETH. W ciągu około dwóch minut operatorzy węzłów zatrzymali również podpisywanie transakcji ETH, co blokuje wypłaty z vaultów. Następnie jako środek ostrożności wstrzymali handel na innych sieciach, ponieważ ostrzeżenie o nonce obejmuje reorgy na dowolnej połączonej sieci, nie tylko Ethereum.
Stan usług THORChain wg posta z 1 listopada:
- Handel wstrzymany: ATOM, BCH, BSC, BTC, DOGE, ETH, LTC, SOL, TRON, ZEC
- Handel aktywny: AVAX, BASE, RUNE, XRPL
- Wypłaty wychodzące: Dane statusowe z 31 października pokazywały, że podpisywanie było nadal włączone na większości wstrzymanych sieci, więc oczekujące wypłaty mogły opuszczać vaulty, podczas gdy nowe swapy pozostały zablokowane.
Status handlu wg posta THORChain z 1 listopada; status podpisywania wg API statusowego THORChain, jak zgłoszono 31 października.
Lista już raz się zmieniła. Wieczorem 31 października The Defiant poinformował, że API statusowe THORChain pokazywało wstrzymany handel na 12 z 13 zewnętrznych sieci. Do posta z 1 listopada trzy z nich zostały ponownie włączone. THORChain nie wyjaśnił, dlaczego te trzy jako pierwsze.
Nic z tego nie zatrzymuje sieci bazowych. Bitcoin, Ethereum i inne sieci nadal produkują bloki; wstrzymania ograniczają tylko to, co THORChain przetworzy na każdej z nich.
Czytany w ten sposób incydent pokazuje działanie zabezpieczeń. Checker zadziałał bez udziału człowieka, wypłaty zatrzymano w ciągu minut, a ekspozycja pozostała na poziomie 10 ETH. W maju ten sam mechanizm musiał wstrzymać handel i podpisywanie po tym, jak exploit opróżnił vault o około 10,7 miliona dolarów. Czego checker nie potrafi, to naprawić logikę obserwacji — dlatego wstrzymania się rozszerzyły zamiast zelżeć po uzupełnieniu vaultu.
Trzy głosy, by zatrzymać, cztery, by przegłosować
Takie wstrzymania to ustawienia operacyjne, a dokumentacja zarządzania THORChain pozwala niewielkiej grupie węzłów je zmieniać. Ustawienie wymaga co najmniej trzech głosów aktywnych węzłów i musi uzyskać więcej głosów niż każda konkurencyjna wartość; remis pozostawia bieżące ustawienie.
Ten próg był już publicznie testowany. Podczas lutowania 2025 prania funduszy skradzionych z Bybit trzech walidatorów głosowało za wstrzymaniem handlu ETH, a inni operatorzy węzłów niemal natychmiast odwrócili głosowanie. Relacja THORChain z 1 listopada zauważa też, że wstrzymanie sieci nie daje węzłom kontroli nad aktywami vaultów. Zatrzymanie aktywności i podpisywanie transferów to odrębne uprawnienia.
Wstrzymanie, którego THORChain nie użył przeciw praczom
28 września, w obliczu wezwań do zamrożenia funduszy z hacku Bitget, THORChain napisał na X, że wstrzymanie sieci to awaryjny środek bezpieczeństwa mający chronić protokół, i odmówił jego użycia wobec tych funduszy. Błąd reorgu jest dokładnie takim stanem awaryjnym, a wywołane przez niego wstrzymanie i tak zatrzymało praczów.
Chainalysis, która przypisuje kradzież 6,4 miliarda dolarów z Binance północnokoreańskiej grupie TraderTraitor, powiedziała 1 listopada, że THORChain „niezamierzenie opóźnił pranie znacznej kwoty funduszy skradzionych z Binance”. Opóźnienie wynikało z tej samej cechy, która irytuje zwykłych użytkowników: wstrzymana sieć nie przetwarza nikczych swapów. Relacja Coindoo o prośbie FBI do operatorów infrastruktury krypto obejmuje wysiłki na rzecz bezpośredniego zablokowania tych transakcji.
Co musi się wydarzyć, zanim swapy wrócą
Dokumentacja deweloperska THORChain odradza wysyłanie funduszy do wstrzymanej sieci, ponieważ transakcje mogą pozostać nieprzetworzone do zniesienia wstrzymania. Post z 1 listopada nie podał daty wznowienia. Operatorzy węzłów ponownie włączą każdą sieć, gdy uznają ją za bezpieczną.
Trzy rzeczy pokazałyby, że błąd jest zamknięty, a nie wstrzymany: opublikowanie przez THORChain zmiany w obsłudze zewnętrznych reorgów, aktualizacja przez operatorów węzłów oraz powrót podpisywania ETH wraz z handlem na wstrzymanych sieciach. Po majowym exploście ta droga od awaryjnej poprawki do pełnej naprawy i wznowienia handlu zajęła ponad pięć tygodni. To punkt odniesienia dla procesu, nie harmonogram dla tego przypadku.
Zwrócone 10 ETH rozliczyło wypłatę z 31 października. Ponowne włączenie podpisywania ETH będzie pierwszym publicznym sygnałem, że operatorzy ufają THORChain w obsłudze kolejnego reorgu.