Фронт-раннинг и 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, приватная отправка.
  • Механизм атаки изучаем, чтобы предотвращать, а не воспроизводить.
Проверьте себя
1. Почему возможен фронт-раннинг?
AКонтракты исполняются медленно
BТранзакции лежат в публичном мемпуле и видны до включения в блок
CГаз слишком дёшев
DОракулы врут
2. Что напрямую защищает пользователя от сэндвич-атаки?
AminAmountOut = 0
BУказание minAmountOut (слиппедж): при ухудшении цены ниже порога транзакция откатывается
CОтключение дедлайна
DУвеличение суммы сделки
3. В чём идея commit-reveal?
AШифровать весь блокчейн
BСначала опубликовать хэш намерения, а раскрыть его позже, лишив других возможности опередить
CУдвоить комиссию
DЗапретить транзакции на час