
Полный разбор MEV-атаки сэндвич: смертельная цепочка от упорядочивания до флеш-свопа
Автор: Daii
В прошлую среду (12 марта) новость о том, что один крипто-трейдер потерял 215 000 долларов за один раз из-за MEV-атаки, заполонила ленту.

Проще говоря, этот пользователь хотел обменять стейблкоины USDC на сумму 220 800 долларов на эквивалентную сумму USDT в пуле ликвидности Uniswap v3, но в результате получил всего 5 272 USDT. За несколько секунд активы испарились на 215 700 долларов, см. ниже.

На изображении выше показан скриншот записи этой транзакции в блокчейне. Основная причина этой трагедии заключается в том, что произошла печально известная в мире блокчейна «Сэндвич-атака» (Sandwich Attack).

Первым об этой MEV-атаке сообщил Майкл (см. выше), он объяснил:
MEV-бот опередил транзакцию, обменяв всю ликвидность USDC. После выполнения транзакции они вернули ликвидность. Атакующий заплатил билдеру блоков (bobTheBuilder) 200 000 долларов и заработал 8 000 долларов на этой транзакции.
В приведенном выше содержании есть ошибка: MEV-бот атаки обменял большое количество USDT, а не USDC.
Однако, прочитав его объяснение и новости, вы все еще можете быть в замешательстве, потому что там слишком много новых терминов, таких как Сэндвич-атака (Sandwich Attack), опережение (front-ran the tx), возврат ликвидности (put back the liquidity), чаевые билдеру блоков (tipped a block builder) и т.д.
Сегодня мы возьмем эту MEV-атаку в качестве примера, разберем весь процесс и проведем вас через этот темный мир MEV.
Во-первых, нам нужно объяснить, что такое MEV.
1. Что такое MEV?
MEV изначально назывался Miner Extractable Value (Извлекаемая ценность майнера) и обозначал дополнительную прибыль, которую майнеры могли получить путем изменения порядка, вставки или исключения транзакций в блоке блокчейна. Эта операция могла привести к тому, что обычные пользователи понесут более высокие затраты или получат менее выгодную цену сделки.
С переходом таких блокчейн-сетей, как Ethereum, от механизма консенсуса Proof-of-Work (PoW) к механизму консенсуса Proof-of-Stake (PoS), власть контроля над сортировкой транзакций перешла от майнеров к валидаторам. Поэтому термин эволюционировал от «Miner Extractable Value» (Извлекаемая ценность майнера) к «Maximal Extractable Value» (Максимально извлекаемая ценность).
Несмотря на изменение названия, основная концепция извлечения ценности путем манипулирования порядком транзакций осталась прежней.
Приведенное выше содержание все еще немного профессионально, вам нужно просто запомнить: MEV существует, потому что бывшие майнеры, а现在的 валидаторы обладают правом сортировки транзакций в мемпуле (mempool). Эта сортировка происходит внутри блока, сейчас Ethereum генерирует блок примерно каждые 11 секунд, это означает, что каждые 11 секунд происходит такое осуществление власти. Точно так же эта MEV-атака также была реализована через сортировку валидатором.
Нажав на эту ссылку, вы увидите содержимое транзакций, содержащихся в блоке номер 22029771, связанном с этой атакой, как показано ниже.

Обратите внимание, что транзакции 1, 2, 3 на изображении выше — это та самая MEV-атака, о которой говорилось в начале этой статьи, этот порядок был arranged by валидатором (bobTheBuilder). Почему это возможно?
2. Принцип работы MEV
Чтобы понять, как работает MEV, нам нужно сначала понять, как блокчейн записывает и обновляет информацию.
2.1 Механизм обновления состояния блокчейна
Блокчейн можно рассматривать как постоянно растущую книгу учета, которая записывает все произошедшие транзакции. Состояние этой книги, например, баланс каждого счета, резервы различных токенов в пуле ликвидности Uniswap и т.д., определяется предыдущими транзакциями.
Когда новый блок добавляется в блокчейн, все транзакции, содержащиеся в этом блоке, выполняются одна за другой в соответствии с их порядком в блоке. При выполнении каждой транзакции глобальное состояние блокчейна соответственно изменяется.
То есть важен не только порядок блоков, но и порядок транзакций в блоке. Так как же определяется порядок транзакций в блоке?
2.2 Валидатор определяет порядок транзакций
Когда пользователь инициирует транзакцию в блокчейн-сети, например, эту транзакцию конвертации USDC в USDT через Uniswap, она сначала транслируется узлам в сети. После первоначальной проверки эта транзакция попадает в область, называемую «мемпул» (mempool). Мемпул похож на зону ожидания, где транзакции еще не подтверждены и не добавлены в следующий блок блокчейна.
Бывшие майнеры (в системе PoW), а现在的 валидаторы (в системе PoS) имеют право выбирать транзакции из мемпула и определять порядок их排列 в следующем блоке.
Порядок транзакций в блоке имеет решающее значение. Перед окончательным подтверждением блока и добавлением его в блокчейн, транзакции в этом блоке выполняются в порядке, определенном валидатором (например, bobTheBuilder). Это означает, что если блок содержит несколько транзакций, взаимодействующих с одним и тем же пулом ликвидности, то порядок выполнения этих транзакций напрямую повлияет на результат каждой транзакции.
Эта способность позволяет валидаторам приоритезировать обработку определенных транзакций, задерживать или исключать другие транзакции и даже вставлять свои собственные транзакции для максимизации прибыли.
Сортировка этой транзакции также важна, малейшая ошибка сделала бы атаку невозможной.
2.3 Порядок транзакций этой MEV-атаки
Давайте сначала кратко ознакомимся с 3 транзакциями, связанными с этой MEV-атакой:

