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

3.6 KiB
Raw Blame History

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.

Отчёт

Что сделал, как запускать, как пользоваться (какие поля/кнопки). Если шлюз недоступен с браузера — как проксировать наружу (совет, не реализация).