ЗНАНИЯ БЕЗ ЛИШНЕГО ШУМА

Nonce в Ethereum: почему более новая транзакция может ждать

Как счётчик исходящих транзакций Ethereum влияет на очередь и что проверить при пропуске номера или замене операции.

Три плитки в очереди транзакций Ethereum

Nonce — порядковое значение для транзакций аккаунта Ethereum. Оно помогает сети принимать исходящие операции в нужном порядке. Если ожидается номер 7, транзакция с номером 8 не сможет обойти пропуск.

Как выглядит очередь

Пусть последняя включённая исходящая операция имела nonce 6. Кошелёк отправил 7, затем 8. Пока 7 не включена, 8 может оставаться в ожидании. Поступивший перевод от другого аккаунта не увеличивает исходящий nonce вашего адреса.

Если 7 включена в блок, но её выполнение завершилось с revert, номер всё равно расходуется. Статус выполнения вызова и наличие записи в блоке описывают разные вещи.

Очередь аккаунта. Nonce 7 — ожидает. Nonce 8 — следующий. Сеть — та же
Очередь аккаунта

Что означает замена с тем же номером

Кошелёк может предложить новую транзакцию с тем же nonce. Две операции одного аккаунта с одним номером не будут обе выполнены в одной цепочке. Условия принятия замены зависят от настроек сети, узлов и приложений. Само отображение замены в кошельке не гарантирует, что сеть выберет именно её.

Что меняет счётчик. Исходящая — при включении. Входящая — без изменения. Revert — номер занят
Что меняет счётчик

Что проверять при ожидании

Сверьте сеть, адрес отправителя и идентификаторы попыток. Узнайте, есть ли более ранняя операция с тем же или меньшим номером. Не отправляйте платёж повторно, пока статус предыдущего не ясен. Что происходит при неудачном выполнении, разбирает revert в Ethereum. Для различия сетей смотрите chain ID.

Поиск по сайту