Закодили торгового бота, теперь подключаем к децентрализованной бирже

Kate

Administrator
Команда форума
Изучаем подопытных

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

Таблица 1

CEX
DEX
Примеры бирж
Binance, ByBit, OKX​
UniSwap, dYdX, PancakeSwap, Curve​
Объёмы торговли одной биржи (24 ч)
суммарно: $1-10 млрд​
суммарно: $0,1-1 млрд
UniSwap:
Ethereum: WETH/USDT $150 млн
Arbitrum: WETH/USDC $73 млн​
Комиссии (в спотовой торговле)
<0,1%​
UniSwap: 0,05%; 0,3%; 1%.
dYdX: <0,05%.
+
комиссия за газ​
KYC
обязательно​
отсутствует​
Ассортимент токенов
токены фильтруются биржей​
можно самостоятельно добавить любую пару токенов​
Особенности
Partially filled, Limit order​
Проскальзывание цены​
Видим, что в DEX ежедневные объемы торговли популярными токенами WETH, WBTC более 10 млн долларов. У нас 1 лот примерно $1'000, поэтому этих объёмов достаточно. Смотрим на размер составной комиссии в DEX. Мы готовы платить процент, сопоставимый с централизованной биржей, т.е. 0,1%. Часть пойдет на покрытие комиссии биржи (например, UniSwap fee) и часть - для газа блокчейна (например, Arbitrum One). Т.к. мы установили ограничение сверху (0,1%), то придётся свапить токены только в пуле ликвидности с комиссией биржи 0.05% плюс платить комиссию за газ сети 0.05%. Но комиссия за газ - это абсолютная величина и измеряется в ETH. Так как мы договорились, что в трейде наш лот равен $1'000, то мы готовы платить комиссию за газ меньше чем 0,05% х $1'000 = 50 центов.

Выбираем любимую сеть

Заметим, что комиссия за газ для транзакции в сети Layer 1 (Ethereum) может быть порядка 10 долларов, а в сетях Layer 2 (Arbitrum, Optimism, Polygon) менее 1 доллара. Поэтому с финансовой точки зрения мы можем торговать пока только в L2. Выбрали Arbitrum за достаточно высокие объёмы торговли в популярной децентрализованной бирже UniSwap V3 и за низкие комиссии: осенью 2023 года в среднем 26 центов, зимой 2024г от 1 до 2 долларов, после апгрейда в середине марта 2024г 10 центов.

Кодим

Чтобы организовать хранение и исполнение лимитных ордеров, нам пришлось закодить свою мини-биржу. Её основные функции:

  • "ходить" в блокчейн через RPC Node (например, alchemy или infura).
  • непрерывно следить за событиями обмена (Event Swap) в блоках сети Arbitrum. Фильтровать события в пулах ликвидности именно UniSwap V3.
  • определять, что в одном из пулов ликвидности можно обменять токены по приемлемой цене, и сразу отправлять транзакцию в этот пул. Дальше ждать ответ сети.
Решаем проблемы

Транзакция может не исполниться по разным причинам. Чаще всех нам попадались ошибки STF, Too little received, Fail. Чтобы избежать этих ошибок, нужны превентивные меры:

  • оцениваем какая стоимость газа потребуется транзакции. Убеждаемся что это ниже нашего лимита комиссии и у аккаунта есть требуемое количество ETH.
  • закладываем в нашу цену проскальзывание 0,2%.
Приватность пользователя - наше всё

На предыдущем шаге мы отправляли запросы в роутер UniSwap, т.к. невозможно отправить Swap напрямую в пул ликвидности. В запросе указывается пара токенов и размер комиссии. Эти три параметра однозначно определяют пул ликвидности. Например, для WETH/USDT 0,05% адрес пула: 0x641C00A822e8b671738d32a431a4Fb6074E5c79d.

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

 
Сверху