Автоматизация торговли на DEX: Руководство для разработчиков

Курс для алготрейдеров, переходящих с CEX на децентрализованные биржи. Вы изучите механику AMM [habr.com](https://habr.com/ru/companies/metalamp/articles/749538/), ценообразование в пулах ликвидности [habr.com](https://habr.com/ru/articles/903326/), расчет комиссий и проскальзывания, виды площадок [octobit.com.ua](https://octobit.com.ua/ru/dex-birzha-polnoe-rukovodstvo-po-rabote-s-deczentralizovannymi-birzhami) и автоматизацию сделок на Python.

1. Архитектура DEX и блокчейны: Отличия от CEX, смарт-контракты и газ

Архитектура DEX и блокчейны: Отличия от CEX, смарт-контракты и газ

Разработка торговых роботов для классических криптовалютных площадок опирается на стандартную клиент-серверную архитектуру. Программа отправляет HTTP-запрос на создание ордера, сервер биржи проверяет баланс пользователя, помещает заявку в книгу ордеров и при совпадении цен исполняет сделку. Переход к автоматизации на децентрализованных биржах (DEX) требует полного пересмотра этого подхода, так как меняется сама физика торгового процесса и инфраструктура взаимодействия.

Парадигма Web3: Отказ от центрального сервера

Главное отличие децентрализованных площадок заключается в отсутствии единого центра управления активами и вычислениями. На традиционных биржах трейдер передает свои средства на кошельки компании (кастодиальное хранение). На DEX пользователь сохраняет полный контроль над приватными ключами, а обмен происходит напрямую между кошельками участников с помощью программного кода.

| Характеристика | Централизованная биржа (CEX) | Децентрализованная биржа (DEX) | |---|---|---| | Хранение активов | На кошельках биржи (кастодиально) | На личном кошельке пользователя (некастодиально) | | Исполнение сделок | Внутренняя база данных (движок сведения) | Смарт-контракт в публичном блокчейне | | Точка доступа | REST API, WebSocket | RPC-узел (Node) | | Скорость исполнения | Миллисекунды | Зависит от времени генерации блока (от миллисекунд до минут) | | Комиссии | Фиксированный процент от объема сделки | Процент пулу ликвидности + плата за газ сети |

Вместо проприетарного ядра сведения ордеров (matching engine) на DEX работают смарт-контракты — неизменяемые алгоритмы, загруженные в распределенную сеть. Торговый робот не может просто отправить команду «купить 1 BTC» на сервер. Он должен сформировать криптографически подписанную транзакцию, содержащую инструкции для конкретного смарт-контракта, и транслировать ее в сеть.

> Смарт-контракты выполняют роль беспристрастного арбитра. Код строго регламентирует, сколько токенов должен получить пользователь при обмене, и если условия не выполняются (например, цена изменилась слишком сильно), транзакция автоматически отменяется, а средства остаются на кошельке трейдера. > > Habr: Чем DEX отличается от CEX

Инфраструктура подключения: RPC-узлы и Мемпул

Для взаимодействия с блокчейном торговому алгоритму требуется точка входа. Эту роль выполняют RPC-узлы (Remote Procedure Call). Узел — это сервер, который хранит копию блокчейна и принимает запросы от пользователей. Робот отправляет подписанную транзакцию на RPC-узел, который затем ретранслирует ее остальным участникам сети.

После отправки транзакция не исполняется мгновенно. Она попадает в мемпул (mempool от memory pool) — специальную область памяти, где хранятся неподтвержденные операции. Майнеры или валидаторы выбирают транзакции из мемпула для включения в следующий блок.

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

Блокчейны и время исполнения

Скорость работы торгового робота на DEX жестко ограничена техническими характеристиками выбранного блокчейна. Время, необходимое для подтверждения сделки, зависит от времени генерации одного блока.

  • Ethereum (ETH): Блоки создаются примерно каждые 12 секунд. Это означает, что минимальная задержка между отправкой транзакции и ее исполнением составит 12 секунд, что делает невозможным высокочастотный трейдинг (HFT) в классическом понимании.
  • Binance Smart Chain (BSC): Время блока составляет около 3 секунд. Сеть предлагает компромисс между децентрализацией и скоростью.
  • Solana (SOL): Использует архитектуру без виртуальной машины Ethereum (Non-EVM) и достигает времени блока около 400 миллисекунд, что максимально приближает опыт торговли к централизованным биржам.
  • Газ: Топливо для транзакций и расчет издержек

    Любое изменение состояния блокчейна (включая обмен токенов) требует вычислительных ресурсов. Оплата этих ресурсов называется газом (Gas). Понимание механики газа критически важно для разработчиков, так как неправильный расчет комиссий сделает торговую стратегию убыточной.

    В сетях, совместимых с виртуальной машиной Ethereum (EVM), итоговая комиссия за транзакцию рассчитывается по следующему принципу:

    Итоговая комиссия = Использованный газ × Цена газа

    Каждая операция в смарт-контракте имеет фиксированную стоимость в единицах газа. Например, простой перевод токенов может стоить 21 000 единиц, а сложный обмен на DEX — от 150 000 до 300 000 единиц.

    Цена газа измеряется в долях базовой криптовалюты сети. В Ethereum это Gwei, где .

    Предположим, робот совершает обмен на децентрализованной бирже. Смарт-контракт потратил 200 000 единиц газа. Текущая цена газа в сети составляет 30 Gwei. Расчет комиссии в ETH: 200 000 × 30 × = 0,006 ETH. При рыночной цене Ethereum в 3000 USD, стоимость одной только сетевой комиссии составит 18 USD. Робот должен учитывать эту сумму при расчете потенциальной прибыли от арбитражной или спекулятивной сделки. Если ожидаемая прибыль от разницы цен составляет 10 USD, сделка принесет убыток.

    Для ускорения транзакции боты могут использовать приоритетную комиссию (Priority Fee). Валидаторы экономически мотивированы включать в блок транзакции с наибольшей ценой газа. Если , транзакция робота будет обработана быстрее конкурентов, находящихся в мемпуле с базовой комиссией.

    Взаимодействие с блокчейном на Python

    Для автоматизации торговли на DEX разработчики используют специализированные библиотеки, которые берут на себя работу с криптографией и формирование RPC-запросов. В экосистеме Python стандартом де-факто является библиотека web3.py.

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

    Этот код демонстрирует фундаментальное отличие от работы с CEX: вместо запроса к API биржи для получения торговых комиссий, робот обращается напрямую к блокчейну, чтобы узнать стоимость вычислительных ресурсов сети в данный момент времени. Понимание этой архитектуры открывает путь к созданию надежных систем для взаимодействия со смарт-контрактами торговых площадок.

    2. Автоматизированные маркет-мейкеры (AMM) и математика пулов ликвидности

    Автоматизированные маркет-мейкеры (AMM) и математика пулов ликвидности

    Переход от централизованных бирж (CEX) к децентрализованным (DEX) требует от разработчиков торговых роботов полного изменения логики расчета цен и объемов. В предыдущей статье мы разобрали, как транзакции попадают в мемпул и почему за каждое вычисление нужно платить газ. Теперь необходимо понять, как именно происходит обмен активов в среде, где нет привычного стакана ордеров (Order Book) и встречных заявок от других трейдеров.

    На DEX эту задачу решает Автоматизированный маркет-мейкер (AMM). Это программный протокол, который алгоритмически определяет цену актива и обеспечивает мгновенную ликвидность для сделок.

    > Автоматизированный маркет-мейкер (AMM) — это алгоритмическая система сопоставления сделок, которая использует математические формулы для определения цены активов, позволяя пользователям торговать напрямую со смарт-контрактом. > > TabTrader Academy

    Архитектура пулов ликвидности

    Вместо того чтобы сводить покупателя с продавцом, AMM предлагает трейдеру совершить обмен с пулом ликвидности (Liquidity Pool). Пул — это смарт-контракт, в котором заблокированы резервы двух различных токенов (например, ETH и USDT).

    Пользователи, которые предоставляют свои активы в этот смарт-контракт, называются провайдерами ликвидности (Liquidity Providers, LP). За предоставление капитала они получают долю от торговых комиссий, которые генерирует пул.

    | Характеристика | Книга ордеров (CEX) | AMM (DEX) | |---|---|---| | Контрагент в сделке | Другой трейдер (Peer-to-Peer) | Смарт-контракт (Peer-to-Contract) | | Ценообразование | Спрос и предложение в стакане | Строгая математическая формула | | Источник ликвидности | Маркет-мейкеры выставляют лимитные ордера | Провайдеры блокируют активы в пуле | | Проскальзывание | Зависит от плотности лимитных заявок | Зависит от размера сделки относительно резервов пула |

    Для торгового робота это означает, что сделка может быть исполнена в любой момент, пока в пуле есть активы. Роботу не нужно ждать, пока кто-то согласится на его цену — смарт-контракт всегда готов к обмену по текущему алгоритмическому курсу.

    Формула постоянного произведения

    Самая популярная математическая модель, лежащая в основе Uniswap V2 и множества других DEX, называется формулой постоянного произведения. Она выглядит следующим образом:

    Где: * — текущий резерв первого токена в пуле (например, ETH). * — текущий резерв второго токена в пуле (например, USDT). * — константа, которая должна оставаться неизменной после совершения сделки (без учета комиссий).

    Представим пул ликвидности ETH/USDT. В смарт-контракте заблокировано 10 ETH и 30 000 USDT. Рассчитаем константу: 10 × 30 000 = 300 000. Текущая спотовая цена одного ETH в этом пуле составляет 30 000 / 10 = 3000 USDT.

    Влияние на цену (Price Impact)

    Главная сложность при разработке торговых алгоритмов для AMM — это динамическое изменение цены прямо во время сделки. Когда робот покупает ETH, он забирает часть ETH из пула и добавляет туда USDT. Поскольку константа должна сохраняться, баланс пула смещается, и цена актива меняется.

    Допустим, торговый бот хочет купить 1 ETH из нашего пула (где 10 ETH и 30 000 USDT, ). Если бот заберет 1 ETH, в пуле останется 9 ETH. Чтобы константа осталась равна 300 000, новый баланс USDT должен составить: 300 000 / 9 = 33 333,33 USDT.

    Следовательно, бот должен внести в пул разницу между новым и старым балансом USDT: 33 333,33 - 30 000 = 3333,33 USDT.

    Хотя начальная спотовая цена была 3000 USDT, фактическая цена исполнения для бота составила 3333,33 USDT за 1 ETH. Эта разница называется влиянием на цену (Price Impact).

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

    Учет торговых комиссий пула

    В реальности константа немного увеличивается с каждой сделкой. Это происходит потому, что AMM взимает торговую комиссию (обычно 0,3% в Uniswap V2), которая остается в пуле в качестве вознаграждения для провайдеров ликвидности.

    При расчете точного количества получаемых токенов алгоритм должен учитывать эту комиссию. Формула для расчета суммы получения выглядит так: Сумма получения = (Резерв B × Ввод A × 0,997) / (Резерв A + Ввод A × 0,997).

    Реализуем этот математический расчет на Python. Это базовая функция, которую использует любой торговый робот перед формированием транзакции обмена:

    В этом примере бот продает 1 ETH. Из-за влияния на цену и комиссии 0,3% он получает не 3000 USDT, а только 2719,71 USDT. Если бот не сделает этот расчет заранее, его стратегия может оказаться глубоко убыточной.

    Эволюция AMM: Концентрированная ликвидность

    Модель надежна, но неэффективна с точки зрения использования капитала, так как ликвидность размазана по всему ценовому спектру от нуля до бесконечности. Для решения этой проблемы была разработана концентрированная ликвидность (Concentrated Liquidity), внедренная в Uniswap V3.

    В этой модели провайдеры ликвидности могут указывать конкретный ценовой диапазон, в котором будут работать их активы. Например, LP может разместить свои USDT и USDC только в диапазоне от 0,99 до 1,01 долл.

    Для торгового робота это меняет механику расчетов. Ликвидность больше не распределена равномерно. В узких диапазонах вокруг текущей рыночной цены скапливаются огромные объемы активов. Это радикально снижает проскальзывание для трейдеров. Бот может обменять 100 000 USDT на USDC практически без влияния на цену, так как на этом ценовом «тике» (tick) сосредоточены миллионы долларов ликвидности. Однако математика расчета цены становится кусочно-линейной и требует запроса данных о ликвидности на каждом отдельном тике.

    Маршрутизация и агрегация ликвидности

    На централизованной бирже все торги активом происходят в едином стакане. В DeFi ликвидность фрагментирована. Существуют сотни пулов на разных DEX (Uniswap, SushiSwap, PancakeSwap).

    Если торговому алгоритму нужно обменять токен A на токен C, но прямого пула с достаточной ликвидностью нет, бот должен использовать маршрутизацию (Routing). Он обменивает токен A на промежуточный токен B (например, WETH), а затем токен B на токен C в рамках одной транзакции.

    > Для оптимизации сделок разработчики используют агрегаторы DEX (например, 1inch), смарт-контракты которых автоматически разбивают крупный ордер на несколько мелких и проводят их через разные пулы одновременно, минимизируя влияние на цену. > > ForkLog

    Разработка прибыльного торгового робота для DEX сводится к непрерывному сканированию состояний смарт-контрактов через RPC-узлы. Бот собирает данные о резервах пулов, рассчитывает потенциальный выход токенов по математическим формулам AMM, вычитает стоимость газа и отправляет транзакцию только в том случае, если итоговый баланс приносит прибыль.

    3. Ценообразование, расчет проскальзывания (slippage) и комиссий на DEX

    Ценообразование, расчет проскальзывания (slippage) и комиссий на DEX

    Разработка прибыльного торгового алгоритма для децентрализованной биржи требует точного математического моделирования каждого этапа сделки. На централизованных биржах (CEX) робот взаимодействует с детерминированной средой: он видит стакан ордеров через API, отправляет лимитную или рыночную заявку и получает предсказуемый результат. В децентрализованных финансах (DeFi) среда асинхронна, а цены меняются динамически под воздействием других участников сети.

    Ожидание против реальности: Природа изменения цены

    Когда торговый бот запрашивает данные о резервах пула ликвидности через RPC-узел, он получает «снимок» состояния смарт-контракта на момент последнего закрытого блока. На основе этих данных алгоритм рассчитывает ожидаемую цену исполнения.

    Однако блокчейны работают с задержкой. В сетях, совместимых с виртуальной машиной Ethereum (EVM), транзакция сначала попадает в мемпул (mempool) — зону ожидания неподтвержденных транзакций. Пока транзакция бота ждет включения в следующий блок, другие трейдеры могут совершить обмены в том же пуле ликвидности.

    В результате к моменту фактического исполнения смарт-контракта баланс резервов и изменится, а значит, изменится и цена актива.

    > Проскальзывание — это ситуация, когда средняя цена сделки отличается от ожидаемой. Обычно конечная цена меняется в рыночных ордерах, когда для исполнения ордера не хватает ликвидности или рынок чрезмерно волатильный. > > Binance Academy

    Разработчикам критически важно разделять два смежных, но фундаментально разных понятия: влияние на цену и проскальзывание.

    | Характеристика | Влияние на цену (Price Impact) | Проскальзывание (Slippage) | |---|---|---| | Причина | Размер вашей собственной сделки относительно пула | Сделки других участников, пока ваша транзакция в мемпуле | | Предсказуемость | 100% детерминировано, рассчитывается до отправки | Вероятностно, зависит от активности сети и времени блока | | Зависимость от времени | Не зависит от времени | Прямо пропорционально времени нахождения в мемпуле | | Метод контроля | Маршрутизация (разбиение ордера на части) | Установка параметра amountOutMin в смарт-контракте |

    Математика проскальзывания и защита капитала

    Чтобы защитить трейдеров от бесконечного проскальзывания, смарт-контракты DEX (например, Uniswap Router) требуют передавать параметр минимально допустимого количества получаемых токенов. Если из-за действий других трейдеров итоговая сумма окажется меньше этого значения, смарт-контракт вызовет ошибку (revert), транзакция будет отменена, а бот потеряет только комиссию сети (газ), сохранив основной капитал.

    Для расчета этого параметра используется допуск проскальзывания (Slippage Tolerance) — максимальный процент ухудшения цены, на который согласен алгоритм.

    Формула расчета минимально допустимого объема выглядит так:

    Где: * — минимально допустимое количество получаемых токенов (amountOutMin). * — ожидаемое количество токенов, рассчитанное по текущим резервам пула. * — допуск проскальзывания в десятичном виде (например, 1% записывается как 0,01).

    Пример из практики: торговый бот планирует обменять 1000 USDT на WETH. Текущие резервы пула показывают, что ожидаемый выход () составит 0,5 WETH. Бот настроен на допуск проскальзывания 0,5% ().

    Рассчитаем минимальный выход: WETH. Если к моменту исполнения транзакции цена WETH вырастет настолько, что смарт-контракт сможет выдать только 0,4970 WETH, сделка будет автоматически отменена.

    Структура комиссий в DeFi

    При расчете чистой прибыли (Net Profit) торговой стратегии разработчик должен учитывать два совершенно разных типа издержек. Ошибка в учете хотя бы одного из них делает арбитражного бота убыточным.

  • Торговая комиссия пула (Liquidity Provider Fee)
  • Взимается самим смарт-контрактом DEX за обмен. В Uniswap V2 она фиксирована и составляет 0,3%. В Uniswap V3 она может быть 0,01%, 0,05%, 0,3% или 1% в зависимости от пула. Эта комиссия вычитается из суммы входящего токена до расчета по формуле постоянного произведения.

  • Сетевая комиссия (Gas Fee)
  • Плата валидаторам блокчейна за вычисление смарт-контракта и запись данных в блок. Оплачивается строго в базовой монете сети (ETH для Ethereum, BNB для BNB Chain, SOL для Solana).

    Сложность для алгоритма заключается в том, что торговая комиссия удерживается в торгуемых токенах, а газ оплачивается в нативном токене сети. Для корректного расчета PnL (Profit and Loss) бот должен привести все издержки к единой валюте котирования (например, к USDT), запросив текущую цену газа и цену нативного токена.

    Реализация расчетов на Python

    Ниже представлен пример функции на языке Python, которая объединяет расчет ожидаемого выхода с учетом торговой комиссии пула и вычисляет параметр amountOutMin для защиты от проскальзывания.

    Этот код демонстрирует базовую логику, которую выполняет любой торговый бот за миллисекунды до формирования транзакции. Полученное значение amount_out_min упаковывается в данные транзакции и отправляется в блокчейн.

    Уязвимость высокого проскальзывания: MEV и сэндвич-атаки

    Начинающие разработчики часто совершают фатальную ошибку: чтобы транзакции не отменялись из-за волатильности, они устанавливают допуск проскальзывания на уровне 5-10%. В публичных блокчейнах это равносильно добровольной отдаче денег.

    В мемпуле работают специализированные алгоритмы — MEV-боты (Maximal Extractable Value). Они сканируют все ожидающие транзакции. Если MEV-бот видит вашу заявку на покупку WETH с огромным допуском проскальзывания, он проводит сэндвич-атаку (Sandwich Attack):

  • MEV-бот покупает WETH прямо перед вашей транзакцией (используя более высокую цену газа для приоритета), искусственно задирая цену в пуле.
  • Ваша транзакция исполняется по этой искусственно завышенной цене. Поскольку ваш amountOutMin позволяет купить WETH на 10% дороже, смарт-контракт пропускает сделку.
  • Сразу после вашей покупки MEV-бот продает свои WETH обратно в пул, забирая гарантированную прибыль, которая была извлечена из вашего капитала.
  • Именно поэтому расчет проскальзывания — это балансирование на тонкой грани. Установите слишком маленькое значение — транзакция будет постоянно отменяться, сжигая газ впустую. Установите слишком большое — станете жертвой хищных MEV-алгоритмов. Оптимальное значение рассчитывается динамически на основе текущей волатильности актива и глубины ликвидности в конкретном пуле.

    4. Виды децентрализованных площадок: AMM, ончейн-стаканы и DEX-агрегаторы

    Виды децентрализованных площадок: AMM, ончейн-стаканы и DEX-агрегаторы

    Разработчики торговых алгоритмов, приходящие из мира традиционных финансов или централизованных криптовалютных бирж (CEX), привыкли к единой архитектуре: есть книга ордеров (стакан), движок сведения заявок (Matching Engine) и API для отправки запросов. В децентрализованных финансах (DeFi) архитектура площадок фундаментально отличается и делится на несколько независимых направлений.

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

    Автоматизированные маркет-мейкеры: Торговля с алгоритмом

    Автоматизированный маркет-мейкер (Automated Market Maker, AMM) — это доминирующая модель в DeFi. Здесь нет стакана ордеров, нет покупателей и продавцов, выставляющих встречные заявки. Торговый бот взаимодействует напрямую со смарт-контрактом, который хранит резервы двух токенов. Эти резервы называются пулом ликвидности.

    > AMM — это протокол децентрализованной биржи, который полагается на математическую формулу для оценки активов. Вместо использования книги ордеров, как на традиционной бирже, активы оцениваются в соответствии с алгоритмом ценообразования. > > Binance Academy

    В основе классического AMM (например, Uniswap V2) лежит формула постоянного произведения:

    Где: * — количество первого токена в пуле ликвидности. * — количество второго токена в пуле ликвидности. * — константа, которая должна оставаться неизменной после завершения сделки (без учета комиссий).

    Когда ваш алгоритм отправляет транзакцию на покупку актива, он добавляет один токен в пул (увеличивая ) и забирает другой (уменьшая ). Поскольку фиксировано, цена актива алгоритмически изменяется в зависимости от объема вашей сделки. Это и есть механизм формирования цены.

    Пример расчета: Пул содержит 10 ETH и 30 000 USDT. Константа . Ваш бот хочет купить 1 ETH. Чтобы в пуле осталось 9 ETH, количество USDT должно стать . Значит, бот должен отправить в смарт-контракт USDT. Средняя цена исполнения составит 3 333,33 USDT за 1 ETH, хотя текущая спотовая цена была 3 000 USDT. Разница в 333,33 USDT — это влияние на цену (Price Impact).

    Для автоматизации подобных расчетов разработчики используют локальные симуляции состояния пула.

    Ончейн-стаканы: Классика в децентрализованной среде

    Несмотря на популярность AMM, профессиональные маркет-мейкеры предпочитают работать с лимитными ордерами. Для этого были созданы ончейн-стаканы (Central Limit Order Book, CLOB).

    В этой модели смарт-контракт хранит массив заявок пользователей. Когда бот отправляет лимитный ордер, он записывается в блокчейн. Если появляется встречный рыночный ордер, смарт-контракт выполняет сведение (matching) и переводит активы.

    Главная проблема ончейн-стаканов — стоимость и скорость транзакций. В сетях, совместимых с виртуальной машиной Ethereum (EVM), где время блока составляет 12-15 секунд, а комиссии высоки, поддерживать актуальный стакан экономически невыгодно. Бот разорится на оплате газа только за отмену и перестановку ордеров.

    Поэтому полноценные ончейн-стаканы (например, OpenBook) существуют в основном на высокоскоростных блокчейнах вроде Solana, где время блока составляет около 400 миллисекунд, а комиссия за транзакцию — доли цента.

    | Характеристика | Централизованная биржа (CEX) | AMM (Uniswap, PancakeSwap) | Ончейн-стакан (OpenBook) | |---|---|---|---| | Хранение активов | На кошельках биржи | В смарт-контракте (пуле) | На кошельках пользователей / в контракте | | Ценообразование | Спрос и предложение (стакан) | Математическая формула | Спрос и предложение (стакан) | | Комиссия за отмену ордера | Бесплатно | Неприменимо (нет ордеров) | Требует оплаты газа сети | | Задержка (Latency) | Миллисекунды | Равна времени блока | Равна времени блока |

    DEX-агрегаторы: Оптимизация маршрутов исполнения

    С ростом количества DEX возникла проблема фрагментации ликвидности. Один и тот же актив может торговаться в десятках разных пулов на разных биржах. Если бот попытается купить большой объем токенов в одном пуле, он столкнется с огромным проскальзыванием.

    Здесь на помощь приходят DEX-агрегаторы (например, 1inch или Jupiter). Это протоколы, которые сканируют все доступные пулы ликвидности и ончейн-стаканы в сети, чтобы найти наилучший маршрут для сделки.

    > DEX-агрегатор — это поисковая система для ликвидности. Он разбивает один большой ордер на несколько мелких и отправляет их через разные смарт-контракты одновременно в рамках одной транзакции.

    Пример из практики: Бот хочет обменять 100 000 USDC на WETH. Агрегатор рассчитывает, что покупка всего объема на Uniswap сдвинет цену на 2%. Вместо этого алгоритм агрегатора формирует транзакцию, которая направляет 40 000 USDC в Uniswap, 35 000 USDC в SushiSwap и 25 000 USDC в пул Curve. Итоговое влияние на цену снижается до 0,5%.

    Разработчикам торговых роботов выгоднее интегрировать API агрегаторов, чем писать логику маршрутизации с нуля. Бот запрашивает оптимальный маршрут off-chain (вне блокчейна), получает готовые данные для вызова смарт-контракта (calldata) и отправляет их в сеть.

    Влияние архитектуры блокчейна на выбор площадки

    Выбор типа площадки для автоматизации напрямую зависит от базового блокчейна. В сетях с медленными блоками и дорогим газом (Ethereum) доминируют AMM и агрегаторы. Разработчику здесь нужно фокусироваться на оптимизации газа и защите от MEV-ботов, которые манипулируют транзакциями в мемпуле.

    В сетях с высокой пропускной способностью (Solana, Arbitrum) расцветают ончейн-стаканы. Здесь разработчик может применять классические стратегии маркет-мейкинга из традиционных финансов (например, статистический арбитраж), так как стоимость перестановки лимитных ордеров минимальна, а задержки исполнения приближаются к показателям централизованных бирж.

    5. Практика на Python: Чтение данных пула и исполнение транзакций

    Практика на Python: Чтение данных пула и исполнение транзакций

    Переход от алгоритмической торговли на централизованных биржах (CEX) к децентрализованным площадкам (DEX) требует полной перестройки сетевой логики робота. Вместо привычных HTTP-запросов к REST API и подписки на WebSocket-каналы биржи, разработчику предстоит напрямую общаться с блокчейном.

    Для автоматизации торговли в сетях, совместимых с виртуальной машиной Ethereum (EVM), стандартом де-факто является библиотека Web3.py. Она берет на себя низкоуровневую работу по кодированию данных и криптографическому подписанию транзакций, предоставляя удобный интерфейс для Python-разработчика.

    Подключение к блокчейну: Отказ от REST API

    Централизованная биржа сама обрабатывает ваши запросы через свои сервера. В децентрализованной среде нет единого сервера. Чтобы прочитать данные или отправить сделку, бот должен подключиться к RPC-узлу (Remote Procedure Call). Это сервер, который хранит копию блокчейна и принимает команды от внешних приложений.

    Разработчики могут развернуть собственный узел (что дорого и сложно) или использовать публичные и приватные RPC-провайдеры, такие как Infura, Alchemy или QuickNode.

    | Характеристика | Торговля на CEX | Торговля на DEX | |---|---|---| | Точка входа | REST API URL (например, api.binance.com) | RPC URL (например, mainnet.infura.io/v3/...) | | Аутентификация | API Key и Secret Key | Приватный ключ кошелька (Private Key) | | Лимиты запросов | Устанавливаются биржей (Rate Limits) | Зависят от тарифа RPC-провайдера | | Формат данных | JSON | Шестнадцатеричный байт-код (Hex) |

    Для начала работы необходимо инициализировать подключение к сети. В примере ниже показано подключение к сети Ethereum и проверка статуса узла.

    Чтение данных пула и расчет цены

    Чтобы узнать текущую цену актива на DEX, бот не может просто запросить тикер. Ему необходимо обратиться к смарт-контракту конкретного пула ликвидности и прочитать его резервы.

    Для взаимодействия с любым смарт-контрактом требуется ABI (Application Binary Interface). Это JSON-файл, который описывает, какие функции есть в контракте, какие аргументы они принимают и что возвращают.

    > ABI — это своеобразная инструкция по эксплуатации смарт-контракта для внешних программ. Без нее Web3.py получит из блокчейна лишь нечитаемый набор байтов и не поймет, как его расшифровать.

    В классических пулах (например, Uniswap V2) резервы хранятся в переменных контракта, и их можно получить с помощью функции getReserves(). Зная резервы, можно рассчитать спотовую цену по формуле:

    Где: * — спотовая цена базового актива. * — количество котируемого токена (например, USDT) в пуле. * — количество базового токена (например, WETH) в пуле.

    Ниже приведен пример кода, который подключается к пулу WETH/USDT на Uniswap V2, считывает резервы и рассчитывает цену. Обратите внимание, что токены в блокчейне не имеют дробных чисел — они хранятся в минимальных единицах (wei). Для WETH это 18 нулей, а для USDT — 6 нулей.

    Формирование и подписание транзакции

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

    В отличие от CEX, где биржа сама следит за очередностью ваших ордеров, в блокчейне разработчик обязан управлять параметром Nonce (Number used once). Это порядковый номер транзакции, отправленной с конкретного кошелька. Если бот отправит две транзакции с одинаковым Nonce, сеть отклонит вторую. Если пропустит номер — транзакция зависнет в мемпуле.

    Процесс исполнения сделки состоит из следующих шагов:

  • Получение текущего Nonce кошелька.
  • Расчет минимально допустимого количества получаемых токенов (amountOutMin) для защиты от проскальзывания.
  • Оценка стоимости газа для выполнения смарт-контракта.
  • Локальное формирование словаря с параметрами транзакции.
  • Подписание транзакции приватным ключом.
  • Отправка сырых байтов (Raw Transaction) в RPC-узел.
  • Рассмотрим пример вызова функции обмена через смарт-контракт маршрутизатора (Router).

    Обработка жизненного цикла сделки

    На централизованной бирже ответ на POST-запрос создания ордера означает, что заявка уже в стакане или исполнена. В DeFi получение хэша транзакции (tx_hash) означает лишь то, что транзакция успешно попала в мемпул (очередь ожидания).

    Разработчику необходимо реализовать логику ожидания квитанции (Transaction Receipt). Бот должен периодически опрашивать RPC-узел, пока транзакция не будет включена в блок. Если цена в пуле изменилась слишком сильно за время нахождения транзакции в мемпуле, и условие amountOutMin не выполняется, смарт-контракт отменит сделку (Revert). В этом случае активы останутся на кошельке, но газ, потраченный на вычисления, сгорит.

    Понимание этих низкоуровневых механик — работы с ABI, управления Nonce и правильного расчета параметров транзакции — является фундаментом для создания надежных и прибыльных торговых алгоритмов в децентрализованной среде.