Разработка CEX-биржи: matching engine, безопасность, инфраструктура

Разработка централизованной криптобиржи (CEX) — один из самых сложных продуктов в криптоинфраструктуре. Matching engine, кастодиальная система, compliance-слой, market data и обеспечение ликвидности — всё это должно работать одновременно, надёжно и под нагрузкой. Типичные проблемы: latency матчинга

Направления блокчейн-разработки

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    998
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1267
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    713
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1003

Разработка централизованной криптобиржи (CEX) — один из самых сложных продуктов в криптоинфраструктуре. Matching engine, кастодиальная система, compliance-слой, market data и обеспечение ликвидности — всё это должно работать одновременно, надёжно и под нагрузкой. Типичные проблемы: latency матчинга более 100 мс, уязвимости в смарт-контрактах, низкая доступность. Мы проектируем и разрабатываем CEX под ключ, опираясь на 8-летний опыт в блокчейн-разработке и 5+ запущенных проектах. Ниже расскажу, что реально нужно для запуска серьёзной платформы.

Как мы проектируем архитектуру CEX?

Высокоуровневая схема

Client Layer ├── Web Trading Terminal (React/Vue) ├── Mobile Apps (iOS/Android) └── API (REST + WebSocket + FIX) │ API Gateway / Load Balancer │ Service Layer ├── Auth Service (JWT + 2FA) ├── Order Service → OMS ├── Account Service → Balances ├── Market Data Service → Feeds └── Notification Service │ Core Infrastructure ├── Matching Engine (C++/Rust/Go) ├── Risk Engine ├── Custody System └── Settlement Engine │ Data Layer ├── PostgreSQL (accounts, orders, trades) ├── Redis (order book state, sessions) ├── Kafka (event streaming, audit log) └── TimescaleDB (OHLCV, market data) 

Принцип изоляции сервисов

Каждый сервис независим и общается через события (event-driven). Matching engine не знает про пользователей — он знает только про ордера. Account service не знает про торговлю — он знает про балансы. Это позволяет независимо масштабировать компоненты: matching engine на bare metal, остальное на Kubernetes. Сбой notification service не роняет торговлю. Деплой без downtime.

Почему matching engine так критичен?

Matching engine — единственный компонент, где производительность имеет экзистенциальное значение. Задержка >10 ms — это реальные потери для HFT-клиентов и market makers.

Tier Throughput Latency (order-to-ack) Технология
Start-up (<$1M/day) 1,000 ops/sec <50 ms Go / Java
Mid-tier ($1-50M/day) 10,000 ops/sec <5 ms Go / Rust
Large ($50M+/day) 100,000+ ops/sec <500 µs C++ / Rust

Order Book имплементация

use std::collections::BTreeMap; use std::collections::VecDeque; type Price = u64; // Integer representation: price * 10^8 type Quantity = u64; #[derive(Debug, Clone)] struct Order { id: u64, price: Price, quantity: Quantity, remaining: Quantity, side: Side, order_type: OrderType, timestamp: u64, user_id: u64, } #[derive(Debug)] struct PriceLevel { price: Price, total_quantity: Quantity, orders: VecDeque<u64>, // order IDs в порядке времени } struct OrderBook { symbol: String, bids: BTreeMap<std::cmp::Reverse<Price>, PriceLevel>, asks: BTreeMap<Price, PriceLevel>, orders: std::collections::HashMap<u64, Order>, } impl OrderBook { fn match_order(&mut self, incoming: &mut Order) -> Vec<Trade> { let mut trades = Vec::new(); let opposite_side = match incoming.side { Side::Buy => &mut self.asks, Side::Sell => &mut self.bids, }; while incoming.remaining > 0 { let best_level = match incoming.side { Side::Buy => opposite_side.iter_mut().next(), Side::Sell => opposite_side.iter_mut().next(), }; match best_level { None => break, Some((_, level)) => { let price_matches = match incoming.side { Side::Buy => incoming.price >= level.price, Side::Sell => incoming.price <= level.price, }; if !price_matches { break; } while incoming.remaining > 0 && !level.orders.is_empty() { let maker_id = *level.orders.front().unwrap(); let maker = self.orders.get_mut(&maker_id).unwrap(); let fill_qty = incoming.remaining.min(maker.remaining); trades.push(Trade { maker_order_id: maker_id, taker_order_id: incoming.id, price: level.price, quantity: fill_qty, }); incoming.remaining -= fill_qty; maker.remaining -= fill_qty; if maker.remaining == 0 { level.orders.pop_front(); self.orders.remove(&maker_id); } } } } } trades } } 

