Files
pump-game-ops/TASKS.md
T
subochev 1d49468920 docs(security): нумерация пунктов чек-листа SEC-1..SEC-15
Сквозные номера не сбиваются при добавлении/закрытии пунктов внутри
разделов. В SEC-4 фикс ссылается на SEC-1/SEC-2. В сводке — раскладка
по важности.
2026-09-13 12:42:27 +03:00

109 lines
9.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# TASKS.md — список задач (трекер проекта)
Здесь живёт **весь** список задач — не только мои. Трекаем проект целиком. Бинарные составляющие:
- фаркул/pivotable-задачи (что можно отложить или развернуть иначе) помечаются `[pivotable]`;
- общие/инфра (деплой, стабильность, мок) — `[pump.meta]`.
**Статусы:** `TODO` / `IN_PROGRESS` / `DONE` / `BLOCKED`.
---
## ⭐ Актуальное состояние (2026-09-13)
**Где мы:** цена SOL — **реальная, из NATS**, шлюз и тестовый фронт крутятся в k3s на
`testfront.binom.pw`. Первый щуп экономики закрыт: ставка → раунд → результат считается
по живой рыночной цене.
**Новое (2026-09-13):**
- Цена SOL берётся из NATS (`market.price.solusdt`), заглушка удалена — **ADR-007**,
детали в `docs/PRICE-NATS.md`.
- Шлюз раздаёт цену фронту по WebSocket: `wss://testfront.binom.pw/api/ws`.
- `test-front` показывает живую цену SOL.
- Оба контейнера (статика + шлюз) — в k3s, ns `game`, один домен через ингресс.
- Solana localnet пересобрана с нуля, контракт задеплоен (`9ALs…`).
---
## ⭐ Предыдущее состояние (2026-09-09)
**Где мы:** Фаза 1 (контракт переведён на фантики) — **DONE**. Сейчас вход в **Фазу 2 (релейер под токен)**.
**Готово:**
- Контракт `smart-updown-token` — переведён на SPL-токен (фантики), IDL+тесты обновлены. Коммит `45d64d4`.
- Ktor swap-клиент в бэкенде (ввод/вывод) — заготовка.
- Тестовый фронт `test-front` — каркас (Phantom, балансы, пополнение/вывод).
**В работе / вперёд:**
- **Фаза 2 (активная):** релейер перевести с SOL на токен (ops/pda/config). После неё + E2E на localnet.
- **Веха «первый щуп»:** 👉 *как только релейер на фантиках + E2E на localnet прогнаны — через `test-front` вы самостоятельно щупаете: пополнить фантики → ставка → результат.* Это первый реальный user-тест (без Unity).
**Параллельные TODO (не блокируют Фазу 2):** реальная цена (вместо `RandomPriceSource` — источник выбран: `binance-market`, ADR-007, остаётся интеграция), эмиссия, ликвидность/комиссии swap.
---
## Фаза 0 — Экономика и спека (кросс)
- [ ] **TODO** ADR-002 зафиксирован, документировать `ECONOMY.md`: токен, курс (Способ 1), decimals=6, mint-адреса — `[pump.meta]`
- [x] **DONE** Решить «вверх/вниз» — предмет ставки = цена SOL (ADR-006), валюта = фантики
- [x] **DONE** Цена SOL: реальный источник (ADR-007) — `subochev/binance-market` через NATS `market.price.solusdt`; интеграция `PriceSource` в релейере сделана (ADR-008, 2026-09-13)
- [ ] **TODO** Кто держит ликвидность swap и комиссии — `[pump.meta]`
- [ ] **TODO** Эмиссия: разовая vs постоянная — `[pump.meta]`
## Фаза 1 — Контракт на токене (ядро) — репо `smart-updown-token` (копия Smart-game)
- [x] **DONE** Создана копия контракта `smart-updown-token` (ветка main, чистый) — работаем тут
- [x] **DONE** Перевести `create_bet` с SOL (lamports) на SPL-токен: приём фантиков с ATA игрока на ваулт
- [x] **DONE** Выплата в `close_bet` фантиками из ATA-ваулта на ATA игрока
- [x] **DONE** `state`/`constants`: единицы = token units (decimals=6), + VAULT_SEED
- [x] **DONE** Обновить IDL (idl/ + relayer/idl/) + Anchor-тесты (10/10) — коммит 45d64d4
- [x] **DONE** Localnet стенд поднят заново (ledger пересобран), контракт задеплоен, mint создан, `init` прогнан (2026-09-13)
- [x] **DONE** E2E живьём: ставка → close по реальной цене из NATS (`entryPrice=10195000000` при курсе 101.95)
## Фаза 2 — Релейер и цена (АКТИВНАЯ — следующий шаг)
- [ ] **IN_PROGRESS** SolanaClient/ops: подписывать/отправлять токеновую ставку (ATA + ваулт) — перевести релейер с SOL на токен
- [ ] **TODO** readGlobal: баланс vault_token вместо SOL; ensureVaultFunded — наливать токен в vault
- [x] **DONE** PriceSource: реальная цена (вместо `RandomPriceSource`) — интеграция с `binance-market` (ADR-007), NATS-консьюмер `market.price.solusdt` в `src/natsPrice.ts`, цена ×1e8 (ADR-008)
- [ ] **TODO** Интеграционный тест релейера на токеновом флоу
## Фаза 4 — Бэкенд: задействовать swap
- [ ] **DONE** Ktor `PumpApiClient` + `POST /agents/swap` + DTO + заготовка (в `smart-updown-server`)
- [ ] **TODO** Проверить реальный swap на devnet (не мок)
- [ ] **TODO** Обвязать `GameService`: ввод/вывод фантиков через swap
## Фаза 5 — Фронт (Unity)
- [ ] **TODO** Кнопки «Пополнить»/«Вывести», баланс в фантиках
- [ ] **TODO** SolanaBridge.jslib: подпись токеновой create_bet (ATA игрока в ключах)
- [ ] **TODO** Wallet.cs: баланс в фантиках (ATA + getTokenAccountBalance), CanAfford по токену
## Фаза 5b — Тестовый фронт (`test-front`, для ручной гонки экономики без Unity)
- [x] **DONE** Каркас: Phantom, балансы (фантики+SOL), swap пополнение/вывод через `/api/pump/swap`
- [x] **DONE** Ставка вверх/вниз через контракт с поллингом до SETTLED
- [ ] **TODO** Перевести подпись под токеновую версию контракта (после Фазы 1)
- [x] **DONE** Реальный провайдер цены вместо RandomPriceSource (за нами) → `binance-market` через NATS (ADR-007/ADR-008)
- [x] **DONE** Живая цена SOL по WebSocket (`wss://testfront.binom.pw/api/ws`), вывод на странице — релиз 2
- [x] **DONE** Развернуть / дать постоянный URL — `https://testfront.binom.pw` (k3s, ns `game`, ингресс; релиз 2)
## Фаза 6 — E2E и деплой
- [ ] **TODO** Полный круг на devnet: создать токен → swap ввод → ставка токеном → раунд → вывод
- [ ] **TODO** Обновить `API.md`/`INTEGRATION.md`, развернуть на mainnet
- [ ] **TODO** Стабильность: версионировать конфиги, mint-адрес в конфиге
---
## Ссылки
- Решения/экономика: `docs/DECISIONS.md`, `docs/ECONOMY.md`
- Карта репозиториев: `README.md`
## Фаза 7 — Цена из NATS и деплой в куб (2026-09-13)
- [x] **DONE** ADR-007: цена SOL из NATS (`market.price.solusdt`), заглушка удалена
- [x] **DONE** `natsPrice.ts` — подписка NATS, последняя цена, `waitForPrice`, ×1e8 строковым парсером
- [x] **DONE** `gateway.ts` — WS `/ws`, `GET /price`, нормализация `/api/...` → `/...`
- [x] **DONE** `test-front` — блок «Цена SOL (WebSocket)»: цена, статус, автопереподключение
- [x] **DONE** Dockerfile + helm для шлюза и фронта; деплой в k3s ns `game`
- [x] **DONE** Роут `testfront.binom.pw` переведён с 76.199 на куб 76.120 (Traefik VDS)
- [x] **DONE** Релизы: `smart-updown-token` 7, `test-front` 2
- [x] **DONE** Документация: `docs/PRICE-NATS.md`, `docs/diagrams/price-flow.puml`, ADR-007
- [ ] **TODO** Пилот: смена `entry_price` на «реальный источник как оракул» до боя (Pyth/Switchboard)
- [ ] **TODO** Деградация при отсутствии цены: отдельное решение (бэкфилл/остановка приёма ставок)
## Ссылки (дополнено 2026-09-13)
- Цена: `docs/PRICE-NATS.md`, диаграмма `docs/diagrams/price-flow.puml`
- **Безопасность: `docs/SECURITY.md` — чек-лист `SEC-1…SEC-15` (аудит живого стенда 2026-09-13)**