-
Транзакция 1 (первая транзакция атакующего): Выполняется перед транзакцией жертвы. Цель этой транзакции обычно заключается в повышении цены токена, который хочет обменять жертва.
-
Транзакция 2 (транзакция жертвы): Выполняется после первой транзакции атакующего. Из-за предыдущих операций атакующего цена в пуле ликвидности в этот момент неблагоприятна для жертвы, ему нужно付出 больше USDC, чтобы получить эквивалентную сумму USDT, или он может получить только меньше USDT.
-
Транзакция 3 (вторая транзакция атакующего): Выполняется после транзакции жертвы. Цель этой транзакции обычно заключается в извлечении прибыли из новых изменений цены, вызванных транзакцией жертвы.
Валидатором этой MEV-атаки был bob-The-Builder.eth, именно он отвечал за排列 транзакций в порядке 1, 2, 3. Конечно, bobTheBuilder не работал бесплатно, он участвовал в этой сортировке и получил доход более 100 ETH, в то время как инициатор MEV-атаки получил только 8000 долларов. Источником их дохода стала вторая транзакция жертвы.
Одним словом, атакующий (MEV-бот) и валидатор (bobTheBuilder) сговорились, заставив жертву второй транзакции потерять 215 000 долларов, из которых атакующий получил 8000 долларов, а валидатор получил 200 000 долларов (более 100 ETH).
Используемый ими способ атаки имеет образное название — Сэндвич-атака. Далее мы рассмотрим каждую транзакцию по очереди, чтобы вы полностью поняли, что представляет собой довольно сложная Сэндвич-атака MEV?
3. Полный анализ Сэндвич-атаки
Это называется Сэндвич-атака (Sandwich Attack), потому что две транзакции атакующего (транзакция 1 и транзакция 3) размещены до и после транзакции жертвы (транзакция 2), так что весь порядок транзакций похож на структуру сэндвича (см. выше).
-
Транзакция 1 и транзакция 3 выполняют разные функции. Проще говоря, транзакция 1 отвечает за совершение преступления, транзакция 3 отвечает за сбор урожая и раздел добычи. Конкретно весь процесс выглядит так:
-
3.1 Транзакция 1, отвечает за повышение цены USDT
-
Нажав на ссылку транзакции номер 1 на изображении выше, вы увидите подробное содержание транзакции номер 1, атакующий повысил цену USDT очень прямолинейно, просто обменяв 18,65 млн USDC на все 17,58 млн USDT внутри, см. ниже.

В этот момент в пуле ликвидности осталось большое количество USDC и небольшое количество USDT. Если следовать сообщениям новостей, что перед атакой в ликвидности Uniswap было около 19,8 млн USDC и USDT соответственно, то после выполнения транзакции 1 в пуле осталось только 2,22 млн USDT (=1980-1758), а баланс USDC увеличился до примерно 38,45 млн (=1980+1865).
В этот момент коэффициент обмена между USDC и USDT в этом пуле далеко не 1:1, а 1:17, то есть теперь требуется 17 USDC для обмена на 1 USDT, однако этот коэффициент приблизительный, потому что этот пул V3, и ликвидность внутри распределена неравномерно.
Есть еще один момент, который я должен вам сообщить. На самом деле атакующий не использовал一次性 18,65 млн USDC, фактически использованные USDC составили 1,09 млн, что менее 6%. Как ему это удалось? Мы подробно расскажем об этом после того, как закончим рассказ об атаке.
3.2 Транзакция 2, выполнение обмена 220 000 USDC на USDT
Нажав на ссылку транзакции 2 на изображении выше, можно увидеть изображение ниже.

