Перейти к содержимому
Глобальный взгляд на цифровые активыГЛОБАЛЬНЫЙ ВЗГЛЯД · МЕСТНЫЙ КОНТЕКСТ
ChainView BTC866CHAIN VIEW
Блокчейн

Nonce и зависшая транзакция: как работает замена

Проверяем последовательность счёта и не создаём повторный перевод после тайм-аута.

Читать на языкеРусский简体中文繁體中文English한국어العربيةEspañol (México)Tiếng Việtไทย
Nonce и зависшая транзакция: как работает замена

Оригинальная тематическая иллюстрация: Оригинальная тематическая схема ChainView BTC866 · ChainView BTC866 Editorial · CC BY 4.0

Порядок имеет значение

Обычные транзакции внешнего счёта Ethereum используют последовательный nonce. Если ранний номер ещё не обработан, последующие могут ждать. Подтверждённое значение и значение с учётом ожидающих запросов способны различаться; узлы видят не одинаковые пулы. Не переносите эту модель на все сети и типы счетов. Запишите адрес, сеть и оба значения, затем найдите самый ранний незавершённый номер, а не увеличивайте комиссию случайной последней операции.

Ожидание отличается от ошибки

Вращающийся индикатор кошелька не доказывает провал исполнения. Узел мог не видеть запрос, удалить его из своего пула или ещё не включить в блок. Проверьте хеш через надёжный независимый источник. Включённая транзакция со статусом отката отличается от исчезнувшей неподтверждённой. Если после тайм-аута отправить тот же перевод с новым номером, позднее могут выполниться оба запроса. Сначала выясняйте состояние существующей операции.

Механизм замены

Замена обычно использует тот же отправляющий счёт и nonce, но новые условия комиссии. Требования повышения различаются между реализациями и сетями. Из конкурирующих транзакций этот номер занимает включённая первой. Кнопка ускорения или отмены может использовать тот же механизм, поэтому успех отмены не гарантирован. Перевод самому себе для отмены не возвращает уже подтверждённый платёж. Если исходная операция завершилась, новая подпись не переписывает историю цепочки.

Проверка перед подписью

Прочитайте получателя, сумму и данные вызова замены, а не только цену газа. Уточните предел и приоритетную плату; бессистемное повышение не устраняет ошибку логики договора. При работе нескольких программ с одним счётом согласуйте nonce, чтобы избежать конфликтов. После выполнения сопоставьте итоговую квитанцию, движение активов и связанные старый и новый хеши. Никому не передавайте фразу восстановления ради обещанного «разблокирования» очереди.

Источники

  1. Ethereum transactions (откроется в новой вкладке)
  2. Ethereum JSON-RPC (откроется в новой вкладке)