Только для образовательных целей; это не финансовая рекомендация и не совет по безопасности. Замена или отмена может выполнить нежелательную транзакцию, а сетевые комиссии необратимы.
Краткий ответ
replacement transaction underpriced — это отказ RPC или пула транзакций, а не откат контракта EVM. Обычно узел уже знает транзакцию того же отправителя с тем же nonce, но новая транзакция недостаточно повышает нужные поля комиссии для его политики замены.
Сначала проверьте сеть, отправителя, nonce и состояние всех известных хешей. Если исходная транзакция ещё ожидает и её нужно заменить, используйте точно тот же nonce и повысьте комиссии по правилам кошелька или узла. Увеличение только gasLimit, изменение проскальзывания или повторная отправка той же подписанной транзакции правило не выполняют.
Как это работает
- Nonce определяет позицию. Транзакции внешнего аккаунта используют последовательные nonce. Если у узла уже есть транзакция отправителя с этим nonce, другая на той же позиции считается кандидатом на замену. Более поздний nonce может ждать, пока предыдущие не будут включены или иначе разрешены.
- Замена — локальная политика пула. Консенсус Ethereum не задаёт единого процента. Клиенты, RPC-провайдеры и приватные ретрансляторы могут иметь другие правила или видеть разные ожидающие транзакции. Legacy pool Geth сейчас использует
10%по умолчанию, но настройка изменяема и не обязательна для других клиентов. - EIP-1559 имеет два лимита.
maxPriorityFeePerGasограничивает чаевые, аmaxFeePerGas— всю цену за gas с базовой комиссией. В legacy pool Geth новые fee cap и tip cap должны быть выше старых и настроенного порога. Кошелёк должен рассчитывать оба. - Принятие пулом не является подтверждением. Один узел может принять замену, пока другие хранят оригинал. В каноническую последовательность попадёт только одна транзакция отправителя с этим nonce. Первая включённая допустимая кандидатура делает остальные непригодными в этой сети, хотя интерфейс обновится позже.
- Лимит и уплаченная сумма различаются. Эффективная цена EIP-1559 ограничена fee cap, а неиспользованный gas не оплачивается. Повышение
maxFeePerGasувеличивает максимальный риск, но не обязательно итоговую цену; высокий лимит может быть уплачен, если этого требуют базовая комиссия и чаевые.
Порядок решения и пример
Пусть nonce равен 42, maxFeePerGas = 30 gwei, а maxPriorityFeePerGas = 2 gwei. Узел с требованием 10% может отклонить 31 gwei и 2.1 gwei; 35 gwei и 2.5 gwei превышают эти примерные пороги. Транзакция всё равно может ждать, если базовая комиссия оставляет слишком малые чаевые под fee cap 35 gwei. Процент — пример, а не гарантия сети.
Действуйте по порядку:
- Проверьте сеть и отправителя. Запросите исходный и все заменяющие хеши в кошельке и через независимый RPC или обозреватель.
- Сравните подтверждённый счётчик с представлением pending. Если nonce
42подтверждён, не создавайте другую транзакцию, считая его открытым. - Декодируйте
to,valueиdata. Для ускорения сохраните операцию и nonce. Для отмены кошельки часто отправляют0 ETHсамому отправителю с тем же nonce; это конкурирующая замена, а не отзыв на уровне протокола. - По возможности используйте функцию кошелька. Иначе узнайте текущую политику и оценку комиссии, увеличьте оба лимита EIP-1559 с запасом на округление и проверьте покрытие
value + gasLimit x maxFeePerGas. - Перепроверьте всё до подписи. Отправьте один раз, сохраните каждый хеш и следите за квитанциями всех кандидатов. У pending-хеша нет квитанции; квитанция в правильной сети и блоке подтверждает выполнение.
Риски
- Отмена не гарантирована. Исходная транзакция может попасть в блок раньше, а приватная или плохо распространённая транзакция может быть невидима вашему RPC.
- Неверный nonce может создать новый платёж или вызов. Повторная подпись устаревших calldata может выполнить операцию с изменившимися ценой, allowance, сроком или состоянием.
- Один endpoint может принять замену, другой — отклонить. Частая смена RPC оставляет кандидатов в разных пулах и запутывает интерфейс кошелька.
- Повышение
gasLimitне улучшает приоритет. Слепое повышение лимитов увеличивает максимальные затраты; изменение проскальзывания или calldata меняет выполнение, но не правило пула. - Blob-транзакции, user operations абстракции аккаунта, L2 и приватные ретрансляторы могут использовать другие пулы и правила. Обычная политика EVM Geth к ним автоматически не применяется.
Остановитесь, если отправитель или nonce незнакомы, calldata не декодируются, транзакция могла подтвердиться, кошелёк предлагает другого получателя или сумму либо RPC просит seed-фразу или приватный ключ. Настоящее устранение ошибки не требует секретов восстановления.
Распространённые заблуждения
- «На аккаунте мало средств.» Это другая ошибка. Данное сообщение касается конкурирующей транзакции и цены замены.
- «Повышение на 10% всегда работает.» Это частое значение Geth, не правило консенсуса. Настройка, клиент, тип и округление могут требовать больше.
- «Более дорогая транзакция заменила исходную везде.» Пулы локальны. Принятие одним RPC не удаляет оригинал из всех пулов и не гарантирует порядок.
- «Отмена возвращает подтверждённую транзакцию.» Нет. Она конкурирует лишь пока nonce не разрешён; подтверждённое изменение требует прикладного средства, если оно существует.
Похожие темы
Источники
- Транзакции - ethereum.org (дата обращения: 2026-08-21)
- EIP-1559: изменение рынка комиссий сети ETH 1.0 - Ethereum Improvement Proposals (дата обращения: 2026-08-21)
- Логика замены legacy pool go-ethereum - go-ethereum (дата обращения: 2026-08-21)
- Пространство имён txpool - go-ethereum (дата обращения: 2026-08-21)