Solana
Simulated route
$124.50 model
Example
Ethereum
Private bundle
$840.12 model
Example
BNB
Liquidation test
$45.20 model
Example
Base
Arbitrage test
$12.05 model
Example
Solana
Jito bundle
$310.00 model
Example
Polygon
Route check
$8.45 model
Example
Solana
Simulated route
$124.50 model
Example
Ethereum
Private bundle
$840.12 model
Example
BNB
Liquidation test
$45.20 model
Example
Base
Arbitrage test
$12.05 model
Example
Solana
Jito bundle
$310.00 model
Example
Polygon
Route check
$8.45 model
Example
TraderEvaluationэтап⏱ 6минута чтения

Создание вашего первого атомного арбитража в…

**Краткий ответ**. Атомарный арбитраж – это одна транзакция, в ходе которой актив покупается дешево в пуле А, продается подороже в пуле Б и полностью возвращается, если сделка туда

Поток атомарного арбитража, показывающий расхождение цен двух пулов, зафиксированное в одной транзакции
FR
Команда FRBСпециалисты по MEV
Последнее обновление
#Arbitrage#MEV#Tutorial#Beginner#Engineering

Краткий ответ. Атомарный арбитраж – это одна транзакция, в ходе которой актив покупается дешево в пуле А, продается подороже в пуле Б и полностью возвращается, если сделка туда и обратно невыгодна. В 2026 году проще всего начать с арбитража ETH/USDC между двумя пулами на Base или Arbitrum — одна и та же пара активов, разные DEX (Uniswap V3 против Aerodrome/SushiSwap), небольшой дрейф цен после большого свопа в одном пуле. В этой статье мы разберем это: математику пула, структуру calldata, проскальзывание, симуляцию и то, как на самом деле должно выглядеть ваше первое успешное исполнение.

Если вы еще не знаете, Что такое MEV, начните с этого.

Что делает арбитраж «атомарным»

Три свойства:

  1. Единая транзакция. Покупка и продажа происходят в одной и той же транзакции, а не в двух последовательных.
  2. Условное исполнение. require(profit > 0, ...) откатывает транзакцию, если прибыль не материализуется.
  3. Флэш-заём. Капитал можно взять в долг и вернуть в рамках одной транзакции.

Именно атомарность защищает вас от риска исполнения. Если что-то пойдет не так в середине транзакции, всё откатывается, и вы платите только за газ, а не теряете основную сумму.

Теория за 60 секунд

Два пула оценивают один и тот же актив немного по-разному. После того, как крупный своп по пулу А отталкивает его цену от рыночной, пул Б становится дешевле. Вы покупаете на B, продаете на A, фиксируете спред.

Для двух пулов AMM, использующих постоянный продукт (x * y = k):

Effective_price_A = (reserve_y_A / reserve_x_A) × (1 - fee_A)
Effective_price_B = (reserve_y_B / reserve_x_B) × (1 - fee_B)

Если Effective_price_A > Effective_price_B + slippage_buffer, арбитраж существует.

Оптимальный размер сделки — это размер, который уравнивает предельные цены двух пулов. Существует решение в закрытой форме, но вы можете использовать двоичный поиск или позаимствовать помощников Foundry.

Выбор первой пары

Выбирайте пару с:

  • Высокий объем в обоих пулах. Низкий объем = устаревшие цены, но нет глубины заполнения.
  • Один и тот же уровень комиссионных в обоих пулах (например, Uniswap V3 со скоростью 5 б.п. или Aerodrome 5 б.п.). Разные уровни комиссий усложняют математику.
  • Прямая пара, а не многопереходная. Сохраните многопереходную настройку на будущее.
  • Ликвидный базовый актив. ETH/USDC, ETH/USDT, USDC/USDT. Не экзотика.

Рекомендуемая стартовая пара на Base: WETH/USDC. Два пула для сравнения:

  • Стейбл-пул Aerodrome (комиссия 1 б.п.)
  • Пул Uniswap V3 с уровнем 0,05% (комиссия 5 б.п.)

У них сотни миллионов TVL и предсказуемое поведение спреда.

Инструменты

Вам нужно:

  1. WSS-эндпоинт для вашей целевой сети (например, WSS для Base через Alchemy или собственный узел).
  2. Foundry, установленный локально для симуляции.
  3. Тестовый кошелек, пополненный на $50–100 в ETH на газ и оборотный капитал.
  4. ABI для контрактов маршрутизаторов обоих DEX.

Вся эта настройка выполняется на ноутбуке. Мы еще не в продакшене.

Шаг 1: Следите за спредом

Подпишитесь на свопы в обоих пулах и вычисляйте спред для каждого блока:

js

