11 Commits

Author SHA1 Message Date
Caffeine 07e00f106c fix(api): рабочий рецепт — /api в базе обязателен для POST
Найдено исполнением рецепта из самого файла: `const BASE = 'https://testfront.binom.pw'`
→ `POST /wallet` возвращал 405 Method Not Allowed. GET-ручки терпят отсутствие
префикса (`/state` == `/api/state`), а POST-ручки — нет. Внешний разработчик
спотыкался на первой же строке примера.

Что исправлено:
- база в примере: `https://testfront.binom.pw/api` + предупреждение про /api
- POST /wallet в примере: добавлены заголовок Content-Type и тело `{}` (без них 405)
- WS-адрес в примере: явный `wss://` вместо `BASE.replace('https','wss')`,
  который после смены базы дал бы кривой `wss://testfront.binom.pw/api.replace…`
- amountUnits в примере — строкой (поддержаны оба вида, число тоже работает)

Проверено: рецепт, выдранный из файла регуляркой и запущенный как есть, отдаёт
курс, `bet_open` и `bet_closed`. WS принимает подключение с чужого Origin
(проверено тремя вариантами заголовка).
2026-09-14 02:32:32 +03:00
Caffeine b8c040dedc docs: привести README и API.md в соответствие с живым стендом
Оба файла описывали состояние, которого больше нет, и содержали ошибки,
из-за которых внешний разработчик не собрал бы рабочий фронт:

- README описывал Phantom, swap ввод/вывод (POST /api/pump/swap), STUB-ключи
  и Фазу 1 — ничего этого в index.html нет. Указан нерабочий API base
  (smart-updown.binom.pw вместо testfront.binom.pw) и адрес контракта FMM….
  «Ставка через поллинг» — поллинга нет, события по WS.
- API.md держал раздел «часть ставок зависает без исхода» со статусом
  «не исправлено» — баг закрыт 14.09.2026 в контракте. По этой доке писали бы
  обходной код под проблему, которой нет.

README переписан под фактический index.html: HTTP-шлюз без Phantom,
сценарий кошелёк→фаусет→ставка→WS-исход, три исхода, правило 409.
Секция API.md заменена на «Ничья при exitPrice == entryPrice» (штатный
исход, доля ~трети), историческая сноска на SEC-9 сохранена.

Проверено: полный сценарий снаружи по новой доке проходит
(кошелёк → фаусет 10000 → ставка id=44 → исход по балансу).
2026-09-14 02:24:53 +03:00
Caffeine 30a17f7d99 feat(ui): третий исход в UI — возврат залога при ничьей
onBetClosed показывал бинарно: всё, что не payout_done, — «ПРОИГРАЛ (house_won)»
красным. Ничья (деньги вернулись игроку) выглядела как проигрыш.

Теперь три исхода + нейтральная заглушка:
- payout_done → ВЫИГРАЛ (ok)
- house_won  → ПРОИГРАЛ (err)
- refunded   → ВОЗВРАТ (ничья, ставка возвращена) (info)
- иное       → РАССЧИТАНА (<statusName>) (info), не валится в проигрыш

API.md: пример bet_closed со status 3 + описание refunded.
Проверено: node --check инлайн-JS OK, образ smart/test-front:5, раздача наружу.
2026-09-14 02:09:15 +03:00
assistant d9b1cc1ed8 docs(api): контракт API для клиента — HTTP + WS-события
API.md: полное описание ручек, трёх WS-событий (price/bet_open/bet_closed),
полей с масштабами, ошибок (409 = уже есть открытая ставка), авто-закрытия.
Все значения сверены с живым стендом.

README: убрано устаревшее 'поллинг до SETTLED' — поллинга нет, события идут по WS.

Отдельно задокументирован SEC-9: ~33.6% ставок (замер на 580 мин) зависают
из-за exit==entry и вечного ретрая.
2026-09-14 00:20:12 +03:00
Caffeine f9daee67bf feat(front): убрана мёртвая кнопка /close, события ставки по WebSocket
- блок «Закрытие (POST /close)» -> «Ставка: ход игры»: № ставки, состояние, вход/выход
- ручка /close удалена на сервере (404) -> кнопка и gwClose() убраны
- ws.onmessage разбирает bet_open / bet_closed: ставка показывается и
  рассчитывается сама, сервер закрывает её без участия клиента
2026-09-13 18:49:32 +03:00
Caffeine 707668b178 feat(front): отдельный блок «Кошелёк и пополнение» на техтест-пульте
- кнопки «Создать кошелёк» (POST /wallet) и «Пополнить кошелёк» (GET /faucet)
- поле адреса кошелька + подстановка в поле «Адрес»
- подсказка про 403 в режиме release
- ставка: пояснение, что адрес обязателен и деньги выдаёт отдельная кнопка
2026-09-13 13:38:38 +03:00
Caffeine 83f6c77538 feat: живая цена SOL по WebSocket + деплой в k3s (Dockerfile/helm)
Фронт подключается к wss://<host>/api/ws и выводит цену SOL, которую
шлюз транслирует из NATS. Автопереподключение, статус соединения,
счётчик сообщений. Добавлены Dockerfile/nginx.conf/helm для деплоя.
2
2026-09-13 05:53:48 +03:00
Caffeine 5cd6a0a532 fix: дефолт gwBase = https://testfront.binom.pw/api (иначе 404 на /state) 2026-09-10 04:36:28 +03:00
Caffeine 22bf74eb1f feat: пульт на HTTP-шлюз — ставки/баланс без Phantom (gwBase, пресеты кошельков) 2026-09-10 04:33:41 +03:00
Caffeine 32470d89b2 feat: токеновая подпись create_bet (8 аккаунтов по IDL) + дефолтный programId 9ALs
- 8 аккаунтов строго по порядку IDL: bettor/global/bet/clock/system_program/bettor_token/vault_token/token_program
- vault_token = ATA от PDA[global,vault]; bettor_token = ATA игрока (ASSOCIATED_TOKEN_PROGRAM_ID)
- minAmount: st.minAmountToken ?? st.minAmountLamports
- programId по умолчанию = 9ALsnx... (токеновый контракт)
2026-09-10 02:36:36 +03:00
Caffeine 41acef2238 Технический тестовый фронт экономики Binary Rocket: подключение Phantom, балансы (фантики+SOL), swap пополнение/вывод через /api/pump/swap, ставка вверх/вниз через контракт с поллингом 2026-09-09 18:36:15 +03:00