Розробка мобільного додатку крипто-біржі
Мобільна крипто-біржа — це не гаманець з функцією обміну. Це повноцінна торговельна платформа: ордербук в реальному часі, свічні графіки, управління ордерами, історія угод, вбудований гаманець з депозитом/виводом. Кожен компонент вимагає окремого архітектурного рішення.
Архітектура: WebSocket як основа реалтайму
Біржа живе за рахунок даних у реальному часі. REST API для статичних даних (історія, баланси, відкриті ордери). WebSocket для потоків: тікер, ордербук, угоди, оновлення акаунту.
Бінарний протокол (MessagePack, FlatBuffers) замість JSON для ринкових даних — критично важливий при високій частоті оновлень. Ордербук активної пари оновлюється 10–50 разів на секунду.
// Android — WebSocket підключення до потоків біржі
class ExchangeWebSocketClient(private val scope: CoroutineScope) {
private val _orderBook = MutableStateFlow<OrderBookSnapshot?>(null)
val orderBook = _orderBook.asStateFlow()
fun subscribeOrderBook(symbol: String) {
val request = """{"method":"SUBSCRIBE","params":["${symbol.lowercase()}@depth20@100ms"],"id":1}"""
webSocket.send(request)
}
private fun handleMessage(text: String) {
val update = json.decodeFromString<OrderBookUpdate>(text)
_orderBook.update { current -> current?.applyDelta(update) ?: OrderBookSnapshot.from(update) }
}
}
На iOS — URLSessionWebSocketTask (iOS 13+) або Starscream. Потік даних через AsyncStream та @Published для SwiftUI, або PassthroughSubject для UIKit.
Ордербук: рендеринг без тормозів
Ордербук оновлюється часто. Якщо рендерити через UITableView / RecyclerView на кожне оновлення — візуальний мусор та просадка FPS. Рішення:
UITableView (iOS): performBatchUpdates тільки при видимих змінах. Застосовувати delta-оновлення (insertions/deletions/updates) замість reloadData. Ячейки — з prepareForReuse.
RecyclerView (Android): DiffUtil.calculateDiff в background thread, ListAdapter з AsyncListDiffer. Вимкнути setHasFixedSize(false) якщо висоти ячейок фіксовані.
Для високочастотних оновлень (> 10/сек) — рисувати ордербук на Canvas/SurfaceView (Android) або CALayer (iOS) безпосередньо, обходячи RecyclerView/UITableView повністю. Це знижує навантаження на main thread у 3–5 разів.
Свічні графіки
Для TradingView-style графіків на мобільному — три варіанти:
- TradingView Lightweight Charts в WKWebView/WebView. Найпростіше, але WebView додає накладні расходи.
- MPAndroidChart (Android) / Charts (Daniel Gindi) (iOS) — нативні бібліотеки. Менше функціоналу, краща продуктивність.
- Власна реалізація на Canvas/Metal/SpriteKit — повний контроль, але 2–4 тижні роботи тільки на граф.
Для більшості проектів — Lightweight Charts в WebView з bidirectional bridge (JavaScript ↔ Native) для даних та подій.
Ордери: типи та логіка
Мінімальний набір типів ордерів:
| Тип | Опис | Складність реалізації |
|---|---|---|
| Market | Миттєве виконання по ринковій цені | Низька |
| Limit | Виконання при досягненні цени | Середня |
| Stop-Limit | Активується при stop-ціні, виконується як limit | Висока |
| OCO | One-Cancels-Other: лімітний + стоп-лімітний одночасно | Висока |
UI форми ордера: перемикач Buy/Sell, поля Price/Amount/Total з взаємним перерахунком, слайдер відсотка від балансу (25% / 50% / 75% / 100%), кнопка підтвердження з підсумковою сумою.
Гаманець: депозит, вивід, історія
Вбудований гаманець біржі — кастодіальний. Адреси для депозиту генеруються біржею. Користувач бачить список активів з балансом, історію вкладів/виводів з txHash та статусом.
Вивід: форма з адресою, сумою, мережею. Двохетапне підтвердження — email/2FA код обов'язковий. Google Authenticator (TOTP через RFC 6238) або Email OTP.
Безпека та 2FA
2FA через OTPAuth URI формат. На iOS — OTPKit, на Android — andOTP сумісний TOTP. Біометрія (Face ID / Fingerprint) — для входу, але не замість 2FA при виводі.
Push-сповіщення про вхід з нового пристрою (IP, user agent), підозрілих виводах, завершенні ордерів — обов'язкові. Firebase Cloud Messaging покриває обидві платформи.
Часовий графік та масштаб
| Компонент | Час |
|---|---|
| Авторизація + 2FA + біометрія | 1 тиждень |
| Ордербук + стакани + тікер (WebSocket) | 1.5 тижня |
| Свічні графіки | 1–2 тижні |
| Форма ордера (market + limit) | 1 тиждень |
| Гаманець: депозит, вивід, історія | 1.5 тижня |
| Історія угод та відкриті ордери | 1 тиждень |
| Push-сповіщення + безпека | 1 тиждень |
MVP: 8–10 тижнів для однієї платформи (iOS або Android). Обидві платформи паралельно з загальним бекендом — 10–14 тижнів. Повноцінна біржа з advanced ордерами, маржиналкою, P2P — 3+ місяці.







