1. Cryptographic build identity (Layer A)
Spring Boot api, Java worker и Express site — все три подписываются одним
и тем же offline ключом перед раскатом. Подпись Ed25519 над каноническим
манифестом {service, commit, image_digest, builtAt}
записывается в env-переменные Cloud Run и выставляется наружу через
identity-эндпоинты. Если кто-то подменил образ — подпись не сойдётся.
Если подделать сам манифест — подпись по новому манифесту не пройдёт
верификацию против committed публичного ключа.
Что это закрывает
- Атакующий с доступом к Cloud Run или к нашему build-пайплайну, который пытается зашить malicious image — Pulse-проба обнаружит расхождение в течение часа.
- Контрактор, у которого временно были деплой-права, не может потом подписать собственный билд от нашего имени — у него нет ключа.
- «Кто-то подменил байты» становится не догадкой, а арифметикой: либо подпись валидна, либо нет.
2. Fourteen explicit risk gates before any LIVE order
Перед тем как реальный ордер достигнет Binance, запрос проходит
четырнадцать независимых проверок в строгом порядке. Каждая проверка
имеет unit-test и кидает структурированный ProductPolicyException
с конкретным risk_code. PAPER-режим имеет всего 2 ступени —
symbol allowlist + plan-allows-paper. LIVE проходит все 14.
- Symbol allowlist — символ должен быть в разрешённом списке (
SYMBOL_NOT_ALLOWED)
- Regime guard — рынок не в режиме
DANGEROUS (волатильность + просадка)
- Runtime kill switch — глобальный флаг
quantor.trading.live.enabled включён
- User allowlist — userId в
quantor.trading.live.allowedUserIds
- Notional > 0 — нельзя стартовать LIVE на ноль
- Active subscription — подписка активна и валидна
- Account not frozen — учётка не заморожена, лимит ботов не превышен
- Plan allows LIVE — текущий план разрешает LIVE (FREE+Starter — нет)
- LIVE_ADVANCED — для advanced-режима нужен план с
advancedStrategies
- Telegram linked — TG-аккаунт привязан (двойной канал управления)
- Strategy whitelist — стратегия в разрешённом сете для режима
- Exchange keys — ключи Binance верифицированы (не просто введены)
- Max-notional ladder —
Starter ≤ $250, Pro ≤ $5k, Teams ≤ $25k
- Daily-loss ladder —
Starter ≤ 2%, Pro ≤ 7.5%, Teams ≤ 10%
3. Regime detector — мы готовы сидеть в стороне
Quantor рассчитывает текущий рыночный режим по реализованной волатильности
и просадке от пика. Когда режим = DANGEROUS, LIVE-старты
блокируются — независимо от плана, allowlist'а и любых других прав. PAPER
в DANGEROUS работает: враждебный рынок — отличный момент чтобы тестировать
стратегии на бумаге, а не на деньгах. Текущий режим открыт всем:
api/v1/market/regime.
Тип контракта
Большинство ботов в категории оптимизируют под объём — больше сделок,
больше fee, выше доход вендора. Мы оптимизируем под «не потерять деньги
пользователя в плохой день». Это уменьшает наш revenue в волатильные
периоды и это сознательный трейдоф.
4. Self-custody — by construction, not by promise
У Quantor нет ваших денег. Никогда. По дизайну:
- Вы сами создаёте Binance API key. Рекомендованные права: spot trading, NO withdraw.
- Ключ шифруется AES-GCM master-ключом, который живёт в GCP Secret Manager отдельным trust boundary.
- В DB лежит только зашифрованный blob + last4 + флаг
verified=true/false.
- Даже если БД Quantor скомпрометирована — расшифровать ключи нельзя без отдельного master-ключа. А даже расшифровав, нельзя вывести — потому что Binance-ключ это запрещает.
5. Tamper-evident audit chain (Layer B)
Каждое audit-критичное событие записывается с хэшем, который зависит от
предыдущего: hash = sha256(prev_hash + canonical_payload).
Любая попытка тихо изменить или удалить запись задним числом ломает
цепочку — следующие хэши перестают сходиться. Verifier-эндпоинт
воспроизводит head-hash независимо, Pulse-проба
obs.audit-chain проверяет целостность ежечасно.
Threat model
Сценарий «будущий злоумышленник с DB-доступом тихо стирает плохую сделку и
делает вид что её не было» — обнаруживается арифметически. Сценарий
«будущий founder редактирует историю под себя» — тоже. Цепочку нельзя
подделать, не имея всех ключей и всех хэшей.
6. Pulse — синтетическая проба в один клик
13 проб через все слои стека за ~10 секунд. Side-effect-free — ничего не
пишет, ничего не отправляет реальным юзерам, ничего не покупает. Если
что-то покраснело — карточка показывает конкретный файл:метод:строка, где
цепочка сломалась. Это не «уведомление», а полноценный синтетический
тест-сценарий, который оператор гоняет после каждого деплоя.
Что проверяет
| Probe | Что катит |
| health | API живой |
| db.read | SELECT 1 через JPA |
| db.write | insert + delete в pulse_runs |
| plan.catalog | 3 платных плана, лимиты соответствуют коду |
| strategy.catalog | 4 стратегии зарегистрированы |
| market.regime | regime detector отдаёт валидный MarketRegime |
| worker.heartbeat | worker писал heartbeat ≤ 60s назад |
| pipeline.dry-run | EMA-стратегия отрабатывает 100 синтетических свечей |
| billing.lemonsqueezy | LS checkout URLs валидны |
| billing.cryptocloud | HMAC self-test (matching + tampered) |
| audit-chain.head | цепочка хэшей воспроизводится |
| sentry | DSN сконфигурен |
| build.signature | Ed25519 подпись валидна против committed публичного ключа |
Сравнение с типичным крипто-бот SaaS
Открытые цифры с публичных pricing-страниц на май 2026. Не нападение на
конкурентов — просто факты.
|
Типичный бот SaaS |
Quantor |
| Подпись билда |
нет — невозможно проверить |
Ed25519, public key |
| Risk policy |
обычно одно — stop-loss |
14 гейтов + regime guard |
| Custody |
иногда непрозрачно |
API keys, withdraw запрещён |
| Audit chain |
обычный лог (можно стереть) |
hash-chain (стереть = сломать) |
| Стартовая цена |
$25–30/мес |
$19/мес |
| Telegram-native control |
только уведомления |
бот-команды + Mini-App |