feat: пульт на HTTP-шлюз — ставки/баланс без Phantom (gwBase, пресеты кошельков)

This commit is contained in:
Caffeine
2026-09-10 04:33:41 +03:00
parent 32470d89b2
commit 22bf74eb1f
3 changed files with 219 additions and 169 deletions
+34
View File
@@ -0,0 +1,34 @@
# TASK — Перевести тестовый фронт (test-front) на HTTP-шлюз (ставки/баланс без Phantom)
## Контекст
`test-front/index.html` — статичный пульт на `testfront.binom.pw` (осн.) / `game2.binom.pw`.
Сейчас он требует Phantom для баланса и ставки. Но поднят **HTTP-шлюз** (релейер, localnet):
- на `http://127.0.0.1:8895` (через прокси наружу будет виден как `GW_BASE`).
- Эндпоинты:
- `GET /state` → `{counter,minAmount,maxAmount,multiplierBps,expirySeconds,paused,admin,relayer,vaultBalanceHuman,minAmountHuman,maxAmountHuman}`
- `GET /balance/{address}` → `{sol,solLamports,tokenUnits,tokenHuman}`
- `POST /bet {side, amountUnits, address?}` → `{tx,id,bettor,entryPrice}` (без address — генерит и регистрирует кошелёк сам; но пульт будет передавать введённый/пресет-адрес)
- `POST /close {id}` → `{tx,id,exitPrice,status,statusName,bettor}` (statusName: payout_done/house_won/open)
## Задача (только `test-front/index.html`)
Сделать пульт работающим БЕЗ Phantom — все операции через шлюз:
1. **Добавить конфиг-поле «Шлюз (API)»** — базовый URL шлюза (default пустой → фронт сам выведет, если пусто). Назвать `gwBase`.
2. **Баланс**: введите адрес в поле → кнопка → `GET {gw}/balance/{address}` → показать фантики (`tokenHuman`) и SOL (`sol`). Убрать требование Phantom для балances.
3. **Ставка**: поля side (UP/DOWN), amountHuman; адрес (введённый или пресет). Кнопка → `POST {gw}/bet {side, amountUnits, address}` → показать `{id, bettor, entryPrice}` в лог. Ставить вверх/вниз.
4. **Закрыть**: кнопка (id из последней ставки или ввод) → `POST {gw}/close {id}` → показать `statusName` (выиграл/проиграл/открыт).
5. **Обновить state**: показывать min/max/expiry/vault с `/state`.
6. **CORS**: шлюз уже отдаёт `Access-Control-Allow-Origin: *` — fetch с любого домена пройдёт. Оставим.
7. **Пресет-кошельки**: захардкодь в поле адреса пару известных: admin (источник фантиков) — `Huha5S9ySxHC9u7RXmeQbt8GZh1VXGzfjVPGdsYV2tKK` — и/или зарегистрированный bettor из keystore (выведи его адрес при необходимости). Чтобы сразу было.
## Ограничения
- НЕ менять шлюз (`smart-updown-token/relayer/gateway.ts`) — только фронт.
- НЕ коммитить.
- amountUnits в токен-единицах (×10^decimals=6). Пользователь вводит в фантиках (до 6 знаков) — умножить на 1e6 на фронте.
## Гейт
- JS-синтаксис валиден.
- Страница открывается; при заполненном gwBase живо показывает state, делает bet/close.
## Отчёт
Что сделал, как запускать, как пользоваться (какие поля/кнопки). Если шлюз недоступен с браузера — как проксировать наружу (совет, не реализация).