BHP dla firm

Nonce w Ethereum – czym jest i dlaczego przez błędną kolejność transakcji przelew kryptowaluty może utknąć?

Jerzy Biernacki
28.08.2026

Przelew ETH lub tokenów w sieci Ethereum zazwyczaj wydaje się prostą operacją: użytkownik wpisuje adres odbiorcy, określa kwotę, zatwierdza transakcję w portfelu i czeka na jej uwzględnienie w blockchainie. W tle odbywa się jednak znacznie więcej. Jednym z elementów każdej transakcji wysyłanej z typowego konta użytkownika jest nonce – licznik, który określa kolejność operacji wykonywanych z danego adresu. Na co dzień większość użytkowników nawet go nie zauważa, ponieważ portfele ustalają jego wartość automatycznie. Problem może pojawić się wtedy, gdy jedna z transakcji utknie, kilka operacji zostanie wysłanych niemal jednocześnie albo użytkownik ręcznie zmieni parametry transakcji.

Czym właściwie jest nonce?

W przypadku konta kontrolowanego przez użytkownika nonce jest licznikiem związanym z liczbą wykonywanych z niego transakcji. Każda kolejna operacja otrzymuje następną wartość. Jeżeli konto ma wykonać transakcję z nonce 25, kolejna może otrzymać nonce 26, następna 27 i tak dalej.

Nie jest to przypadkowy numer i nie służy jedynie do identyfikowania transakcji. Ma znaczenie dla prawidłowej kolejności zmian dokonywanych przez konto w sieci Ethereum. Dla danego konta tylko jedna transakcja z określoną wartością nonce może zostać ostatecznie wykonana.

Mechanizm ten chroni również przed ponownym wykonaniem tej samej podpisanej transakcji. Gdy operacja z określonym nonce została już uwzględniona w blockchainie, konto przechodzi do kolejnej wartości licznika.

Dlaczego transakcje muszą być wykonywane po kolei?

Wyobraźmy sobie, że użytkownik wysłał trzy operacje. Pierwsza ma nonce 100, druga 101, a trzecia 102. Jeżeli transakcja numer 100 nie może zostać jeszcze wykonana, kolejne operacje nie mogą po prostu jej ominąć i zmienić stanu konta w odwrotnej kolejności.

Transakcja z nonce 101 może więc czekać na możliwość wykonania transakcji 100. Podobnie transakcja 102 może oczekiwać na poprzednie operacje.

W praktyce może wyglądać to dość dziwnie. Użytkownik wysyła pierwszą płatność i widzi status oczekujący. Następnie wykonuje drugą operację z wyższą opłatą, lecz ona także nie zostaje szybko potwierdzona. Powodem nie musi być problem z drugą transakcją. Może ona po prostu czekać na wcześniejszą operację posiadającą niższy nonce.

Skąd bierze się „dziura” w nonce?

Typowe portfele kryptowalutowe automatycznie dobierają odpowiedni nonce i przy zwykłym korzystaniu użytkownik nie musi się nim zajmować. Problemy mogą jednak pojawić się w bardziej nietypowych sytuacjach.

Jedną z nich jest wysyłanie wielu transakcji w bardzo krótkim czasie. Inną – korzystanie równocześnie z kilku aplikacji lub narzędzi obsługujących ten sam adres. Ryzyko rośnie również wtedy, gdy użytkownik ręcznie ustawia nonce albo korzysta z własnego oprogramowania do tworzenia transakcji.

Może wtedy dojść do sytuacji, w której do sieci trafiają operacje z nonce 50, 52 i 53, podczas gdy brakuje transakcji numer 51. Dopóki wymagany stan licznika nie zostanie osiągnięty, operacje z późniejszymi numerami nie mogą zostać normalnie wykonane.

W klientach Ethereum transakcje mogą być z tego powodu traktowane jako oczekujące albo kolejkowane. Z punktu widzenia zwykłego użytkownika wszystkie mogą jednak wyglądać po prostu jak transakcje, które „utknęły”.

Nonce to jednak niejedyna przyczyna oczekiwania

Nie każda długo oczekująca transakcja oznacza problem z kolejnością. Bardzo częstą przyczyną jest wysokość opłaty transakcyjnej.

Współczesne transakcje Ethereum mogą określać między innymi maksymalną opłatę za jednostkę gas oraz maksymalną opłatę priorytetową. Sieć posiada również zmieniającą się opłatę bazową. Jeżeli parametry ustawione przy wysyłaniu transakcji okażą się zbyt niskie w stosunku do bieżących warunków, operacja może przez pewien czas pozostawać poza blokami.

