Частые вопросы
Может ли обычный пользователь случайно стать жертвой griefing attack?
Да. Наиболее частый сценарий — фронтраннинг ботами в DEX: бот видит вашу транзакцию в мемпуле, опережает её и изменяет цену так, что ваша транзакция проваливается из-за превышения slippage tolerance. Вы теряете газ. Защита: устанавливайте slippage tolerance не выше необходимого и используйте private mempool сервисы (Flashbots Protect) для чувствительных транзакций.
Что такое pull payment pattern и как он защищает от gas griefing?
Pull payment — паттерн, при котором контракт не отправляет ETH получателям автоматически (push), а записывает причитающиеся суммы в mapping. Каждый получатель сам вызывает функцию withdraw() и забирает средства. Это устраняет вектор gas griefing через вредоносный fallback: контракт не взаимодействует с потенциально вредоносными адресами при распределении средств.
Возвращается ли газ, если транзакция завершилась revert?
Частично. При revert возвращается неиспользованный остаток газа сверх фактически потреблённого. Газ, потреблённый до момента revert (включая все вычисления до ошибки), не возвращается. На практике при gas griefing через намеренный revert атакующий конструирует сценарий максимального потребления газа до ошибки.
Защищает ли Layer 2 (Arbitrum, Optimism) от griefing attacks?
L2 снижает стоимость атаки и потери жертвы за счёт более низкого gas price, но не устраняет класс уязвимостей — логика смарт-контракта остаётся той же. Фронтраннинг на L2 менее прибылен для атакующих из-за разной архитектуры мемпула, что косвенно снижает интенсивность некоторых видов griefing.
Как отличить провалившуюся транзакцию из-за griefing от обычной ошибки пользователя?
На Etherscan в деталях транзакции смотрите поле «Revert Reason» — некоторые контракты указывают причину отказа. Если revert происходит систематически по одному типу транзакций, а gas usage близок к 100% лимита — вероятен намеренный griefing. Случайная ошибка пользователя (неверный slippage, недостаточный баланс) имеет иные revert-причины.