Сервисы Exchange Engine
Каждый сервис Exchange Engine запускается как самостоятельный процесс. Ниже приведено детальное описание назначения, протокола, ключевых зависимостей и конфигурации каждого из них.
engine
Назначение
engine — центральный торговый движок. Принимает ордера, исполняет их по алгоритму непрерывного двойного аукциона (CDA) и поддерживает L3 книгу ордеров (order-by-order book) в памяти. Именно здесь происходит матчинг: сопоставление встречных заявок на покупку и продажу.
Протокол
- gRPC — основной транспорт для межсервисного взаимодействия.
- Unix socket — gRPC-сервер слушает на Unix-сокете для минимизации сетевых задержек при взаимодействии с
api.
Ключевые зависимости
| Зависимость |
Назначение |
| PostgreSQL |
Персистентность ордеров, сделок, свечей, снапшотов книги |
api |
Клиент, отправляющий ордера через gRPC |
Предоставляемые gRPC-методы
| Метод |
Описание |
Ping |
Проверка доступности |
GetOrderbook |
Получение текущего состояния книги ордеров (L2-агрегация) |
AddOrder |
Размещение нового ордера |
CancelOrder |
Отмена конкретного ордера |
CancelAllOrders |
Отмена всех ордеров по тикеру |
SubscribeOrderbookSnapshots |
Стрим снапшотов книги ордеров |
SubscribeTrades |
Стрим публичных сделок |
Полное описание методов — в разделе Engine gRPC API.
Конфигурация
| Параметр |
Описание |
DATABASE_URL |
Строка подключения к PostgreSQL |
GRPC_SOCKET_PATH |
Путь к Unix-сокету для gRPC |
TICKERS |
Список торговых пар, которые движок обслуживает |
api
Назначение
api — публичный HTTP-сервер на базе фреймворка Echo. Реализует REST API и WebSocket-потоки для внешних клиентов (браузеры, мобильные приложения, торговые боты). Является единственной точкой входа для пользователей биржи.
Протокол
- HTTP/1.1 и HTTP/2 — REST-эндпоинты.
- WebSocket — потоковые данные (книга ордеров, сделки, обновления ордеров).
Все публичные маршруты начинаются с префикса /api/v1.
Ключевые зависимости
| Зависимость |
Назначение |
engine |
gRPC-клиент: размещение/отмена ордеров, получение книги, подписки на стримы |
| PostgreSQL |
Чтение балансов, ордеров, сделок, активов |
Аутентификация и ограничения
- JWT Bearer — для пользовательских сессий.
- HMAC-SHA256 API Key — для алгоритмической торговли (подпись запросов).
- RecvWindow — защита от replay-атак для подписанных запросов.
- Лимиты запросов: стандартный 5 RPS, строгий 1 RPS (логин), внутренние сети 40 RPS.
Группы эндпоинтов
| Группа |
Описание |
| Accounts |
Регистрация, вход, просмотр аккаунта, субаккаунты |
| Orders |
Размещение, отмена, список ордеров |
| Trades |
История сделок пользователя |
| Balances |
Перевод между аккаунтами, просмотр балансов |
| Market Data |
Тикеры, активы, книга ордеров, публичные сделки, свечи |
| WebSocket |
Стримы книги, сделок, обновлений ордеров |
Полное описание — в разделе REST API.
Конфигурация
| Параметр |
Описание |
DATABASE_URL |
Строка подключения к PostgreSQL |
GRPC_SOCKET_PATH |
Путь к Unix-сокету engine |
JWT_SECRET |
Секрет для подписи JWT-токенов |
HTTP_ADDR |
Адрес и порт HTTP-сервера |
admin
Назначение
admin — внутренний gRPC-сервис для операций технической поддержки, финансового мониторинга и управления платформой. Содержит 11 sub-сервисов, покрывающих управление аккаунтами, балансами, блокчейн-операциями, алертами и API-ключами.
Протокол
- gRPC (TCP, внутренняя сеть).
Доступ предоставляется только доверенным внутренним компонентам и инструментам администрирования. Прямой доступ из интернета запрещён.
Sub-сервисы
| Sub-сервис |
Ключевые RPC |
PingService |
Ping |
AccountsService |
GetBalances, GetAccountDetails, SetTier, ListOrders, ChangeAccountStatus |
BlockchainService |
GetDepositAddress, WithdrawToBlockchain, ListTopUps, ListWithdrawals |
OperationsService |
ManualTopup, ManualWithdraw, Transfer, ManualTopupBalanceAccount, ManualWithdrawBalanceAccount, TransferBalanceAccount |
InfoService |
ListTiers, ListNetworks |
AlertsService |
Create, List (stream), Acknowledge, Resolve |
APIKeysService |
CreateAPIKey, ListAPIKeys, DeleteAPIKey |
HotWalletsService |
ListHotWallets, TransferAsset, GetTransferAssetStatus |
TiersService |
Управление тарифными уровнями |
AssetsService |
Управление активами |
TickersService |
Управление торговыми парами |
Полное описание — в разделе Admin gRPC API.
Ключевые зависимости
| Зависимость |
Назначение |
| PostgreSQL |
Все данные аккаунтов, балансов, операций |
hotmanager |
Инициирование выводов через горячие кошельки |
Конфигурация
| Параметр |
Описание |
DATABASE_URL |
Строка подключения к PostgreSQL |
GRPC_ADDR |
Адрес gRPC-сервера |
hotmanager
Назначение
hotmanager управляет горячими кошельками биржи на каждом поддерживаемом блокчейне. Отвечает за хранение приватных ключей (или взаимодействие с HSM), формирование и подписание транзакций вывода.
Варианты
| Вариант |
Блокчейн |
hotmanager/btc |
Bitcoin |
hotmanager/evm |
Ethereum и EVM-совместимые сети |
hotmanager/tron |
Tron |
Протокол
Внутренний сервис. Взаимодействует с txprocessor и admin для получения задач на вывод.
Ключевые зависимости
| Зависимость |
Назначение |
| Нода блокчейна |
Трансляция транзакций, запрос балансов кошельков |
| PostgreSQL |
Хранение состояния кошельков (wallets) |
txprocessor |
Получает сформированные транзакции для трансляции |
Конфигурация
| Параметр |
Описание |
DATABASE_URL |
Строка подключения к PostgreSQL |
NODE_URL |
URL ноды соответствующего блокчейна |
WALLET_KEY / HSM-конфигурация |
Доступ к приватным ключам горячего кошелька |
topupscan
Назначение
topupscan отвечает за обнаружение входящих депозитов на адреса блокчейн-кошельков пользователей. Группа сервисов постоянно мониторит блокчейн и записывает входящие транзакции в таблицу chain_topups.
Компоненты
| Компонент |
Назначение |
topupscan/btc |
Сканирование Bitcoin-блоков |
topupscan/evm |
Сканирование EVM-транзакций и токен-трансферов |
topupscan/tron |
Сканирование Tron-транзакций |
topupscan/processor |
Обработка обнаруженных депозитов: зачисление на баланс |
topupscan/aml-poller |
Периодический опрос AML-статусов для входящих транзакций |
topupscan/elliptic_check |
Интеграция с Elliptic для AML-проверки транзакций |
topupscan/refund-processor |
Автоматический возврат средств при отклонении AML |
Ключевые зависимости
| Зависимость |
Назначение |
| Нода блокчейна |
Получение данных о новых блоках и транзакциях |
| PostgreSQL |
chain_topups, chain_topup_status_history, chain_topup_aml_categories, topupscan_states, bitcoin_utxo |
| Elliptic API |
AML-скоринг транзакций |
Конфигурация
| Параметр |
Описание |
DATABASE_URL |
Строка подключения к PostgreSQL |
NODE_URL |
URL ноды блокчейна |
ELLIPTIC_API_KEY |
Ключ API сервиса Elliptic |
START_BLOCK |
Блок, с которого начинать сканирование |
txprocessor
Назначение
txprocessor обрабатывает исходящие транзакции (запросы на вывод). Формирует транзакции по данным из таблиц txes и tx_batches, взаимодействует с hotmanager для подписи и трансляции.
Варианты
| Вариант |
Блокчейн |
txprocessor/btc |
Bitcoin |
txprocessor/evm |
Ethereum и EVM-совместимые сети |
txprocessor/tron |
Tron |
Ключевые зависимости
| Зависимость |
Назначение |
| PostgreSQL |
txes, tx_batches — задачи на вывод |
hotmanager |
Подписание и трансляция транзакций |
| Нода блокчейна |
Подтверждение трансляции, запрос nonce/UTXO |
Конфигурация
| Параметр |
Описание |
DATABASE_URL |
Строка подключения к PostgreSQL |
NODE_URL |
URL ноды блокчейна |
HOTMANAGER_ADDR |
Адрес gRPC-сервиса hotmanager |
migrator
Назначение
migrator — утилита командной строки для управления миграциями базы данных. Использует инструмент Goose и выполняет SQL-скрипты из директории migrations/.
Протокол
CLI. Запускается вручную или в рамках CI/CD-пайплайна перед стартом остальных сервисов.
Основные команды
# Применить все новые миграции
./migrator up
# Откатить последнюю миграцию
./migrator down
# Показать статус миграций
./migrator status
Конфигурация
| Параметр |
Описание |
DATABASE_URL |
Строка подключения к PostgreSQL |
MIGRATIONS_DIR |
Путь к директории с SQL-файлами миграций |