Files
smart-updown-token/relayer/gateway-TASK.md
T

3.0 KiB

TASK — HTTP-шлюз поверх релейера (чтобы пульт ставил ставки без Phantom)

Контекст

smart-updown-token — контракт на SPL-токене (фантики) + релейер (relayer/), который уже умеет на localnet (RPC 8890): initialize, createBet, closeBet, фандинг ваулта и беттора. Релейер — CLI скрипт (npm run run/--once), автономный (сам генерирует ставки через frontStub), без HTTP-входа.

Хочется: статичный веб-пульт (test-front/index.html, лежит на game2.binom.pw) мог присылать команду «поставить фантиками от адреса X» на маленький HTTP-шлюз, который вызывает функции релейера и исполняет ставку на localnet — БЕЗ Phantom.

РЕАЛИЗАЦИЯ (выполни)

Создай в relayer/ HTTP-шлюз gateway.ts (node http, БЕЗ express, только stdlib), который:

  • POST /bet {address, side, amountUnits}:
    • derives ATA беттора от address и mint
    • вызывает существующую функцию createBet (не переписывай уже готовую логику, переиспользуй из ops.ts/index.ts, если нужно — слегка вынеси)
    • фандит беттора если надо (как в fundBettor)
    • возвращает {tx, id} (id нового bet) — id вычислить из Global.counter
  • POST /close {id}: вызывает closeBet
  • GET /balance/{address}: возвращает {sol, tokenUnits, tokenHuman} (SOL-баланс + токен-баланс по ATA беттора). Токен-баланс — через getTokenAccountBalance по ATA.
  • GET /state: вернуть Global (min/max/expiry, counter) — реюз там же.
  • CORS: Access-Control-Allow-Origin: * (фронт на другом домене/порту может).
  • Порт — из env GW_PORT (default 8895). Слушать на 0.0.0.0.
  • Логирование запросов в stdout.

Запуск: npm run gateway → ts-node src/gateway.ts. Проверь npm run typecheck и npm test — не ломать существующий релейер.

НЕ делать

  • Не менять контракт program/.
  • Не переписывать саму логику ставки — только дёргать готовые функции.
  • Не коммитить.

Гейт

  • npm run typecheck 0 ошибок, npm test зелёный.
  • Шлюз стартует и отвечает на GET /state и POST /bet (проверь на localnet 8890: init уже выполнен).

Отчитайся: какие файлы создал/изменил, как запускать, результат smoke-теста.