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
- derives ATA беттора от
POST /close {id}: вызываетcloseBetGET /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 typecheck0 ошибок,npm testзелёный.- Шлюз стартует и отвечает на
GET /stateиPOST /bet(проверь на localnet 8890: init уже выполнен).
Отчитайся: какие файлы создал/изменил, как запускать, результат smoke-теста.