From 707668b1784304d959c3b714a9e0f88f035511f0 Mon Sep 17 00:00:00 2001 From: Caffeine Date: Sun, 13 Sep 2026 13:38:38 +0300 Subject: [PATCH] =?UTF-8?q?feat(front):=20=D0=BE=D1=82=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D1=8C=D0=BD=D1=8B=D0=B9=20=D0=B1=D0=BB=D0=BE=D0=BA=20=C2=AB?= =?UTF-8?q?=D0=9A=D0=BE=D1=88=D0=B5=D0=BB=D1=91=D0=BA=20=D0=B8=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5=C2=BB=20?= =?UTF-8?q?=D0=BD=D0=B0=20=D1=82=D0=B5=D1=85=D1=82=D0=B5=D1=81=D1=82-?= =?UTF-8?q?=D0=BF=D1=83=D0=BB=D1=8C=D1=82=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - кнопки «Создать кошелёк» (POST /wallet) и «Пополнить кошелёк» (GET /faucet) - поле адреса кошелька + подстановка в поле «Адрес» - подсказка про 403 в режиме release - ставка: пояснение, что адрес обязателен и деньги выдаёт отдельная кнопка --- index.html | 48 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/index.html b/index.html index 6e459fb..0877dc1 100644 --- a/index.html +++ b/index.html @@ -70,6 +70,20 @@
Состояние ещё не прочитано.
+
+ Кошелёк и пополнение (тест: POST /wallet, GET /faucet) +
+ + + Пополнение — только на тестовом стенде (на релизе шлюз ответит 403) +
+
+ + +
+
«Создать кошелёк» ничего не наливает: сначала создайте, затем нажмите «Пополнить кошелёк», потом ставьте.
+
+
Ставка (POST /bet, без Phantom)
@@ -81,7 +95,7 @@
-
сумма ×1e6 → units (decimals=6); адрес берётся из поля «Адрес» (пустой адрес — шлюз сам сгенерит и зарегистрирует кошелёк)
+
сумма ×1e6 → units (decimals=6). Адрес обязателен: сначала «Создать кошелёк» → «Пополнить кошелёк» (на тесте), затем ставка.
лимиты ставок неизвестны (обновите state)
@@ -179,6 +193,38 @@ async function gwBalance(){ }catch(e){ log.err('balance: '+e.message); } } +// ---- Кошелёк и пополнение (тест) ---- +async function gwWallet(){ + try{ + const j = await gwFetch('/wallet', {}); + document.getElementById('walletAddr').value = j.address || ''; + log.ok('Кошелёк создан: '+j.address+' (денег на нём пока нет — нажмите «Пополнить кошелёк»)'); + }catch(e){ log.err('wallet: '+e.message); } +} + +async function gwTopUp(){ + try{ + const w = document.getElementById('walletAddr').value.trim(); + const a = w || ADDR(); + if(!a){ log.err('faucet: нет адреса — создайте кошелёк (или впишите адрес в поле «Адрес»)'); return; } + if(!w) document.getElementById('walletAddr').value = a; + const j = await gwFetch('/faucet/'+encodeURIComponent(a)); + document.getElementById('balTok').textContent = j.tokenHuman; + document.getElementById('balSol').textContent = Number(j.sol).toFixed(6)+' SOL'; + log.ok('Пополнено '+a+': фантики='+j.tokenHuman+', SOL='+j.sol); + }catch(e){ + log.err('faucet: '+e.message); + if(String(e.message).indexOf('403')>=0) log.info('403 = пополнение выключено (режим release или сеть не тестовая). Это ожидаемо на боевом стенде.'); + } +} + +function useWalletAddr(){ + const w = document.getElementById('walletAddr').value.trim(); + if(!w){ log.err('в поле нет адреса кошелька — сначала «Создать кошелёк»'); return; } + document.getElementById('addr').value = w; + log.info('Адрес «'+w+'» подставлен в поле «Адрес» (для ставки и баланса)'); +} + let lastBetId = ''; async function gwBet(){ try{