Изучаем подопытных
Сначала выпишем характеристики, отличающиеся при торговле в централизованной бирже (CEX) и децентрализованной (DEX).
Таблица 1
Видим, что в 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 центов.
Кодим
Чтобы организовать хранение и исполнение лимитных ордеров, нам пришлось закодить свою мини-биржу. Её основные функции:
Транзакция может не исполниться по разным причинам. Чаще всех нам попадались ошибки STF, Too little received, Fail. Чтобы избежать этих ошибок, нужны превентивные меры:
На предыдущем шаге мы отправляли запросы в роутер UniSwap, т.к. невозможно отправить Swap напрямую в пул ликвидности. В запросе указывается пара токенов и размер комиссии. Эти три параметра однозначно определяют пул ликвидности. Например, для WETH/USDT 0,05% адрес пула: 0x641C00A822e8b671738d32a431a4Fb6074E5c79d.
Но в этом случае необходимо иметь приватный ключ пользователя и подписывать транзакцию ключом. Конечно, иметь ПК пользователя - это неправильно, так как в таком случае обладатель ПК сможет распорядиться деньгами пользователя вплоть до полного вывода на чужой кошелёк. Чтобы уйти от передачи приватного ключа пользователя, нужен смарт-контракт, который имеет право свапить токены в интересах пользователя, но не имеет права выводить деньги с адреса пользователя. Это достаточно простой контракт, аудит которого занял не более часа.
habr.com
Сначала выпишем характеристики, отличающиеся при торговле в централизованной бирже (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 | Проскальзывание цены |
Выбираем любимую сеть
Заметим, что комиссия за газ для транзакции в сети 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.
Но в этом случае необходимо иметь приватный ключ пользователя и подписывать транзакцию ключом. Конечно, иметь ПК пользователя - это неправильно, так как в таком случае обладатель ПК сможет распорядиться деньгами пользователя вплоть до полного вывода на чужой кошелёк. Чтобы уйти от передачи приватного ключа пользователя, нужен смарт-контракт, который имеет право свапить токены в интересах пользователя, но не имеет права выводить деньги с адреса пользователя. Это достаточно простой контракт, аудит которого занял не более часа.

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