Receipt сначала отвечает, была ли транзакция включена
| Состояние | Receipt | Комиссия сети |
|---|---|---|
| Rejected до принятия сетью | Нет сетевого наблюдения и receipt; локальный hash подписанной raw transaction возможен | On-chain fee не возникает, если транзакция не включена |
| Pending / dropped | Receipt отсутствует | Нет включённого исполнения; локальный интерфейс может показывать резерв |
| Included, status 0 | Есть block number, gasUsed и failed status | Использованный gas оплачен |
| Included, status 1 | Есть успешный receipt | Gas оплачен; бизнес-результат всё равно проверяют по events и balances |
- Состояние
- Rejected до принятия сетью
- Receipt
- Нет сетевого наблюдения и receipt; локальный hash подписанной raw transaction возможен
- Комиссия сети
- On-chain fee не возникает, если транзакция не включена
- Состояние
- Pending / dropped
- Receipt
- Receipt отсутствует
- Комиссия сети
- Нет включённого исполнения; локальный интерфейс может показывать резерв
- Состояние
- Included, status 0
- Receipt
- Есть block number, gasUsed и failed status
- Комиссия сети
- Использованный gas оплачен
- Состояние
- Included, status 1
- Receipt
- Есть успешный receipt
- Комиссия сети
- Gas оплачен; бизнес-результат всё равно проверяют по events и balances
Для разбора сохраните network, transaction hash, block number, status, from, to, value, input, gas limit, gas used и effective gas price. Для обычной included EVM-транзакции фактическая execution fee проверяется как gasUsed × effectiveGasPrice; у blob-транзакции отдельно учитывается blob fee. Logs при top-level revert обычно не подтверждают откатившиеся события. Token transfer в preview или интерфейсе не доказывает изменение баланса: authoritative state нужно читать после блока.
Состояние откатывается, счётчик работы — нет
EVM выполняет opcodes и расходует gas. Если неперехваченное исключение доходит до верхнего вызова, изменения этого исполнения возвращаются к состоянию до транзакции. Но проверка подписи, чтение данных и вычисления уже произошли на узлах. Экономическая модель оплачивает эту работу, иначе ошибочными вызовами можно было бы бесплатно занимать ресурсы блока. Отдельный гайд даёт подробное объяснение счётчика gas и EIP-1559.
Больше gas исправляет только один класс причин
| Признак | Вероятная причина | Что должно измениться до повтора |
|---|---|---|
| Gas used близок к gas limit; out of gas в trace | Лимита не хватило на исполнение | Корректная новая оценка gas и проверка, почему вызов стал тяжелее |
| Revert reason про slippage/minimum output | Результат swap вышел за допуск | Новая котировка и осознанный предел; не бесконечное расширение slippage |
| Deadline expired | Вызов просрочен | Новый payload с разумным сроком из доверенного приложения |
| Insufficient balance/allowance | Контракт не видит нужный баланс или разрешение | Проверка owner, token, spender, amount и сети |
| Unauthorized / missing role | Sender не имеет требуемой роли | Официальный доступ или отказ от действия; fee не исправляет права |
| Paused / custom error | Протокол остановил функцию или нарушено условие | Проверка официального статуса и точного custom error |
- Признак
- Gas used близок к gas limit; out of gas в trace
- Вероятная причина
- Лимита не хватило на исполнение
- Что должно измениться до повтора
- Корректная новая оценка gas и проверка, почему вызов стал тяжелее
- Признак
- Revert reason про slippage/minimum output
- Вероятная причина
- Результат swap вышел за допуск
- Что должно измениться до повтора
- Новая котировка и осознанный предел; не бесконечное расширение slippage
- Признак
- Deadline expired
- Вероятная причина
- Вызов просрочен
- Что должно измениться до повтора
- Новый payload с разумным сроком из доверенного приложения
- Признак
- Insufficient balance/allowance
- Вероятная причина
- Контракт не видит нужный баланс или разрешение
- Что должно измениться до повтора
- Проверка owner, token, spender, amount и сети
- Признак
- Unauthorized / missing role
- Вероятная причина
- Sender не имеет требуемой роли
- Что должно измениться до повтора
- Официальный доступ или отказ от действия; fee не исправляет права
- Признак
- Paused / custom error
- Вероятная причина
- Протокол остановил функцию или нарушено условие
- Что должно измениться до повтора
- Проверка официального статуса и точного custom error
Revert reason полезен, если explorer или trace получил его из реального вызова и смог декодировать ABI. Но строка не является гарантией полноты: контракт может вернуть custom error, пустые данные или ошибку из глубины вложенного вызова. Не доверяйте неизвестному сайту, который просит новую подпись якобы для «расшифровки ошибки».
Повтор имеет смысл только после изменения проверяемого условия
Перед новой подписью
- подтвердить status 0 и канонический block hash исходной транзакции;
- определить функцию по to и input data, не полагаясь только на подпись карточки dapp;
- проверить balances, allowances, deadline, min/max amounts и paused state на актуальном блоке;
- воспроизвести eth_call или wallet simulation с теми же параметрами на свежем состоянии;
- изменить только параметр, связанный с установленной причиной;
- после повтора проверить новый hash, receipt и фактические token transfers.
На DEX причиной может быть изменение цены или ликвидности между quote и исполнением, но сам факт failed swap не доказывает MEV или мошенничество. Сначала сравните minimum received, deadline и маршрут. Повышать slippage без границы опасно: транзакция может пройти с существенно худшим результатом.
Успешная симуляция тоже не гарантирует следующий блок: state способен измениться до inclusion. Если интерфейс не показывает точную функцию, суммы и контракт, остановитесь. Общая модель смарт-контракта помогает отделить подпись, broadcast, EVM execution и итоговый state.
Границы ответа
Failed-транзакция перевела ETH или токен?
При top-level status 0 изменения этой транзакции откатываются, но проверьте исходное и итоговое состояние. Отдельная другая транзакция или перехваченный subcall — другой случай.
Можно вернуть комиссию за revert?
Протокол не создаёт возврат использованного gas: вычислительная работа уже включена в блок. Неиспользованная часть gas limit не считается использованной комиссией.
Нужно просто поставить больше gas?
Только подтверждённый out of gas указывает на недостаточный limit. Для логического revert увеличение лимита не меняет условие контракта.
Источники
Мы используем прямые ссылки и фиксируем дату проверки. Полный текст чужих материалов не перепечатывается.
- Solidity — Error handling Solidity · Проверено 18 августа 2026 г. в 22:28 GMT+5
- Ethereum.org — JSON-RPC API Ethereum Foundation · Проверено 18 августа 2026 г. в 22:28 GMT+5
- Ethereum.org — Gas and fees Ethereum Foundation · Проверено 18 августа 2026 г. в 22:28 GMT+5
- Ethereum.org — Transactions Ethereum Foundation · Проверено 18 августа 2026 г. в 22:28 GMT+5
- EIP-4844 — Shard Blob Transactions Ethereum Improvement Proposals · Проверено 18 августа 2026 г. в 22:50 GMT+5
