Nonce
Licznik transakcji powiązany z kontem Ethereum. Każda wysłana transakcja inkrementuje nonce o 1. Zapobiega powielaniu transakcji i wymusza ich kolejność w sieci.
Jak działa nonce konta
Nowe konto Ethereum zaczyna od nonce = 0. Po każdej udanej transakcji nonce rośnie o 1. Sieć odrzuca transakcje z nonce niższym niż aktualny numer konta oraz nie może włączyć transakcji z wyższym nonce, dopóki nie ma poprzednich.
Dwie transakcje z tym samym nonce wykluczają się wzajemnie — tylko jedna może trafić do bloku. Na tym polega mechanizm anulowania lub przyspieszenia transakcji: wysyłasz nową transakcję z tym samym nonce i wyższą opłatą.
Nonce działa też jako ochrona przed powtórkami (replay attack): podpisana transakcja z nonce 7 jest ważna tylko raz — gdy konto dotrze do 7. Powtórne wysłanie tego samego pakietu zostanie odrzucone.
Zablokowana kolejka transakcji
Jeśli wyślesz transakcje z nonce 5, 6, 7, a transakcja z nonce 5 utknęła (zbyt niska opłata), transakcje 6 i 7 nie zostaną włączone dopóki 5 nie trafi do bloku.
Rozwiązanie: wyślij tę samą transakcję z nonce 5 jeszcze raz, ale z wyższą opłatą. Albo wyślij pusty transfer do siebie z nonce 5 i wysoką opłatą — żeby przepchnąć kolejkę.
Nonce w różnych kontekstach
- Konto Ethereum (EOA)
- Licznik transakcji. Inkrementowany przy każdej wysłanej transakcji.
- Bitcoin (mining)
- Pole w nagłówku bloku iterowane przez minerów szukających poprawnego hasha PoW.
- Permit/podpis
- Losowa wartość dodawana do podpisów off-chain, by zapobiec wielokrotnemu użyciu tego samego podpisu.
Najczęstsze błędne założenia
- Nonce nie jest losowy — to ścisły licznik rosnący sekwencyjnie.
- Jeden zablokowany nonce blokuje całą kolejkę transakcji z tego konta.
- Uruchamianie dwóch instancji portfela jednocześnie może wysłać transakcje z tym samym nonce — tylko jedna przejdzie.
Najczęstsze pytania
eth_getTransactionCount. Portfele zazwyczaj śledzą nonce automatycznie.