Deep EVM #13: Что такое MEV — извлекаемая ценность, серчеры и билдеры
Engineering Team
Определение MEV
MEV (Maximal Extractable Value) — максимальная извлекаемая ценность — это прибыль, которую можно извлечь из производства блока сверх стандартной награды и комиссий, путём включения, исключения или переупорядочивания транзакций внутри блока.
До The Merge термин расшифровывался как Miner Extractable Value. После перехода на Proof-of-Stake майнеров заменили валидаторы, но суть осталась: тот, кто определяет порядок транзакций в блоке, может извлечь из этого прибыль.
Типы MEV
Арбитраж DEX
Самый чистый вид MEV. Если цена токена на Uniswap V2 отличается от цены на SushiSwap, серчер может купить на дешёвой площадке и продать на дорогой в одной атомарной транзакции:
Транзакция:
1. Flash-заём 100 WETH на Aave
2. Своп 100 WETH → 150,000 USDC на Uniswap (цена 1500)
3. Своп 150,000 USDC → 101.5 WETH на SushiSwap (цена 1478)
4. Возврат 100 WETH + комиссия на Aave
5. Прибыль: ~1.4 WETH
Прибыль гарантирована атомарностью — если любой шаг неуспешен, вся транзакция ревертится.
Ликвидации
DeFi-протоколы кредитования (Aave, Compound) позволяют ликвидировать позиции, когда залог падает ниже порога. Ликвидатор получает бонус 5-10% от ликвидированной суммы:
Пользователь A: залог 10 ETH, долг 12,000 DAI
Цена ETH падает: 10 ETH = 11,500 DAI < долг
Ликвидатор: погашает 6,000 DAI, получает 5.5 ETH (стоимостью 6,325 DAI)
Прибыль: 325 DAI
Сэндвич-атаки
Серчер видит ожидающую транзакцию большого свапа в мемпуле и размещает две транзакции вокруг неё:
- Front-run: покупка токена перед жертвой (поднимает цену)
- Жертва: выполняет своп по завышенной цене
- Back-run: продажа токена после жертвы (фиксирует прибыль)
Это наиболее спорный вид MEV, поскольку напрямую вредит пользователям.
JIT-ликвидность
Just-In-Time ликвидность — серчер добавляет концентрированную ликвидность на Uniswap V3 непосредственно перед крупным свапом и убирает её сразу после. Серчер собирает комиссии от свапа без долгосрочного risk exposure.
Экосистема MEV после The Merge
PBS — Proposer-Builder Separation
После The Merge экосистема MEV перешла на модель разделения ролей:
- Серчеры (Searchers) — находят MEV-возможности и создают бандлы транзакций
- Билдеры (Builders) — собирают бандлы от серчеров в полные блоки
- Релееры (Relayers) — передают блоки от билдеров к валидаторам (MEV-Boost)
- Валидаторы (Proposers) — выбирают наиболее прибыльный блок для предложения
Поток данных
Серчер → Бандл → Билдер → Блок → Релеер → Валидатор
↓
Ethereum
Flashbots
Flashbots — ключевая организация в MEV-экосистеме. Они создали:
- MEV-Boost — middleware для валидаторов, подключающий их к рынку блоков
- Flashbots Protect — RPC для пользователей, защищающий от сэндвич-атак
- MEV-Share — протокол, перераспределяющий часть MEV обратно пользователям
Экономика серчера
Типичная экономика MEV-серчера:
Доход от арбитража: $X
- Газ транзакции: -$G
- Приоритетная комиссия: -$P (взятка валидатору/билдеру)
- Инфраструктура: -$I (ноды, сервера, данные)
= Чистая прибыль: $X - $G - $P - $I
Конкуренция в MEV-экосистеме настолько жёсткая, что серчеры часто отдают 90-99% прибыли в виде приоритетных комиссий. Выигрывает тот, кто:
- Находит возможности быстрее — задержка в миллисекунды решает
- Исполняет с меньшим газом — оптимизация Huff-контрактов
- Моделирует точнее — предсказание реального profit после MEV-конкуренции
Инструменты серчера
Мемпул-мониторинг
Серчеры подключаются к P2P-сети Ethereum для получения pending-транзакций:
use ethers::providers::{Provider, Ws, Middleware};
async fn monitor_mempool() {
let provider = Provider::<Ws>::connect("ws://localhost:8546").await.unwrap();
let mut stream = provider.subscribe_pending_txs().await.unwrap();
while let Some(tx_hash) = stream.next().await {
let tx = provider.get_transaction(tx_hash).await.unwrap();
if let Some(tx) = tx {
// Анализ транзакции на MEV-возможности
analyze_transaction(&tx).await;
}
}
}
Форк стейта
Для симуляции MEV-транзакций серчеры форкают текущее состояние блокчейна:
use revm::{EVM, db::CacheDB, primitives::*};
fn simulate_arbitrage(state: &CacheDB, route: &ArbitrageRoute) -> Result<U256> {
let mut evm = EVM::new();
evm.database(state.clone());
// Настройка транзакции
evm.env.tx.caller = searcher_address;
evm.env.tx.transact_to = TransactTo::Call(contract_address);
evm.env.tx.data = encode_swap_calldata(route);
evm.env.tx.gas_limit = 300_000;
let result = evm.transact()?;
Ok(extract_profit(&result))
}
Бандлинг через Flashbots
use ethers_flashbots::FlashbotsMiddleware;
async fn submit_bundle(bundle: Vec<Transaction>) {
let flashbots = FlashbotsMiddleware::new(
provider,
"https://relay.flashbots.net",
signer,
);
let pending = flashbots
.inner()
.send_bundle(&bundle)
.target_block(next_block)
.send()
.await?;
}
Этика MEV
MEV — спорная тема:
- Арбитраж — полезен: выравнивает цены между площадками
- Ликвидации — необходимы: поддерживают платёжеспособность протоколов
- Сэндвич-атаки — вредны: напрямую извлекают ценность у пользователей
- JIT-ликвидность — нейтральны: улучшают исполнение свапов, но отнимают комиссии у LP
Flashbots и другие организации работают над «справедливым» MEV — протоколами, минимизирующими вред пользователям при сохранении полезных видов MEV.
Итоги
MEV — фундаментальное свойство блокчейнов с произвольным порядком транзакций. Экосистема PBS разделила роли на серчеров, билдеров и релееров. Конкуренция жёсткая — выигрывает тот, кто быстрее, дешевле и точнее. В следующей статье мы погрузимся в алгоритмическую сторону: как находить арбитражные циклы с помощью DFS на графе пулов.