Problem staje się szczególnie widoczny, gdy użytkownik wysłał taką transakcję, a chwilę później rozpoczął następne. Nawet jeśli późniejsze operacje mają atrakcyjniejsze parametry opłat, nadal obowiązuje kolejność wynikająca z nonce danego konta.

W efekcie jedna źle skonfigurowana transakcja może stworzyć coś w rodzaju korka dla kolejnych operacji wysyłanych z tego samego adresu.

Co oznacza „pending”, a co „queued”?

W oprogramowaniu obsługującym Ethereum można spotkać rozróżnienie transakcji na oczekujące i kolejkowane. Szczegóły prezentacji zależą od używanego klienta, portfela czy eksploratora blockchain.

W uproszczeniu transakcja oczekująca może być gotowa do wykonania pod względem kolejności nonce, ale nadal czekać na uwzględnienie w bloku. Transakcja kolejkowana może natomiast posiadać nonce, którego nie da się jeszcze wykorzystać, ponieważ wcześniej musi zostać wykonana inna operacja z tego samego konta.

To właśnie dlatego analizując problem, warto patrzeć nie tylko na jedną transakcję, ale na całą serię ostatnich operacji wysłanych z danego adresu.

Jak sprawdzić, która transakcja blokuje pozostałe?

Podstawowym narzędziem jest eksplorator blockchain pozwalający przejrzeć historię konkretnego adresu oraz status transakcji. W portfelach posiadających bardziej zaawansowane funkcje można również znaleźć informacje o nonce.

Jeżeli kilka transakcji pozostaje niepotwierdzonych, trzeba ustalić, która z nich posiada najniższy niewykonany nonce. To ona jest najważniejsza z punktu widzenia dalszej kolejki.

Nie należy zaczynać od przypadkowego zwiększania opłat wszystkich późniejszych operacji. Jeżeli problemem jest pierwsza transakcja w kolejności, podnoszenie parametrów transakcji z kolejnymi nonce może nie rozwiązać podstawowego problemu.

Na czym polega przyspieszenie transakcji?

Popularna funkcja „Speed Up” dostępna w portfelach nie oznacza magicznego przyspieszenia istniejącej operacji zapisanej już w blockchainie. Dopóki transakcja nie została uwzględniona w bloku, portfel może przygotować konkurencyjną operację z tym samym nonce, ale z korzystniejszymi parametrami opłat.

Jeżeli taka transakcja zostanie zaakceptowana i wykonana jako pierwsza, wykorzystuje dany nonce. Pierwotna operacja nie może później zostać wykonana jako kolejna transakcja z tym samym numerem.

Dokładne wymagania dotyczące zastąpienia transakcji zależą między innymi od oprogramowania klienta i zasad stosowanych przez pule transakcji. Nie należy więc przyjmować jednej procentowej wartości zwiększenia opłaty jako uniwersalnej zasady całej sieci Ethereum. Najbezpieczniej korzystać z funkcji przyspieszenia oferowanej przez używany portfel, ponieważ powinna ona odpowiednio przygotować parametry nowej operacji.

Czy można anulować transakcję Ethereum?

W blockchainie nie istnieje odpowiednik przycisku cofającego transakcję, która została już ostatecznie uwzględniona w bloku. Po wykonaniu operacji nie można po prostu nakazać sieci jej usunięcia.

Inaczej wygląda sytuacja transakcji, która nadal oczekuje. Portfele mogą oferować funkcję określaną jako anulowanie. Technicznie często polega ona na przygotowaniu nowej transakcji z tym samym nonce i odpowiednio wyższą opłatą, przykładowo transakcji przesyłającej zerową wartość na własny adres.

Jeżeli nowa operacja zostanie wykonana jako pierwsza, zajmie nonce oczekującej transakcji i pierwotna operacja nie będzie mogła zostać później wykonana z tego samego konta jako odrębna transakcja.

Nie jest to jednak metoda pozbawiona ryzyka. Dopóki jedna z konkurujących operacji nie zostanie rzeczywiście uwzględniona w blockchainie, użytkownik powinien zachować ostrożność. Nie należy traktować samego kliknięcia funkcji „Cancel” jako dowodu, że pierwotna operacja została już nieodwracalnie unieważniona.

Co się dzieje z opłatą za transakcję, która tylko czeka?

Samo przesłanie podpisanej transakcji do sieci i jej obecność w puli transakcji nie oznacza jeszcze pobrania opłaty za jej wykonanie w taki sposób, jak po uwzględnieniu jej w bloku.

