subochev 18ecbb42b3 docs(security): чек-лист безопасности игрового контура (аудит живого стенда)
15 пунктов, отмечаются [ ]/[x]. Критичное найдено воспроизведением на
testfront.binom.pw, не чтением кода:
- close_bet проверяет только нижнюю границу окна (now >= expire_time) —
  верхней нет, ставка висит open бесконечно, момент расчёта выбирает
  вызывающий /close;
- в шлюзе нет авто-закрытия (единственный setInterval — WS-heartbeat);
- /bet, /close, /faucet открыты наружу без авторизации; faucet выдал
  5 SOL + 10000 фантиков при SMART_ALLOW_AIRDROP=1 в боевом поде;
- эксплойт воспроизведён: ставка DOWN (entry=9998000000) висела open >2 мин
  после экспирации 15с и закрыта при exitPrice=9997000000 -> payout_done.
Плюс: множитель 1.3x требует 77% винрейта, запертые средства в ваулте,
равные цены не финализируют ставку, NATS без auth, релейер — точка доверия.
2026-09-13 12:40:51 +03:00

pump-game-ops — мета-репозиторий проекта «Бинарная ракета» (Binary Rocket)

Единая точка для сервисной документации, принятых решений и списка задач проекта мемкойн-игры на pump.fun. Кода тут нет — только то, что связывает компоненты между собой (индексация), и что не живёт в конкретных репозиториях.

Что это и зачем

У нас много компонентов (фронт, бэкенд, контракт, релейер). Здесь мы ведём:

  • карту репозиториев (кто за что отвечает, где какая часть),
  • журнал решений (почему так, а не иначе — ADR),
  • экономику токена (свой мемкойн, курс, decimals, mint-адреса),
  • список задач/статусы (трекаем весь проект тут — включая задачи, встающие на кросс-компонентные решения: forkable/pivotable и т.п.).

Карта репозиториев

# Компонент Репозиторий Путь (локально) Язык/стек Роль
1 Смарт-контракт (оригинал) akovalenko/Smart-game ~/WORK/games/Smart-game Rust/Anchor (Solana) игровая логика ставок вверх/вниз, ваулт, выплата (SOL, не трогаем)
1b Смарт-контракт (фантики) subochev/smart-updown-token ~/WORK/games/smart-updown-token Rust/Anchor (Solana) копия Smart-game для перевода на наши фантики (SPL-токен) — работаем тут
2 Бэкенд (релейер) subochev/smart-updown-server ~/WORK/games/smart-updown-server Kotlin/Spring Boot + solanaj ретрансляция ставок, свап-клиент к pump.fun, релейер
3 Фронт (Unity) subochev/fun-game-front2 ~/WORK/games/fun-game-front2 Unity WebGL + Phantom UI, кошелёк, подпись create_bet
4 Тестовый фронт subochev/test-front ~/WORK/games/test-front HTML/JS + Phantom технический дашборд для ручного теста экономики (пополнение/ставка/вывод) без Unity
5 Мета-репо (этот) subochev/pump-game-ops ~/WORK/games/pump-game-ops Markdown документация, решения, задачи

Примечания:

  • Remote-адреса: https://git.binom.pw/<owner>/<repo>.git.
  • Ветки: smart-updown-server и fun-game-front2 — main; Smart-game сейчас на extract-sources.

Внешние зависимости (upstream)

binance-market — это не часть игры, а общий инфраструктурный сервис инвест-кластера, который игра «Бинарная ракета» использует как upstream-провайдер цены SOL (вместо заглушки RandomPriceSource, см. ADR-006 → ADR-007).

Компонент Репозиторий Путь (локально) Язык/стек Роль для игры
binance-market (upstream цены) subochev/binance-market ~/common-projects/invest/binance-market Kotlin / Spring Boot 3.3.5 WebFlux собирает рыночные данные с Binance (Binance WS: depth@100ms + aggTrade); выдаёт last-trade через GET /ws/price?symbol=<sym> (порт 8080) и через NATS-топик market.price.<symbol>; релейер использует это как PriceSource (см. ADR-007)

Контракт между игрой и сервисом:

  • В кластере (предпочтительно): подписка на NATS-топик market.price.solusdt (адрес задаётся в релейере; прод-адрес см. в его конфиге).
  • Снаружи кластера / тест: WebSocket ws://<binance-market-хост>:8080/ws/price?symbol=solusdt.
  • Покрытие символов сейчас: btcusdt,ethusdt,solusdt (конфиг binance.symbols в values.yaml чарта).

Принятые решения (сводка)

Ссылка на полный журнал — docs/DECISIONS.md. Ключевое:

  • Свой токен на pump.fun (мемкойн Binary Rocket), не чужой.
  • Курс — живой рыночный (Способ 1): ставки в фантиках, ввод/вывод через swap.
  • decimals = 6, токен через Token-2022 (по доке pump.fun create_v2).
  • Ставки идут фантиками через контракт → контракт переводить с SOL на SPL-токен (это ядро).
  • Цена SOL — от внешнего upstream binance-market (ADR-007), не своя оракуль-логика.

Как ходят данные (кто кому что шлёт, включая согласие/подпись игрока) — docs/FLOW.md (sequence-диаграммы: текущий localnet-режим без Phantom и целевой боевой с pump.fun+Phantom).

Статус проекта (сводка)

Задачи и статусы — в TASKS.md (или docs/TASKS.md). Здесь — только верхи:

  • Фаза 0 — экономика (токен, курс, mint) — в работе
  • Фаза 1 — контракт на токене — не начато
  • Фаза 4 — задействовать свап-клиент — клиент готов
  • Фаза 5 — фронт (баланс/пополнение/вывод) — не начато
  • Интеграция с binance-market (NATS/WS-клиент PriceSource) — см. ADR-007

Безопасность

Открытый чек-лист — docs/SECURITY.md (15 пунктов: 6 критичных, 3 по экономике, 3 по инфраструктуре, 3 отложенных; аудит живого стенда 2026-09-13). Критично на сегодня: у контракта нет верхней границы окна закрытия ставки и нет серверного авто-закрытия — момент расчёта выбирает клиент, что даёт безрисковый арбитраж. Плюс открытые наружу /bet, /close, /faucet без авторизации.

Прочее

  • Ночная экономика и mint-адреса: docs/ECONOMY.md (создаётся в Фазе 0).
  • Разделы задач общего характера (например, мок/деплой/стабильность) — в TASKS.md.
S
Description
Мета-репозиторий Binary Rocket: карта репозиториев, решения (ADR), экономика токена, трекер задач
Readme 381 KiB
Languages
JavaScript 88.2%
Shell 11.8%