js
const aero = new ethers.Contract(AERO_POOL, AERO_ABI, provider);
const uni  = new ethers.Contract(UNI_POOL, UNI_ABI, provider);

provider.on('block', async (n) => {
  const [r0a, r1a] = await aero.getReserves();
  const [r0u, r1u] = await uni.getReserves();
  // ... compute price each side, then spread
});

Наблюдайте в течение часа. Большинство блоков: спред <1 б.п. Некоторые блоки (после крупных свопов): спред 5–30 б.п. Отметьте частоту появления прибыльных спредов.

Шаг 2: Порог прибыльности

Точно определите, что значит «прибыльно». Для рабочего объема в $5000:

gross_profit = trade_size × spread_bps / 10000
gas_cost     = gas_units × gas_price (в USD)
slippage     = trade_size × ваш_буфер_проскальзывания
fees_paid    = trade_size × (fee_A + fee_B)
net_profit   = gross_profit − gas_cost − slippage − fees_paid

На Base газ для транзакции арбитража между двумя пулами составляет ~250–400 тыс. газовых единиц. При типичной для 2026 года цене газа ~0.001 gwei это $0.04–$0.10. Дешево.

Для сделки на $5000 со спредом 8 б.п.:

  • Брутто: $4.00
  • Газ: $0.08
  • Буфер проскальзывания: $1.50 (3 б.п.)
  • Комиссии: $3.00 (уже учтены через проскальзывание в пуле)
  • Чистая прибыль: ~$2.40

Это тонкая маржа. Используйте спред > 10 б.п. как минимальный порог фильтрации для сделки на $5 тыс.

Шаг 3: Формирование calldata

Структура calldata для арбитража между двумя пулами:

1. Approve router_B (if not pre-approved) - skip in production with infinite approvals
2. swap on router_B: USDC → WETH
3. swap on router_A: WETH → USDC
4. require(usdc_out > usdc_in + min_profit, "unprofitable")

Для простоты используйте диспетчерский контракт, который выполняет все четыре операции за один вызов. FRB Agent поставляется с таким контрактом (верифицированным в каждой сети), либо напишите свой собственный минимальный контракт.

Минимальный пример на Solidity:

solidity
function executeArb(
    bytes calldata buyCalldata,
    bytes calldata sellCalldata,
    address tokenOut,
    uint256 minProfit
) external {
    uint256 startBalance = IERC20(tokenOut).balanceOf(address(this));
    (bool ok1, ) = router_B.call(buyCalldata);
    require(ok1, "buy failed");
    (bool ok2, ) = router_A.call(sellCalldata);
    require(ok2, "sell failed");
    uint256 endBalance = IERC20(tokenOut).balanceOf(address(this));
    require(endBalance >= startBalance + minProfit, "no profit");
}

Реальные реализации сложнее (обработка собственного ETH, нескольких маршрутизаторов, обратных вызовов для пулов V3). Относитесь к вышеизложенному как к иллюстративному.

Шаг 4: Имитируйте каждую попытку

Перед отправкой смоделируйте передачу в разветвленной цепочке:

bash
anvil --fork-url $RPC_URL --fork-block-number latest
cast send --private-key $TEST_KEY $DISPATCHER \
    "executeArb(bytes,bytes,address,uint256)" \
    $BUY_CALLDATA $SELL_CALLDATA $WETH 1000000

Если симуляция прошла успешно с прибылью > min_profit, можно отправлять транзакцию. Пропуск симуляции — причина №1 ревертов у начинающих ботов.

Шаг 5: Отправьте

Для Base отправьте данные в общедоступный мемпул (PBS в 2026 году пока не используется для большинства L2). Используйте умеренную плату за приоритет, чтобы попасть в следующий блок:

js

js
const tx = await wallet.sendTransaction({
  to: DISPATCHER,
  data: dispatchCalldata,
  gasLimit: 500000,
  maxFeePerGas: ethers.parseUnits('0.0015', 'gwei'),
  maxPriorityFeePerGas: ethers.parseUnits('0.0005', 'gwei')
});
const receipt = await tx.wait();
console.log('Status:', receipt.status, 'Gas used:', receipt.gasUsed);

Если receipt.status === 1, вы его получили. Посмотрите receipt.logs, чтобы узнать фактическую полученную прибыль.

Шаг 6: Измерьте, что произошло

Ваши первые 20 попыток в основном будут:

  • Реверт (опередил другой арбитражёр): 50–70%
  • Исполнится, но хуже, чем в симуляции: 15–25 %
  • Исполнится с прибылью: 10–25%

Это нормально. Соотношение улучшается по мере настройки (меньшая задержка, лучшая фильтрация сигнала, более разумный размер).

