Разработка мобильного приложения криптобиржи
Мобильная криптобиржа — это не кошелёк с функцией обмена. Это полноценная торговая платформа: ордербук в реальном времени, свечные графики, управление ордерами, история сделок, встроенный кошелёк с депозитом/выводом. Каждый компонент требует отдельного архитектурного решения.
Архитектура: WebSocket как основа реалтайма
Биржа живёт за счёт данных в реальном времени. REST API для статических данных (история, балансы, открытые ордера). WebSocket для потоков: тикер, ордербук, сделки, обновления аккаунта.
Бинарный протокол (MessagePack, FlatBuffers) вместо JSON для market data — критически важен при высокой частоте обновлений. Ордербук на активной паре обновляется 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%), кнопка подтверждения с итоговой суммой.
Кошелёк: депозит, вывод, история
Встроенный кошелёк биржи — кастодиальный. Адреса для депозита генерируются биржей. Пользователь видит список активов с балансом, history вкладов/выводов с 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 месяца и более.