Matching engine на Rust обрабатывает в 3 раза больше операций, чем аналогичный на Python. Мы используем Event Sourcing — все изменения состояния записываются как неизменяемая последовательность событий (OrderPlaced → OrderMatched → TradeFilled → OrderCancelled). Это даёт полный audit trail и возможность восстановления после краха, что признано лучшей практикой в высоконагруженных системах. Для mid-tier биржи экономия на инфраструктуре за счёт правильной архитектуры может быть значительной. Дополнительно, для проектов с объёмом торгов $1M/day мы снижаем затраты на KYC-интеграцию.

Как обеспечивается безопасность кастодиальной системы

Биржа хранит средства пользователей. Мы реализуем многоуровневую защиту:

  • Multi-sig cold storage: 95%+ средств в холодных кошельках с 3-of-5 multisig. Ключи физически разнесены по разным дата-центрам и странам. Используем HSM (Hardware Security Modules) для подписания.
  • Hot wallet: 2-5% средств для оперативных выводов с автоматическим пополнением из cold. Суточный лимит вывода превышает который требует ручного одобрения.
  • Withdrawal security: каждый вывод проверяется на whitelist адресов, velocity, AML-скрининг (Chainalysis, Elliptic). Сомнительные транзакции уходят на manual review.
Детали реализации кастодиальной защитыДля подписания транзакций используем HSM с ключами, разделёнными по принципу sharded secret. Каждая транзакция требует подтверждения от 3 из 5 ключей. Данные о балансах хранятся в отдельной базе с шифрованием на уровне строк.

KYC/AML и compliance

Таблица уровней верификации:

KYC Level Данные Дневной лимит
0 — Email Только email 0 (только просмотр)
1 — Basic Телефон + страна $500
2 — Standard ID + Selfie $10,000
3 — Enhanced Proof of address + source of funds $100,000
Institutional Корпоративные документы Unlimited

Интегрируем Sumsub или Onfido через REST API. Webhook при изменении статуса верификации. AML-скрининг каждого депозита и вывода в реальном времени.

Рыночные данные и интеграция TradingView

Real-time feeds

Matching Engine → Trade Events → Kafka │ ┌──────────┤ ▼ ▼ OHLCV Builder Order Book Aggregator │ │ └────┬─────┘ ▼ WebSocket Broadcaster (horizontal scaling) │ ┌─────────┼─────────┐ ▼ ▼ ▼ Client 1 Client 2 Client N 

WebSocket сервер публикует diff updates (дельта-изменения), что снижает трафик в 10-50 раз. Для профессионального trading terminal интегрируем TradingView Advanced Charts через UDF data feed и WebSocket.

Процесс работы над проектом

  1. Аналитика: исследование рынка, требования, выбор стека, экономика проекта.
  2. Проектирование: архитектура, прототип matching engine, спецификация API.
  3. Реализация: разработка всех модулей, написание смарт-контрактов (если нужны) на Solidity или Rust.
  4. Тестирование: unit, integration, load testing (до 50k ops/sec). Безопасность — аудит смарт-контрактов и pen test.
  5. Деплой: настройка инфраструктуры, мониторинг, запуск в продакшн. Обеспечение ликвидности через ботов или market makers.

Что входит в работу

  • Документация (архитектурная, API, deployment)
  • Исходный код с тестами
  • CI/CD pipeline
  • Доступы к инфраструктуре
  • Обучение команды
  • Поддержка 3 месяца после запуска

Сроки: от 12 до 24 месяцев в зависимости от функционала. Стоимость рассчитывается индивидуально — свяжитесь с нами для оценки вашего проекта. Мы подготовим детальную смету и roadmap. Типичный проект обходится заказчику в диапазоне, который мы обсуждаем индивидуально — но экономия на инфраструктуре за счёт правильной архитектуры может достигать 40% по сравнению с типовыми решениями. Мы разработали уже 5+ бирж и знаем все подводные камни. Получите консультацию по вашему проекту — оценим и предложим оптимальное решение.