Documentation Index
Fetch the complete documentation index at: https://docs.raydium.io/llms.txt
Use this file to discover all available pages before exploring further.
Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
MEV на Solana отличается от MEV в Ethereum, основанного на мемпуле. Лидеры блоков видят пакеты транзакций по мере их поступления, а не как упорядоченный мемпул. Front-running происходит через переупорядочение на стороне лидера или через co-located поисковиков, а sandwich-атаки выполняются ботами, которые следят за состоянием пула и посылают вашу транзакцию с более высокой комиссией. Способы защиты соответственно различаются.
Введение в split routing
«Split routing» означает разделение одного логического своппа между несколькими пулами так, чтобы маржинальные цены выровнялись — такой же выход, как если бы каждый кусок менялся по цене своего пула. Это снижает эффективный ценовой импакт, когда какой-либо отдельный пул мелкий относительно размера торговли. Формулировка задачи: дано пуловP_1, ..., P_n с функциями f_i(x), которые преобразуют вход x в выход, найти разделение x_1 + ... + x_n = X, которое максимизирует Σ f_i(x_i). Поскольку каждое f_i вогнутое, оптимум удовлетворяет f'_1(x_1) = f'_2(x_2) = ... = f'_n(x_n) (равные маржинальные цены).
Жадная реализация
Простой подход, который на практике дает результат в пределах ~1% от оптимального:step → ближе к оптимальному, больше итераций. На практике 100–500 срезов — разумная золотая середина.
Реализация через выпуклую оптимизацию
Для production-grade агрегаторов решайте задачу оптимизации напрямую. Каждый пул имеет закрытую формуf'_i(x):
- Constant-product (CPMM / AMM v4):
f'(x) = y * R_y / (R_x + x)^2, гдеR_x, R_y— резервы иy = R_x * R_y / (R_x + x) - R_y… (более простая производная: маржинальная цена — этоR_y / (R_x + x), поэтому разделение для выравнивания маржинальных цен — это одномерный поиск). - CLMM: кусочно-гладкая — внутри одного тика
f'(x)— это рациональная функцияsqrt_price; между тиками она скачет дискретно. Разделяйте с решателем малого шага или рассматривайте каждый смежный тик как собственный «пул».
[(pool_1, x_1), (pool_2, x_2), ...], который этап сборки транзакции преобразует в последовательность инструкций swopp.
Когда split routing помогает
| Размер торговли относительно TVL | Split помогает? |
|---|---|
<0.1% | Нет — один пул доминирует |
| 0.1–1% | Незначительно |
| 1–5% | Да, улучшение на 10–50 bps |
>5% | Да, значительное улучшение |
<$10k на глубоком пуле, не тратьте время на split — накладные расходы gas превышают улучшение. Для агрегатора, котирующего институциональный поток, всегда разделяйте.
Multi-hop маршруты
Когда прямого пула не существует или импакт прямого пула огромен, переходите через промежуточный токен:- Свой слиппедж-лимит (ниже на прямых hop-ах; per-hop на multi-hop).
- Свою комиссию.
- Свой ценовой импакт.
(1 - impact_1) * (1 - impact_2). Импакт 1% twice — это 1.99% всего, не 2%.
Никогда не переходите через один и тот же пул дважды. Прохождение A → B → A → B через один и тот же CLMM просто сжигает комиссии и слиппедж. Агрегаторы должны фильтровать такие маршруты при генерации. (Примечание: это зацикливание одной и той же пары, а не multi-hop в целом — маршрутизация A → USDC → B через разные пулы — это стандартный, полезный паттерн, одобренный выше.)
Per-hop vs end-to-end минимум. С CPI composition (integration-guides/cpi-integration), вы можете установить для каждого hop minimum_amount_out на 0 и обеспечить один end-to-end минимум в вашем proxy. Без CPI каждый hop обеспечивает свой минимум, что требует вычисления разумных промежуточных границ — обычно quote_i * (1 - slippage_bps/10000) per hop.
Sandwich-атаки
Механизм
Бот следит за потоком транзакций в сети. Когда он видит ваш своп:- Front-run: бот покупает тот же токен перед вами, поднимая цену пула.
- Ваша транзакция: вы меняете по худшей цене.
- Back-run: бот продаёт по повышенной цене, захватывая спред.
Защита
Плотный слиппедж. Если ваш minimum-out на 0.5% ниже котировки, sandwich, который движет цену более чем на 0.5%, revert вашу транзакцию, но pre-trade бота уже прошёл по вашей старой цене. Они теряют деньги. Sandwich-боты ориентируются на широкий слиппедж (≥1–2%); слиппедж <0.3% в основном защищён. Private-mempool submission (Jito). Отправьте транзакцию как часть Jito bundle. Bundle не появляются в публичном потоке gossip; боты не могут видеть торговлю в полёте и front-run её. Компромисс: bundle требуют tip на стороне валидатора, и не все лидеры включают Jito (хотя большинство включают). Меньшие размеры торговли. Разделите торговлю на несколько транзакций, чтобы ни одна не двигала цену достаточно, чтобы быть выгодной целью sandwich. Увеличивает общие расходы gas. Randomization по времени. Отправляйте во время низких объёмов, если возможно. Недоступно для интерактивных user swap, но жизнеспособно для scheduled bot flow. CLMM пулы Raydium обычно видят меньше sandwich-активности, чем CPMM, потому что структура single-tick ликвидности означает, что небольшие торговли не двигают цену вообще (они остаются внутри тика). Глубокие CLMM пулы — органически лучшее место для sandwich-защиты.Jito bundles
Jito — это модифицированный Solana валидатор-клиент, который принимает bundles — упорядоченные группы транзакций, приземляющихся атомарно. Боты используют Jito для извлечения MEV; обычные пользователи используют Jito для защиты от этих же ботов.Как работают bundles
- Подключитесь к Jito block engine endpoint (например
https://mainnet.block-engine.jito.wtf). - Отправьте bundle из 1–5 транзакций плюс tip на один из Jito tip аккаунтов.
- Если текущий лидер запускает Jito, ваш bundle рассматривается. Bundle-победитель по аукциону этого слота (bundle с самым высоким tip-per-CU) приземляется; остальные отваливаются.
Размер tip
Размеры tip следуют распределению recent-bundle. Jito публикует real-time процентили:Конструирование bundle
- Tip должен быть в bundle. Включите
SystemProgram.transferна Jito tip аккаунт как инструкцию внутри одной из транзакций bundle (обычно последнюю). Отдельная tip транзакция, не являющаяся частью bundle, игнорируется. - Лидер не включает Jito. ~75% лидеров запускают Jito; ~25% нет. Bundle, отправленные, когда non-Jito лидер держит слот, отваливаются. Клиент автоматически повторит попытку.
- Expiry. Bundle используют ту же модель blockhash-expiry, что и обычные транзакции. Собирайте и отправляйте быстро; ~60s окно.
Bundle vs priority fees
Priority fees подкупают лидера, чтобы он включил вашу транзакцию раньше. Jito bundle дополнительно скрывают транзакцию из публичного мемпула. Используйте priority fees для срочности; используйте bundle для sandwich-защиты. Оба средства вместе: используйте оба на high-value user swap. Смотритеintegration-guides/priority-fee-tuning для sizing priority fees.
MEV-share / revert-protected RPC
Некоторые RPC провайдеры предлагают «MEV-share» или «revert-protected» endpoints, которые внутренне маршрутизируют вашу транзакцию через Jito bundle или эквивалентные приватные пути:- Helius — staked соединения с bundle поддержкой.
- QuickNode — «Revert Protect» endpoint; автоматически формирует bundle вокруг отправленных транзакций.
- Triton — private-flow tier.
Обработка congestion
Во время windows высокого объёма (mainnet launch, major listing, sustained rally), очереди пакетов лидера переполняются. Признаки:- Транзакции остаются unconfirmed 60+ секунд, затем expires с “blockhash not found”.
- Priority fees, которые работали вчера, недостаточны сегодня.
- Simulation успешна, но execution никогда не приземляется.
- Агрессивный retry при expiry. На
TransactionExpiredBlockheightExceeded, переб постройте с fresh blockhash и переотправьте. Не retry на revert — reverts детерминированы. - Multi-RPC broadcast. Отправьте одну и ту же транзакцию на несколько RPC параллельно; какая бы достигла лидера первой, побеждает.
- Priority fee ramping. Начните с 50th процентиля; если первая попытка expires, retry на 75th, затем 95th.
- Jito bundle как fallback. Jito лидеры обычно менее congested, потому что block engine сортирует bundle по tip-per-CU; high-tip bundle получают приоритет.
- Simulate less. При congestion симулируйте один раз в начале; не re-simulate при retry, так как pool state всё равно сдвинется. Re-simulation при congestion часто падает spuriously.
Per-product MEV соображения
CPMM. Высоко sandwichable на low-TVL пулах. Constant-product кривая амплифицирует даже небольшие bot pre-trade. Рекомендуем Jito bundle для любого CPMM trade >0.5% pool TVL. CLMM. Менее sandwichable на глубоких пулах, потому что within-tick торговля не двигает цену. Но cross-tick торговля абсолютно двигает; sandwich на tick crossing — известный паттерн. Плотный слиппедж (<0.3%) — лучшая защита.
AMM v4 + OpenBook. OpenBook orderbook fills работают через одну транзакцию, поэтому sandwich-боты, которые не знают orderbook state, недооценивают ценовой импакт и часто fail. Органически low-MEV venue по этой причине.
LaunchLab. Во время early-bonding-curve фазы front-running распространён на hyped launch. Кривые двигаются быстро и слиппедж широк. Jito bundle сильно рекомендуются. После graduation результирующий CPMM следует обычной CPMM динамике.
Farms. Harvest и stake операции — не своп и не sandwichable. Нет специальной обработки.
Контрольный список
Для production агрегатора / wallet swap UI:- Слиппедж по умолчанию ≤0.5% на обычных парах; пользователь может переопределить.
- Jito bundle submission включён по умолчанию для swap >$1k USD значение.
- Priority fee взят из live estimate (не hard-coded).
- Retry логика различает revert (не retry) от expiry (retry с новым blockhash).
- Multi-hop маршруты устанавливают per-hop минимумы, не end-to-end.
- Split routing активен для торговли >1% TVL любого отдельного пула.
- Pool freshness: re-fetch состояние прямо перед submission; re-quote если stale.
- Sandwich-resistant на shallow пулах: либо Jito-only, либо reject если слиппедж >1%.
Указатели
integration-guides/aggregator— pool discovery, quoting, transaction assembly.integration-guides/priority-fee-tuning— CU и priority fee sizing.integration-guides/cpi-integration— single-slippage-gate multi-hop composition.algorithms/slippage-and-price-impact— formal definitions.
- Jito docs
- Solana validator docs on priority fees
- jito-ts — TypeScript bundle client.


