Сначала определите состояние
- Сначала найдите hash, sender, сеть, nonce и убедитесь, что receipt действительно отсутствует.
- Speed up обычно сохраняет действие и повышает fee parameters; cancel пытается заменить его переводом самому себе с тем же nonce.
- Замена — соревнование в mempool, а не гарантия: исходная версия может попасть в блок первой.
Сначала отделите pending в сети от зависшего интерфейса
| Наблюдение | Вероятное состояние | Следующая проверка |
|---|---|---|
| Есть receipt и block number | Транзакция уже включена | Проверить status; replacement больше не отменит результат |
| Hash найден как pending, receipt null | У источника есть неподтверждённый кандидат | Сверить sender, nonce и fee fields |
| Hash не найден ни у одного источника | Broadcast не состоялся, запись удалена или RPC не видел её | Проверить другой доверенный RPC и transaction count |
| Кошелёк показывает pending, explorer — confirmed | Локальная история отстала | Обновить данные, а не создавать новый платёж |
- Наблюдение
- Есть receipt и block number
- Вероятное состояние
- Транзакция уже включена
- Следующая проверка
- Проверить status; replacement больше не отменит результат
- Наблюдение
- Hash найден как pending, receipt null
- Вероятное состояние
- У источника есть неподтверждённый кандидат
- Следующая проверка
- Сверить sender, nonce и fee fields
- Наблюдение
- Hash не найден ни у одного источника
- Вероятное состояние
- Broadcast не состоялся, запись удалена или RPC не видел её
- Следующая проверка
- Проверить другой доверенный RPC и transaction count
- Наблюдение
- Кошелёк показывает pending, explorer — confirmed
- Вероятное состояние
- Локальная история отстала
- Следующая проверка
- Обновить данные, а не создавать новый платёж
Transaction hash — главный идентификатор исходной версии. Найдите его в activity кошелька и откройте в explorer той же сети. Затем запишите sender, nonce, to, value, input data и fee fields: gasPrice у legacy-транзакции либо maxFeePerGas и maxPriorityFeePerGas у type 2. Если hash неизвестен, повторная отправка той же суммы не является диагностикой: она способна создать отдельную транзакцию с новым nonce.
Nonce превращает операции аккаунта в очередь
У externally owned account nonce увеличивается последовательно. Если сеть ещё не исполнила nonce 41, обычная транзакция с nonce 42 не может перепрыгнуть его. Она может распространяться и отображаться, но исполнение ждёт закрытия пробела. Поэтому начинать нужно с самого раннего pending nonce, а не с последней карточки, которая кажется зависшей.
Если RPC показывает разные значения latest и pending transaction count, расхождение само по себе ещё не доказывает ошибку. Узлы могут иметь разные mempool. Сравните несколько доверенных источников и не смешивайте сети: один адрес EVM может выглядеть одинаково в Ethereum, Base или BNB Smart Chain, но nonce и очередь у каждой сети свои.
Speed up и cancel создают конкурента с тем же nonce
| Действие | Что отправляется | Главный риск |
|---|---|---|
| Wait | Ничего нового | Операция остаётся в неопределённом pending состоянии |
| Speed up | Та же операция с тем же nonce и более конкурентными fee fields | Кошелёк изменит fee, но включение не гарантировано |
| Cancel | Обычно 0 ETH самому себе с тем же nonce и более конкурентными fee fields | Исходная версия может попасть в блок первой |
- Действие
- Wait
- Что отправляется
- Ничего нового
- Главный риск
- Операция остаётся в неопределённом pending состоянии
- Действие
- Speed up
- Что отправляется
- Та же операция с тем же nonce и более конкурентными fee fields
- Главный риск
- Кошелёк изменит fee, но включение не гарантировано
- Действие
- Cancel
- Что отправляется
- Обычно 0 ETH самому себе с тем же nonce и более конкурентными fee fields
- Главный риск
- Исходная версия может попасть в блок первой
Название cancel описывает намерение пользователя, а не команду протоколу удалить старую транзакцию. Пока обе версии находятся у узлов, block builder может увидеть одну из них раньше. После включения любой версии nonce считается использованным, и остальные версии с этим nonce уже не могут исполниться в той же канонической истории.
Кнопка кошелька предпочтительнее ручного ввода: приложение знает исходную операцию и строит replacement. Но интерфейсы и правила fee bump меняются. Не копируйте фиксированный процент из старой инструкции как вечный порог. Проверьте оценку кошелька и убедитесь, что max fee способен покрыть будущую base fee и выбранную priority fee; подробная модель полей разобрана отдельно.
Результат проверяют по двум hash, а не по исчезнувшей кнопке
После speed up или cancel
- сохранить hash исходной и replacement-транзакции;
- проверить, у обеих ли версий одинаковые sender и nonce;
- дождаться receipt одной версии и записать её block hash;
- проверить status, to, value и input data победившей версии;
- убедиться, что следующая транзакция аккаунта больше не заблокирована nonce gap;
- если сервис ожидает депозит, передать ему hash фактически включённой версии.
Если операция уже включена со status 0, это не pending и не задача для cancel. Такой receipt означает ошибку исполнения; разбирают revert, gas used и вызванный контракт. Для smart account сначала устанавливают bundler и nonce-space конкретной реализации.
Источники
Мы используем прямые ссылки и фиксируем дату проверки. Полный текст чужих материалов не перепечатывается.
- Ethereum.org — Transactions Ethereum Foundation · Проверено 18 августа 2026 г. в 22:28 GMT+5
- Ethereum.org — Ethereum accounts Ethereum Foundation · Проверено 18 августа 2026 г. в 22:28 GMT+5
- MetaMask — speed up or cancel a pending transaction MetaMask · Проверено 18 августа 2026 г. в 22:28 GMT+5
- Ethereum.org — JSON-RPC API Ethereum Foundation · Проверено 18 августа 2026 г. в 22:28 GMT+5
- go-ethereum — transaction pool errors go-ethereum · Проверено 18 августа 2026 г. в 22:43 GMT+5