Как показано на изображении выше, транзакция 2 жертвы из-за влияния транзакции 1, 220 000 USDC получили только 5272 USDT, незаметно потеряв 170 000 USDT. Почему это называется незаметно? Потому что, если жертва торговала через Uniswap, то при提交 транзакции он видел бы следующий интерфейс.

Из изображения выше вы обнаружите, что жертва должна была получить как минимум 220 000, это гарантировано. Причина, по которой жертва в итоге получила только более 5000 USDT, заключается в огромном проскальзывании, достигшем более 90%. Однако, Uniswap имеет ограничение по умолчанию на максимальное проскальзывание 5,5%, см. ниже.

То есть, если бы жертва торговала через фронтенд Uniswap, то он должен был бы получить как минимум 208 381 USDT (= 220 510 * 94,5%). У вас может возникнуть вопрос, почему в записи блокчейна выше показано, что эта транзакция была выполнена в «Uniswap V3».
Потому что фронтенд и бэкенд блокчейн-транзакций разделены. «Uniswap V3», о котором говорилось выше, относится к пулу ликвидности USDC-USDT Uniswap, этот пул открыт, любой фронтенд транзакций может торговать через этот пул.
Именно из-за этого кто-то подозревает, что жертва не проста, не обычный человек, иначе не возникло бы такого большого проскальзывания, возможно, использовалась MEV-атака для отмывания денег. Об этом мы поговорим позже.
3.3 Транзакция 3, сбор урожая + раздел добычи

Нажав на ссылку, можно查看 детали транзакции 3, как на изображении выше. Мы рассмотрим три транзакции A, B, C по отдельности.
-
Транзакция A: Восстанавливает ликвидность в пуле, обменяв 17,32 млн USDT обратно на 18,60 млн USDC;
-
Транзакция B: Подготовка к разделу добычи, обмен части прибыли — 204 000 USDC на 105 ETH;
-
Транзакция C: Раздел добычи, выплата 100,558 ETH валидатору bob-The-Builder.eth.
На этом Сэндвич-атака завершена.
Теперь ответим на очень важный вопрос, упомянутый выше: как атакующий реализовал атаку на пул в 18 млн USDC, используя 1,09 млн USDC.
4. Как атакующий реализовал атаку на пул в 18 млн USDC
Причина, по которой атакующий смог использовать только 1,09 млн USDC капитала для реализации атаки уровня 18 млн долларов, заключается в том, что в мире блокчейна существует神奇 и специальный механизм — Флэш-своп (Flash Swap) Uniswap V3.
4.1 Что такое Флэш-своп (Flash Swap)?
Проще говоря:
Флэш-своп позволяет пользователю сначала вывести активы из пула Uniswap в одной и той же транзакции, а затем погасить их другим активом (или тем же активом плюс комиссия).
Пока вся операция завершена в одной и той же транзакции, Uniswap позволяет такое поведение «сначала взять товар, потом заплатить». Обратите внимание, это должно быть завершено в одной и той же транзакции. Такой дизайн是为了保障 безопасности самой платформы Uniswap:
-
Заем без риска: Uniswap позволяет пользователям без залога временно выводить средства из пула (аналогично займу), но они должны быть немедленно возвращены в конце транзакции.
-
Атомарность (Atomicity): Вся операция должна быть атомарной, либо полностью успешной (возврат средств), либо полностью неудачной (откат транзакции).
Изначальный дизайн Флэш-свопа был для более эффективного арбитража (Arbitrage) на链е, но, к сожалению, был использован MEV-атакующими, став инструментом манипулирования рынком.
4.2 Как Флэш-своп помог в атаке?
Ниже мы рассмотрим изображение и шаг за шагом узнаем, как был реализован Флэш-своп этой атаки, см. ниже.

-
F1: Атакующий через свои 701 WETH занимает 1,09 млн USDC в AAVE;
-
F2: Атакующий инициирует запрос флэш-свопа, сначала выводя 17,58 млн USDT из пула Uniswap (в этот момент не нужно сначала платить), баланс счета атакующего временно увеличивается на 17,58 млн USDT;
-
F3: Атакующий быстро вкладывает эти 17,58 млн USDT в пул Curve, обменивая обратно на 17,55 млн USDC. Баланс USDT атакующего уменьшается на 17,58 млн, USDC увеличивается на 17,55 млн. Из изображения ниже вы обнаружите, что атакующий выбрал Curve, потому что здесь ликвидность очень достаточна, USDT более 70,54 млн, USDC также 50,71 млн, проскальзывание относительно низкое.

