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

Краткий ответ. Атомарный арбитраж – это одна транзакция, в ходе которой актив покупается дешево в пуле А, продается подороже в пуле Б и полностью возвращается, если сделка туда и обратно невыгодна. В 2026 году проще всего начать с арбитража ETH/USDC между двумя пулами на Base или Arbitrum — одна и та же пара активов, разные DEX (Uniswap V3 против Aerodrome/SushiSwap), небольшой дрейф цен после большого свопа в одном пуле. В этой статье мы разберем это: математику пула, структуру calldata, проскальзывание, симуляцию и то, как на самом деле должно выглядеть ваше первое успешное исполнение.
Если вы еще не знаете, Что такое MEV, начните с этого.
Что делает арбитраж «атомарным»
Три свойства:
- Единая транзакция. Покупка и продажа происходят в одной и той же транзакции, а не в двух последовательных.
- Условное исполнение.
require(profit > 0, ...)откатывает транзакцию, если прибыль не материализуется. - Флэш-заём. Капитал можно взять в долг и вернуть в рамках одной транзакции.
Именно атомарность защищает вас от риска исполнения. Если что-то пойдет не так в середине транзакции, всё откатывается, и вы платите только за газ, а не теряете основную сумму.
Теория за 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 и предсказуемое поведение спреда.
Инструменты
Вам нужно:
- WSS-эндпоинт для вашей целевой сети (например, WSS для Base через Alchemy или собственный узел).
- Foundry, установленный локально для симуляции.
- Тестовый кошелек, пополненный на $50–100 в ETH на газ и оборотный капитал.
- ABI для контрактов маршрутизаторов обоих DEX.
Вся эта настройка выполняется на ноутбуке. Мы еще не в продакшене.
Шаг 1: Следите за спредом
Подпишитесь на свопы в обоих пулах и вычисляйте спред для каждого блока:
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:
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: Имитируйте каждую попытку
Перед отправкой смоделируйте передачу в разветвленной цепочке:
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
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 порядков — распространенная ошибка.
Что дальше после арбитража между двумя пулами
Когда арбитраж между двумя пулами работает без сбоев:
- Треугольный арбитраж между тремя пулами: USDC → WETH → DAI → USDC.
- Мульти-DEX с поиском пути: динамически выбирайте, какие два из N пулов использовать.
- JIT-ликвидность: предоставление и вывод LP-позиции вокруг входящего свопа.
- Межсетевой арбитраж: требует моделирования стоимости моста (продвинутый уровень).
Стек навыков накапливается: математика пула → calldata → симуляция → задержка → биддинг. Атомарный арбитраж между двумя пулами — это основа.
Часто задаваемые вопросы
Нужно ли мне самому писать смарт-контракт?
Для обучения — да. Для продакшена FRB Agent поставляется с верифицированными диспетчерскими контрактами для каждой поддерживаемой сети. Используйте встроенные варианты в продакшене; пишите свой собственный для разработки, чтобы понять, как это работает.
Почему большинство попыток нерентабельны?
Вы конкурируете с ботами, у которых меньшая задержка, лучшая фильтрация сигналов и предварительно одобренная ликвидность. Новички получают оставшиеся спреды. Ничего страшного — есть остатки, которые стоит поймать.
С каким капиталом мне следует начать заниматься арбитражем?
$2–5 тыс. Ниже этого порога соотношение газа к капиталу слишком невыгодное. Выше этого порога можно масштабироваться после настройки.
Это разновидность сэндвич-атаки?
Нет. Арбитраж между двумя пулами на разных DEX не извлекает выгоду из чужого свопа — он уравнивает цены между пулами. Это полезно для протокола, а не вредно.
Могу ли я вместо этого запустить это на Ethereum L1?
Технически да, экономически болезненно для новичка. Газ L1 в размере 10–50 долларов за попытку съедает большую часть спредов при размере сделки <50 тысяч долларов. Начните с L2.
Связанное чтение
- Продвинутые стратегии арбитража ETH
- Фильтры и задержка сканирования мемпула
- Бэкран против сэндвич-стратегии
- Как протестировать стратегию MEV
- Руководство по крипто-арбитражному боту
Это инженерное руководство. Размещайте капитал только после запуска в тестовой сети или в режиме бумажной торговли. Не финансовый совет.
Похожие статьи
Дальнейшее чтение и инструменты
Обсуждение
Примечаний пока нет. Добавьте первое наблюдение или поделитесь ссылкой со своей командой на X (@MCFRB).