Інтеграція CCXT для мульти-біржового мобільного додатку
CCXT (CryptoCurrency Exchange Trading Library) — спроба абстрагуватися від десятків несумісних біржових API за єдиним інтерфейсом. На вебі та в Node.js це працює добре. На мобілі — історія складніша. За 5 років розробки крипто-трейдингових додатків ми стикалися з десятком проєктів, де CCXT або полегшував, або ускладнював життя, залежно від архітектурних рішень. Наприклад, один клієнт хотів агрегатор портфеля на 5 біржах. Пряма інтеграція CCXT у React Native зайняла 8 тижнів, а переробка на бекенд-проксі скоротила термін до 4 тижнів і вирішила проблеми з фоновими сокетами.
Чому CCXT на мобілі — це не просто npm install?
CCXT Pro (версія з WebSocket) важить у скомпільованому вигляді кілька мегабайт і тягне залежності, які в React Native потребують поліфілів: crypto, stream, buffer. Для React Native потрібен react-native-crypto, readable-stream, налаштування metro.config.js з аліасами — і це ще до першого рядка бізнес-логіки.
На Flutter CCXT недоступний напряму — тільки через Dart FFI або вбудований JavaScript runtime (JSCore на iOS, V8 через flutter_js). Практика показує: простіше написати тонкий адаптер-проксі на бекенді (Node.js + CCXT) і спілкуватися з мобілем через REST/WebSocket, ніж тягнути CCXT у Dart-оточення.
Для нативних iOS/Android CCXT не існує — там потрібні нативні біржові SDK або власні REST-клієнти. Ми реалізували понад 10 таких інтеграцій для клієнтів з вимогами cold storage та self-custody, де сервер-посередник неприпустимий.
Як CCXT вирішує проблему уніфікації на рівні коду?
CCXT дає єдиний інтерфейс для базових операцій:
const exchange = new ccxt.binance({ apiKey, secret }); const ticker = await exchange.fetchTicker('BTC/USDT'); const balance = await exchange.fetchBalance(); const order = await exchange.createOrder('BTC/USDT', 'limit', 'buy', 0.001, 45000); Той самий код працює для ccxt.bybit, ccxt.okx, ccxt.kraken. Для агрегаторів портфеля, які показують баланси на кількох біржах — це реальна економія часу (до 80% коду).
Проблема починається там, де біржі розходяться в деталях. fetchOHLCV на Binance повертає 1000 свічок, на KuCoin — 1500, на деяких біржах — 100. createOrder приймає різні набори параметрів для стоп-лосів і тейк-профітів — CCXT намагається нормалізувати це через params, але біржі додають нові типи ордерів швидше, ніж бібліотека встигає.
CCXT Pro та WebSocket на мобілі: блокуюча проблема
CCXT Pro реалізує WebSocket через свій Exchange.watchTrades(), watchOrderBook(), watchBalance(). Під капотом — обгортка над нативним WebSocket з reconnect-логікою. У React Native це працює через поліфіл WebSocket (глобальний об'єкт), який React Native надає з коробки.
Ключовий нюанс: CCXT Pro використовує await з while(true) для споживання стрімів:
while (true) { const trades = await exchange.watchTrades('BTC/USDT'); // оновлюємо UI } Це блокуюча конструкція. У React Native потрібно запускати в окремому контексті (через setInterval + Promise або Worker — у RN немає справжніх Workers, потрібен react-native-multithreading або серверний проксі). Ми гарантуємо стабільне з'єднання, використовуючи другий варіант з BaaS-проксі.
Архітектура мульти-біржового додатку
Рекомендована схема для мобіля:
Mobile App ↕ WebSocket / REST Backend Proxy (Node.js + CCXT) ↕ біржові API Binance / Bybit / OKX / ... Проксі нормалізує дані, керує ротацією ключів, кешує маркет-дані та агрегує події з кількох бірж в єдиний WebSocket-потік для мобіля. Мобільний додаток працює з одним з'єднанням замість N паралельних WebSocket-сесій — це критично для iOS, де фонові сокети вбиваються агресивно.
Якщо проксі неприйнятний з архітектурних причин (self-custody, no server policy) — реалізуємо нативні клієнти для кожної біржі із загальним протоколом через TypeScript-інтерфейс. Більше коду, більше тестів, але немає сервера-посередника.
| Параметр | Пряма інтеграція CCXT | Бекенд-проксі з CCXT | Нативні клієнти |
|---|---|---|---|
| Розмір бандла | +2-4 MB (з поліфілами) | 0 на мобілі | ~500 KB на біржу |
| Швидкість розробки (MVP 3 біржі) | 6-8 тижнів | 4-6 тижнів | 8-14 тижнів |
| Фонова робота WebSocket | Проблеми на iOS | Стабільно | Потребує налаштування |
| Підтримка нових типів ордерів | Через оновлення CCXT | Через оновлення проксі | Ручна реалізація |
| Безпека ключів | На пристрої | На сервері (Vault) | На пристрої (Enclave) |
Як ми інтегруємо CCXT: покроковий план
- Аудит вимог: аналіз кількості бірж, типів операцій (торгівля/перегляд), платформ.
- Вибір архітектури: пряма інтеграція vs проксі vs нативні клієнти. У 90% випадків рекомендуємо проксі.
- Проектування проксі: налаштування ротації ключів, кешування, rate-limiting, безпека.
- Мобільний модуль: UI для портфеля, ордерів, історії. Підключення до WebSocket-потоку.
- Інтеграція бірж: налаштування CCXT для кожної біржі, тестування на демо-рахунку.
- Навантажувальне тестування: симуляція 100+ одночасних підключень.
- Деплой та документація: розгортання проксі, README, навчання команди.
Типові помилки при інтеграції CCXT
- Ігнорування rate-limiting — бани від бірж.
- Зберігання API-ключів у коді — використовуйте Enclave/Hardware Security Module.
- Відсутність reconnect-логіки для WebSocket — втрати даних.
- Синхронна обробка WebSocket-подій у UI-потоці — фрізи.
Що входить у роботу «під ключ»
- Аудит архітектури: аналіз поточних вимог, вибір стеку (React Native / Flutter / Native).
- Проектування проксі (якщо потрібен): налаштування ротації ключів, кешування, rate-limiting.
- Інтеграція бірж: налаштування CCXT для конкретних біржових API, тестування на демо-рахунку.
- Мобільний модуль: реалізація UI для перегляду портфеля, ордерів, історії.
- WebSocket-потік: підключення до агрегованого каналу, обробка реконнекта.
- Документація: опис API проксі, інструкція з розгортання, README.
- Навчання команди: воркшоп з підтримки CCXT та доробок.
Порівняння покриття API бірж
| Операція | Binance | Bybit | OKX | Kraken |
|---|---|---|---|---|
| fetchTicker | Так | Так | Так | Так |
| fetchOHLCV | Так (1000) | Так (1500) | Так (500) | Так (720) |
| createOrder | Так (ліміт/маркет) | Так (всі типи) | Так | Так |
| watchTrades | Так | Так | Так | Ні |
Оцінка та контакти
Мульти-біржовий додаток — нетривіальне завдання. Ми маємо сертифікований досвід у крипто-трейдингу та гарантуємо робоче рішення. Для точної оцінки зв'яжіться з нами — обговоримо деталі: кількість бірж, чи потрібна торгівля або тільки перегляд, чи є готовий бекенд. Термін MVP з 3-4 біржами та базовою торгівлею — від 8 до 16 тижнів залежно від платформи та архітектури. Отримайте консультацію — і ми запропонуємо оптимальний варіант.
CCXT library documentation: github.com/ccxt/ccxt Криптовалютна біржа — огляд на Wikipedia.







