cryptofoundry

Связаться с cryptofoundry

Расскажите, что вы хотите создать или автоматизировать.

Электронная почта
[email protected]
ADAMANT Messenger
Открыть в ADAMANT
MarketMaking.app

Private WebUI: консоль для управления парком экземпляров ADAMANT Market-Making Software

Контекст

Это обновление статуса по Сценарию А для частного WebUI с самостоятельным хостингом: единая консоль оператора для управления парком экземпляров ADAMANT Market-Making Software. Сценарий B (публичный WebUI по подписке, исходящий ретранслятор, лицензионный токен) здесь не рассматривается.

Ключевое архитектурное правило для операторов: браузер и бэкенд WebUI никогда не взаимодействуют с биржами напрямую. Графики, биржевые стаканы, балансы, параметры и команды проходят через /api/v1 каждого бота. API-ключи бирж остаются на стороне бота.

Что доступно уже сейчас

Локальный процесс WebUI (Vite UI + Fastify BFF) подключается к одному или нескольким ботам, запущенным с включенным параметром private_webui и общим HMAC-секретом. Вы добавляете каждого бота по URL. WebUI хранит реестр парка ботов, сам бот этого не делает. Учетные записи операторов, 2FA и роли находятся на стороне WebUI, в то время как бот лишь проверяет подписанный JWT, содержащий { login, role }.

Вход в WebUI

Вход в систему. Учетные данные оператора хранятся в WebUI (email / ADM / ETH + обязательная 2FA). Каждый бот проверяет только подписанный JWT — на боте нет эндпоинта для логина.

Вкладки парка ботов и торговый терминал

Вкладки в заголовке представляют по одному боту каждая. Индикаторы статуса получают данные из эндпоинта GET /api/v1/status с JWT-аутентификацией, отображая working (работает), degraded (сниженная производительность) или stopped (остановлен) — данные не берутся из публичного эндпоинта проверки работоспособности. Публичный эндпоинт GET /api/v1/health возвращает только { status, transport }, чтобы доступный адрес привязки не раскрывал информацию о качестве работы MM.

Представление Market (Рынок) содержит свечные графики с наложенными ордерами бота, биржевой стакан в реальном времени со спредом, 24-часовой диапазон и объем, инвентарь пары в монетах и USD, а также возможность размещения лимитных ордеров вручную. Клик по строке стакана заполняет направление, цену и объем. Отмена отправляет { id, market, side } и удаляет строку, если биржа уже обработала отмену ордера.

Торговый терминал

Рынок. Свечи, биржевой стакан, инвентарь в USD и размещение ордеров для PENGUIN/USDT на BiFinance — одна из вкладок в парке ботов.

Параметры и текущая ситуация

Parameters (Параметры) открывает полную форму WebUiTradeParams: главный выключатель MM и группы настроек, соответствующие capabilities бота (модули trade/mm_*.js, которые отсутствуют, остаются заблокированными). Ликвидность, отслеживание цены, сетки ордеров, торговля по объему, аналоговые подсказки и другие настройки редактируются через PUT /params и обновляются в реальном времени через Socket.IO с помощью события params:updated.

Live situation (Текущая ситуация) отображает 12-часовую полосу в браузере: инвентарь (базовая валюта + котируемая в USD) и номинал открытых ордеров по назначению. Столбцы заполняются, пока бот остается на связи. Желтые часовые рамки указывают на то, что в этот час состояние было degraded; серые означают, что MM был stopped. Рамка охватывает столбец, а не всю высоту графика.

На стороне бота качество MM отслеживается вне trade/mm_*.js. Вызов /start (или включение MM через PUT) фиксирует равные значения mm_generalInitTs и mm_generalRestartTs. Перезагрузка процесса при уже включенном MM сохраняет время инициализации, но обновляет время перезапуска, что позволяет отличить чистый запуск от перезапуска после сбоя.

Параметры и текущая ситуация

Параметры. Главный выключатель MM, 12-часовая текущая ситуация (инвентарь и открытые ордера в $), ликвидность, отслеживание цены и сетки — группы блокируются, если модуль отсутствует в сборке бота.

Команды и журнал аудита

Commands (Команды) объединяет те же обработчики, что и в мессенджере или CLI: fill, close, make-price, TWAP, transfer, withdraw и запросы. Деструктивные POST-запросы требуют подтверждения. Консоль справа отображает ленту бота в формате markdown (балансы, отмены, сбросы эпох).

Events (События) — это журнал аудита WebUI, хранящийся в SQLite. Он записывает, кто и что изменил (admin@… против bot), охватывая как параметры, так и команды, с функциями поиска, фильтрации и экспорта в JSON.

Консоль команд

Команды. Формы fill / close / make-price и консоль в реальном времени — тот же набор команд, что и в ADAMANT Messenger и CLI, структурированный для работы.

Журнал событий

События. Переключение параметров и полезная нагрузка команд с отметками времени, привязанные к оператору или боту.

Технические примечания для операторов

Эндпоинт GET /health не требует JWT и возвращает только { status, transport }, привязанный к private_webui_bind_host и списку разрешенных адресов. Эндпоинт GET /status, защищенный JWT, возвращает mmActive, mmState, опциональные метки времени инициализации и перезапуска, льготный период и причины снижения производительности. GET /params предоставляет полный снимок; PUT /params применяет только измененные фрагменты, поэтому несвязанные модули не перезапускаются. POST /commands/cancel принимает опциональное поле side (buy или sell). Что касается ролей, JWT с правами read-only не может выполнять запись, в то время как токены без поля role сохраняют прежний полный доступ. Старые боты без /status по-прежнему отображаются в парке — WebUI переключается на расширенный ответ /health.