это счётчик транзакций у каждого адреса в блокчейне
он показывает номер следующей транзакции, которую должен отправить аккаунт
начинается с 0 и увеличивается на 1 после каждой успешной транзакции
🟠зачем вообще нужен nonce?
главная задача nonce - порядок и защита
1. защита от повторной отправки (replay)
если бы nonce не было, одну и ту же транзакцию можно было бы отправить несколько раз
пример
ты отправил 1 ETH → злоумышленник перехватил транзакцию → отправил её ещё раз → ты потерял 2 ETH
nonce решает это
каждая транзакция уникальна, потому что у неё свой номер
2. сохранение порядка транзакций
все транзакции выполняются строго по порядку nonce
пример
у тебя есть:
nonce 1 → отправить деньги
nonce 2 → купить NFT
сначала выполнится 1, потом 2
если 1 зависла, 2 вообще не выполнится
🟠как работает на практике
у каждого адреса есть текущий nonce
пример
если у тебя nonce = 5, значит следующая транзакция должна быть с nonce = 5
после выполнения она станет nonce = 6
🟠основные проблемы с nonce
1. зависшие транзакции
если транзакция с маленькой комиссией застряла
все следующие транзакции блокируются
решение
отправить новую транзакцию с тем же nonce и большей комиссией
2. дубликаты транзакций
если отправить две транзакции с одним nonce
сеть примет только одну
обычно выигрывает та, где выше gas
3. сломанный nonce (рассинхрон)
иногда кошелек показывает неправильный nonce
пример
кошелек думает nonce = 5
а в сети уже 6
тогда транзакции будут падать
4. ручное управление nonce
в сложных системах или ботах разработчики сами управляют nonce
если ошибиться
можно:
заблокировать транзакции
или отправить их в неправильном порядке
🐕 главная мысль:
nonce это не просто номер, - это механизм который: контролирует порядок
защищает от повторных транзакций, позволяет управлять транзакциями в мемпуле
если не понимать nonce
можно легко словить баги, зависшие транзакции и потерю контроля над отправкой
