Фронт-раннинг и MEV: публичный мемпул
Ваша сделка видна всем ещё до того, как попадёт в блок — и этим пользуются.
MEV (Maximal Extractable Value) — ценность, которую можно извлечь, влияя на порядок, включение или исключение транзакций в блоке.
Почему это вообще возможно
Перед попаданием в блок транзакция лежит в мемпуле — публичной очереди ожидающих транзакций. Любой видит её содержимое: что вы покупаете, в каком объёме, с каким допуском по цене. Тот, кто формирует порядок транзакций в блоке (валидатор или бот, платящий за приоритет), может вставить свои транзакции до и/или после вашей. Это не «взлом» — это свойство прозрачной системы с открытым мемпулом.
Как возникает сэндвич-атака (концептуально)
Вы отправляете крупную покупку токена в AMM. Бот видит её в мемпуле и понимает: ваша сделка двинет цену вверх. Он ставит свою покупку перед вашей (по более низкой цене), пропускает вашу (она толкает цену ещё выше), и продаёт сразу после по выросшей цене. Вы получаете худшую цену, разницу забирает бот. Ваша сделка оказывается «зажата» между двумя его — отсюда «сэндвич». Мы описываем механизм, чтобы вы умели его предотвращать, а не воспроизводить.
Мемпул (виден всем):
[бот buy] <-- вставлен ПЕРЕД вашей
[ВЫ buy] <-- двигает цену вверх
[бот sell] <-- сразу ПОСЛЕ, по выросшей цене
Вы получили меньше; разницу извлёк бот.Защита разработчика и пользователя
- Слиппедж (minAmountOut). Указывайте минимально допустимый выход; если фактический меньше — транзакция откатывается. Это прямой щит от сэндвича: атака, ухудшающая вашу цену ниже порога, проваливается.
- Дедлайн (deadline). Транзакция протухает, если не исполнена вовремя, — её нельзя «придержать» и провести в невыгодный момент.
- Commit-reveal. Для чувствительных действий сначала публикуют хэш намерения (commit), а само действие раскрывают позже (reveal). Пока намерение скрыто, опередить его нельзя.
- Приватные каналы отправки. Транзакция минует публичный мемпул, лишая ботов обзора.
// Защита на уровне интеграции AMM
router.swapExactTokensForTokens(
amountIn,
minAmountOut, // слиппедж: ниже -> revert
path,
to,
deadline // протухание: поздно -> revert
);Как работает под капотом: commit-reveal
Фаза commit публикует hash(значение, секрет) — по хэшу нельзя восстановить намерение. Фаза reveal раскрывает значение и секрет; контракт пересчитывает хэш и сверяет. Так порядок «кто первым раскрыл выгодную ставку» не даёт преимущества, потому что на момент коммита содержимое было скрыто. Этот же приём защищает аукционы и схемы голосования от опережения.
Частые ошибки
- minAmountOut = 0. Полное отсутствие защиты от проскальзывания — приглашение для сэндвича.
- Без дедлайна. Транзакцию можно «придержать» и исполнить в невыгодный момент.
- Считать мемпул приватным. Он публичен по умолчанию.
Итоги
- Мемпул публичен: содержимое транзакции видно до включения в блок.
- MEV-боты извлекают ценность, влияя на порядок (сэндвич-атаки).
- Защита: слиппедж (minAmountOut), дедлайн, commit-reveal, приватная отправка.
- Механизм атаки изучаем, чтобы предотвращать, а не воспроизводить.