Opłata związana jest z wykonaniem transakcji w blockchainie. Dlatego transakcja może przez pewien czas widnieć jako oczekująca, a użytkownik nadal ma możliwość podjęcia działań zmierzających do jej zastąpienia.

Inaczej wygląda sytuacja operacji, która została wykonana, ale zakończyła się niepowodzeniem podczas realizacji kodu smart kontraktu. Taka transakcja może zostać zapisana w blockchainie jako nieudana, a zużyty gas nie jest z tego powodu automatycznie zwracany. Jest to jednak inny przypadek niż transakcja, która nigdy nie została jeszcze uwzględniona w bloku.

Czy problem nonce dotyczy również tokenów?

Tak. Przesłanie tokena działającego w sieci Ethereum jest zazwyczaj wywołaniem odpowiedniego smart kontraktu. Z punktu widzenia konta użytkownika nadal jest to transakcja wysyłana z jego adresu i posiadająca nonce.

Dlatego wcześniejsza oczekująca transakcja ETH może blokować późniejszy transfer tokena, a oczekujące wywołanie smart kontraktu może z kolei wpływać na kolejne operacje z tego samego konta.

Użytkownik może więc odnieść wrażenie, że problem dotyczy konkretnego tokena albo zdecentralizowanej aplikacji, podczas gdy rzeczywistą przyczyną jest wcześniejsza transakcja z tego samego adresu.

Jak ograniczyć ryzyko zablokowania kolejnych operacji?

Przy zwykłym korzystaniu z Ethereum najlepiej pozwolić sprawdzonemu portfelowi automatycznie zarządzać wartościami nonce. Ręczna zmiana tego parametru ma sens przede wszystkim dla użytkowników, którzy rozumieją konsekwencje takiej operacji.

Jeżeli jedna transakcja przez dłuższy czas pozostaje oczekująca, przed rozpoczęciem wielu następnych operacji warto sprawdzić jej status. Szczególnej ostrożności wymaga równoczesne korzystanie z kilku aplikacji, własnych skryptów albo narzędzi podpisujących transakcje z tego samego adresu.

Nie należy również bez potrzeby resetować nonce, powielać transakcji z przypadkowymi wartościami ani wielokrotnie zwiększać opłat bez ustalenia, która operacja rzeczywiście znajduje się na początku kolejki.

Mały licznik o dużym znaczeniu

Nonce jest jednym z tych elementów Ethereum, którego większość użytkowników nie zauważa, dopóki wszystko działa prawidłowo. Jego rola jest jednak fundamentalna. Ustala kolejność operacji wykonywanych z danego konta i powoduje, że jednej wartości nonce nie można wykorzystać do wykonania kilku niezależnych transakcji.

To właśnie dlatego jedna oczekująca operacja może zatrzymać następne. Jeżeli transakcja nie została uwzględniona w bloku z powodu zbyt niskich opłat albo wystąpiła luka w kolejności nonce, kolejne operacje mogą czekać mimo poprawnych parametrów.

W takiej sytuacji najważniejsze jest zidentyfikowanie pierwszego niewykonanego nonce i dopiero później podjęcie decyzji o przyspieszeniu, zastąpieniu lub anulowaniu oczekującej operacji. Próba naprawiania kolejnych transakcji bez sprawdzenia ich kolejności może jedynie zwiększyć liczbę oczekujących operacji i jeszcze bardziej utrudnić ustalenie przyczyny problemu.

Źródła

https://ethereum.org/developers/docs/accounts – oficjalna dokumentacja Ethereum opisująca rodzaje kont oraz nonce jako licznik transakcji wysyłanych z konta użytkownika i mechanizm zapobiegający wielokrotnemu wykonaniu operacji z tym samym nonce.

https://ethereum.org/developers/docs/transactions – oficjalna dokumentacja Ethereum dotycząca budowy i działania transakcji, w tym pola nonce, opłat za gas oraz parametrów stosowanych w aktualnych typach transakcji.

https://geth.ethereum.org/docs/interacting-with-geth/rpc/ns-txpool – oficjalna dokumentacja klienta Geth opisująca pulę transakcji oraz rozróżnienie operacji oczekujących i kolejkowanych, również według adresu nadawcy i wartości nonce.

https://eips.ethereum.org/EIPS/eip-1559 – oficjalna specyfikacja EIP-1559 opisująca mechanizm opłat transakcyjnych Ethereum, w tym opłatę bazową, maksymalną opłatę za jednostkę gas oraz opłatę priorytetową.

Zgłoś swój pomysł na artykuł

Więcej w tym dziale Zobacz wszystkie