# test-front — технический тестовый фронт (Binary Rocket) Чисто технический веб-дашборд для **ручной проверки механики** через HTTP-шлюз: кнопки + лог. Без Phantom, без swap, без вывода средств — только постановка ставок фантиками и наблюдение за событиями. ## Зачем Технический пульт для проверки контракта «вручную»: быстро прогнать сценарий «создать кошелёк → пополнить тестовым фаусетом → поставить → дождаться исхода». Полный контракт API (HTTP + WS, поля событий, коды ошибок) — **[API.md](API.md)**. ## Возможности - Поля в шапке: **Шлюз (API)**, **WS URL**, **Адрес**. - **Создать кошелёк** — генерирует новый custodial-адрес через шлюз. - **Пополнить кошелёк** — тестовый фаусет: наливает SOL и фантики. - **Сделать ставку** — `POST /api/bet` (`side` `UP`/`DOWN`, `amountUnits`). - События по **WebSocket** (`price`, `bet_open`, `bet_closed`) — поллинга нет. - Лог всех действий + кнопки «Копировать» / «Очистить». ## Как пользоваться 1. Открыть `https://testfront.binom.pw/` — `index.html` отдаётся из куба (namespace `game`). Поле «Шлюз (API)» можно оставить пустым — фронт возьмёт свой адрес. 2. Нажать **Создать кошелёк** — в поле «Адрес» появится custodial-адрес. 3. Нажать **Пополнить кошелёк** — тестовый фаусет нальёт SOL и фантики. 4. Выбрать сторону (`UP` / `DOWN`) и сумму (в пределах `minAmountHuman` / `maxAmountHuman` из `/api/state`: `100` … `10000` фантиков) → **Сделать ставку**. 5. Результат придёт сам по WS примерно через `expirySeconds` (15 с). Три возможных исхода ставки: - **выиграл** — `statusName: "payout_done"`, выплата с множителем; - **проиграл** — `statusName: "house_won"`, ставка остаётся в ваулте; - **возврат при ничьей** — `statusName: "refunded"`, залог возвращён ровно суммой ставки без множителя (подробнее — [API.md](API.md), раздел «Ничья при `exitPrice == entryPrice`»). > Правило: **одна открытая ставка на адрес** — вторая ставка с того же адреса > получит `409`. Дождитесь `bet_closed` по WS, прежде чем ставить снова. ## Статус - [x] каркас: кошелёк, фаусет, ставка, события по WS - [x] контракт: возврат при ничьей (`exitPrice == entryPrice`)