Что регистрировать:

  • Спред на момент принятия решения
  • Спред на момент исполнения
  • Прогнозируемая прибыль против фактически полученной
  • Использованный газ по сравнению с расчетным
  • Почему произошел каждый реверт (помогают трейсы Foundry)

Шаг 7: Дорабатываем цикл

После 100 попыток вы увидите закономерности:

  • Спреды выше определенного порога исполняются более надежно
  • В определенные часы частота арбитражных возможностей выше
  • Конкретные конкуренты быстрее вас в определенные периоды

Используйте эти закономерности, чтобы фильтровать, что вы отправляете. Меньше попыток, но более высокого качества — лучше, чем стрелять во все стороны.

Распространенные ошибки первого бота

  • Отсутствует approval: контракт реверится при первом же вызове. Добавьте бесконечный approval в скрипт деплоя.
  • Неправильный уровень комиссии пула: математика обещает прибыль, а реальный своп показывает убыток, потому что в расчетах использовался пул с комиссией 5 б.п., а вызывался пул с комиссией 30 б.п.
  • Устаревшие резервы: вы прочитали резервы в блоке N, отправили транзакцию в блоке N+1 — состояние успело измениться. Перечитывайте резервы внутри контракта или используйте цены на основе callback.
  • Слишком узкий лимит проскальзывания: сделки, которые были бы немного прибыльными, реверятся. Откалибруйте лимит по фактическим результатам в сравнении с симуляцией.
  • Десятичные знаки токенов: у USDC — 6, у WETH — 18. Ошибка в расчетах на 12 порядков — распространенная ошибка.

Что дальше после арбитража между двумя пулами

Когда арбитраж между двумя пулами работает без сбоев:

  1. Треугольный арбитраж между тремя пулами: USDC → WETH → DAI → USDC.
  2. Мульти-DEX с поиском пути: динамически выбирайте, какие два из N пулов использовать.
  3. JIT-ликвидность: предоставление и вывод LP-позиции вокруг входящего свопа.
  4. Межсетевой арбитраж: требует моделирования стоимости моста (продвинутый уровень).

Стек навыков накапливается: математика пула → calldata → симуляция → задержка → биддинг. Атомарный арбитраж между двумя пулами — это основа.

Часто задаваемые вопросы

Нужно ли мне самому писать смарт-контракт?

Для обучения — да. Для продакшена FRB Agent поставляется с верифицированными диспетчерскими контрактами для каждой поддерживаемой сети. Используйте встроенные варианты в продакшене; пишите свой собственный для разработки, чтобы понять, как это работает.

Почему большинство попыток нерентабельны?

Вы конкурируете с ботами, у которых меньшая задержка, лучшая фильтрация сигналов и предварительно одобренная ликвидность. Новички получают оставшиеся спреды. Ничего страшного — есть остатки, которые стоит поймать.

С каким капиталом мне следует начать заниматься арбитражем?

$2–5 тыс. Ниже этого порога соотношение газа к капиталу слишком невыгодное. Выше этого порога можно масштабироваться после настройки.

Это разновидность сэндвич-атаки?

Нет. Арбитраж между двумя пулами на разных DEX не извлекает выгоду из чужого свопа — он уравнивает цены между пулами. Это полезно для протокола, а не вредно.

Могу ли я вместо этого запустить это на Ethereum L1?

Технически да, экономически болезненно для новичка. Газ L1 в размере 10–50 долларов за попытку съедает большую часть спредов при размере сделки <50 тысяч долларов. Начните с L2.

Связанное чтение


Это инженерное руководство. Размещайте капитал только после запуска в тестовой сети или в режиме бумажной торговли. Не финансовый совет.

Делиться𝕏 Твиттерв LinkedInf Facebook

Похожие статьи

Дальнейшее чтение и инструменты

Обсуждение

Примечаний пока нет. Добавьте первое наблюдение или поделитесь ссылкой со своей командой на X (@MCFRB).

Оставить заметку
Заметки хранятся только локально в вашем браузере.
Контролируйте пульс

Расширьте свое исполнение

Увеличьте свои преимущества, изучив полный набор инструментов FRB. От телеметрии институционального уровня до готовых к экспорту сценариев стратегии.

Готовы развиваться?

Сделайте следующий шаг

Независимо от того, проверяете ли вы безопасность терминала или запускаете свой первый пакет, путешествие по FRB начинается здесь.

Рекомендуется

Установить агент FRB

Безопасная сборка Windows. Проверено через SHA-256 для максимальной целостности.

Рекомендуется

Прочтите документацию: краткое руководство

Освойте настройку за 15 минут. От сопряжения кошелька до первого пакета.

Рекомендуется

Запустить панель мониторинга

Контролируйте свой Ops Pulse и управляйте маршрутами транзакций в режиме реального времени.