diff --git a/TASK-diag-connect.md b/TASK-diag-connect.md new file mode 100644 index 0000000..27dbaa3 --- /dev/null +++ b/TASK-diag-connect.md @@ -0,0 +1,39 @@ +# TASK — Усилить диагностику при connect() к Phantom + +Репозиторий: `test-front`, файл `index.html`. + +## Задача +При клике «Подключить Phantom» (`connect()`, стока 103-108) Phantom бросает +generic «Unexpected error». Нужно вытащить **настоящую** ошибку, чтобы понять +причину (сеть/кластер/конфиг Phantom). + +## Что сделать (только `index.html`, `connect()` и `getProvider`) + +1. ОБЕРНУТЬ точку ошибки: вместо `log.err('connect: '+e.message)` логировать БОЛЬШЕ: + - `e.message` + - `JSON.stringify(e)` (если сериализуется) — обернуть в try + - `e.toString()` + - стек: `e.stack` если есть + Разделить в лог как несколько строк / один блок. + +2. В `getProvider`: вернуть не только `window.solana`, но и **версию Phantom** и + **доступные методы** (чтобы понять, что Phantom умеет): + - если `w.solana`: залогировать `typeof w.solana.connect`, `typeof w.solana.signTransaction`, + `typeof w.solana.isConnected`, `w.solana` перечислить ключи (только названия). + Это не сломает — просто диагностический вывод в лог при подключении. + +3. НЕ менять логику (не «чинить») — только ЛОГИРОВАТЬ детали, чтобы прислать + пользователю полную картину. Это диагностика. + +## Гейт +- JS-синтаксис валиден (`node --check` извлечённого script). +- Страница открывается. + +## НЕ делать +- Не менять ставку/балансы/swap. +- Не виполнять Phantom насильно. +- Не коммитить. + +## Результат +Пользователь обновит страницу, нажмёт «Подключить», в логе увидит ПОЛНУЮ ошибку +(не только «Unexpected error»), скопирует и пришлёт нам. Из неё станет ясна причина. \ No newline at end of file diff --git a/TASK-gateway-front.md b/TASK-gateway-front.md new file mode 100644 index 0000000..1ff2a12 --- /dev/null +++ b/TASK-gateway-front.md @@ -0,0 +1,34 @@ +# 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. + +## Отчёт +Что сделал, как запускать, как пользоваться (какие поля/кнопки). Если шлюз недоступен с браузера — как проксировать наружу (совет, не реализация). \ No newline at end of file diff --git a/index.html b/index.html index c320496..26e4793 100644 --- a/index.html +++ b/index.html @@ -2,7 +2,7 @@
-