-
F4: Атакующий затем возвращает 17,55 млн USDC, обмененные через Curve, плюс изначально подготовленные 1,09 млн USDC (полученные через займ Aave), всего 18,64 млн USDC,一次性 возвращает Uniswap, флэш-обмен завершен;
После этой транзакции (транзакция 1) баланс счета атакующего уменьшился на 1,09 млн USDC, потому что из 18,64 млн USDC, возвращенных Uniswap, только 17,55 млн USDC были обменены через Curve, остальные 1,09 млн USDC — это собственные средства атакующего.
Вы должны были заметить, что эта транзакция фактически заставила атакующего потерять 1,09 млн. Однако, последующая транзакция 3, также используя метод флэш-обмена, не только вернула 1,09 млн USDC, но и заработала более 200 000.

Ниже мы шаг за шагом проанализируем данные транзакции 3.
-
K1: Атакующий использует флэш-обмен для вывода 18,60 млн USDC из Uniswap;
-
K2: Атакующий, используя часть только что выведенных из Uniswap USDC, а именно 17,30 млн USDC, обменивает обратно на 17,32 млн USDT;
-
K1: Атакующий возвращает 17,32 млн USDT, обмененные через Curve, обратно в Uniswap. Флэш-обмен завершен. Вам нужно обратить внимание, что атакующий через K2 потратил только 17,30 млн USDC, чтобы получить 17,32 млн USDT. Из оставшихся 130 (= 1860-1730)万 USDC, 1,09 млн — это собственные средства, остальные 210 000 USDC — это прибыль от этой атаки.
-
K3: Атакующий возвращает本金 в AAVE, забирает свои 701 WETH, одновременно обменивает 200 000 USDC на 105 ETH, и отправляет 100,558 ETH из них валидатору в качестве чаевых (около 200 000 долларов), оставляя себе прибыль менее 10 000 долларов.
Вы можете быть удивлены, почему атакующий готов был отдать прибыль в размере 200 000 долларов валидатору?
4.3 Почему нужно давать «чаевые» в 200 000 долларов?
На самом деле, это не щедрость, а необходимое условие для успеха такой MEV-атаки, как Сэндвич-атака:
Ядром успеха атаки является точный контроль порядка транзакций, а控制 порядка транзакций находится именно у валидатора (bobTheBuilder).
Валидатор не только помогает атакующему确保, что транзакция жертвы находится между транзакциями атаки, но, что более важно, валидатор может确保, что другие конкурирующие MEV-боты не могут вклиниться или помешать успешному завершению атаки.
Поэтому атакующий предпочитает пожертвовать большей частью прибыли, чтобы确保 успех атаки, и оставить определенную прибыль себе.
Следует особо отметить, что MEV-атака также имеет затраты, есть затраты на флэш-обмен Uniswap, есть затраты на транзакцию Curve, просто из-за низкой комиссии, примерно 0,01~0,05%, поэтому по сравнению с所得 от атаки этим можно пренебречь.
Наконец, напоминаю еще раз, защита от MEV-атаки на самом деле очень проста, вам нужно: установить допустимое проскальзывание, не более 1%; крупные транзакции выполнять в несколько этапов. Поэтому вам не нужно отказываться от еды из-за страха удушья и从此 не敢 торговать на DEX (децентрализованной бирже).
Заключение: Предупреждение и вдохновение в темном лесу
Это событие MEV-атаки на 215 000 долларов, несомненно, является еще одним жестким проявлением закона «Темного леса» в мире блокчейна. Оно vividly раскрывает, что в децентрализованной,无需许可 среде скрывается сложная игра по использованию уязвимостей механизмов для извлечения прибыли.
С более высокой точки зрения, появление MEV является проявлением эффекта обоюдоострого меча прозрачности и программируемости блокчейна.
С одной стороны, все записи транзакций открыты для проверки, что позволяет отслеживать и анализировать атакующие поведения;
С другой стороны, сложная логика смарт-контрактов и определенность выполнения транзакций также предоставляют возможности для проницательных участников.
Это не просто хакерское поведение, а глубокое понимание и использование底层 механизмов блокчейна, это испытывает робастность дизайна протокола, а также бросает вызов осознанию рисков участников.
Понимая MEV, осознавая его риски, можно лучше navigate в этом цифровом мире, полном возможностей, но также скрывающем кризисы. Помните, в «Темном лесу» блокчейна только уважая правила и повышая认知, можно избежать стать следующей поглощенной добычей.
Это также эффект, которого я стремлюсь достичь через эту статью.
Присоединяйтесь к официальному сообществу TechFlow
Telegram:https://t.me/TechFlowDaily
X (Twitter):https://x.com/TechFlowPost
X (Twitter) EN:https://x.com/BlockFlow_News















