Files
test-front/TASK-gateway-front.md
T

34 lines
3.6 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.
# 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.
## Отчёт
Что сделал, как запускать, как пользоваться (какие поля/кнопки). Если шлюз недоступен с браузера — как проксировать наружу (совет, не реализация).