From 968d85d73858a9e63b45e920ec08818716684c45d451a41bf7c2aa7bad0a99b5 Mon Sep 17 00:00:00 2001 From: AidarKC Date: Mon, 20 Jul 2026 21:04:11 +0400 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D0=BA=D0=B0=D0=B7=D1=8B=D0=B2?= =?UTF-8?q?=D0=B0=D1=82=D1=8C=20=D0=BE=D1=87=D0=B5=D1=80=D0=B5=D0=B4=D1=8C?= =?UTF-8?q?=20=D0=B1=D0=B8=D0=BB=D0=B5=D1=82=D0=BE=D0=B2=20mainnet=20?= =?UTF-8?q?=D0=BD=D0=B0=20=D1=82=D0=B5=D1=81=D1=82=D0=BE=D0=B2=D0=BE=D0=BC?= =?UTF-8?q?=20UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- VERSION.properties | 4 +- .../js/pages/public-support-queue-view.js | 36 ++++++++++++++++-- shine-UI/js/pages/wallet-view.js | 38 +++++++++++++++++-- 3 files changed, 69 insertions(+), 9 deletions(-) diff --git a/VERSION.properties b/VERSION.properties index e9ff063c..fb7cd911 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.2.334 -server.version=1.2.306 +client.version=1.2.335 +server.version=1.2.307 diff --git a/shine-UI/js/pages/public-support-queue-view.js b/shine-UI/js/pages/public-support-queue-view.js index f775a5a5..b61d2048 100644 --- a/shine-UI/js/pages/public-support-queue-view.js +++ b/shine-UI/js/pages/public-support-queue-view.js @@ -1,4 +1,5 @@ import { renderHeader } from '../components/header.js'; +import { defaultSolanaCluster } from '../deploy-config.js'; import { state } from '../state.js'; import { loadSolanaWeb3 } from '../vendor/solana-web3-loader.js'; @@ -6,6 +7,7 @@ export const pageMeta = { id: 'queue', title: 'Очередь билета' }; const SHINE_PAYMENTS_PROGRAM_ID = 'SHiPmXbM9Fs9khzRUW3TGKsS2W84aqaXTxs3ZkajW9v'; const SHINE_PAYMENTS_ORACLE_ACCOUNT = '7UVimffxr9ow1uXYxsr4LHAcV58mLzhmwaeKvJ1pjLiE'; +const SHINE_MAINNET_SOLANA_ENDPOINT = 'https://solana-rpc.publicnode.com'; const SHINE_PAYMENTS_SEEDS = { config: 'shine_payments_config', coef: 'shine_payments_coef_limit', @@ -15,6 +17,14 @@ const SHINE_PAYMENTS_SEEDS = { q3: 'shine_payments_q3_ticket', }; +function isTestDeployUi() { + return String(defaultSolanaCluster || '').trim().toLowerCase() !== 'mainnet-beta'; +} + +function resolveQueueEndpoint(useMainnetQueue) { + return useMainnetQueue ? SHINE_MAINNET_SOLANA_ENDPOINT : state.entrySettings.solanaServer; +} + function utf8Bytes(text) { return new TextEncoder().encode(String(text || '')); } @@ -286,7 +296,18 @@ export function render({ navigate }) { result.className = 'card stack'; result.innerHTML = `

Введите номер билета и нажмите кнопку.

`; + const testDeploy = isTestDeployUi(); + const mainnetRow = document.createElement('label'); + mainnetRow.className = 'checkbox-row'; + mainnetRow.innerHTML = ` + + Показывать данные mainnet (${SHINE_MAINNET_SOLANA_ENDPOINT}) + `; + mainnetRow.style.display = testDeploy ? '' : 'none'; + const mainnetCheckbox = mainnetRow.querySelector('#public-queue-mainnet-source'); + let lastCoreState = null; + let lastEndpoint = ''; async function renderTicketInfo() { const raw = String(queryInput.value || '').trim(); @@ -297,8 +318,12 @@ export function render({ navigate }) { } try { const parsed = parseSupportTicketInput(raw); - const core = lastCoreState || await loadSupportPaymentsCore(state.entrySettings.solanaServer); + const endpoint = resolveQueueEndpoint(Boolean(testDeploy && mainnetCheckbox?.checked)); + const core = lastCoreState && lastEndpoint === endpoint + ? lastCoreState + : await loadSupportPaymentsCore(endpoint); lastCoreState = core; + lastEndpoint = endpoint; const solana = await loadSolanaWeb3(); const ticketPdaSeed = queueSeedFor(parsed.queueId); const ticketIndexBytes = u64ToBytes(parsed.index); @@ -330,7 +355,7 @@ export function render({ navigate }) {
Сумма этого билета: ${formatUsdCentsText(ticket.payoutUsdCents)} USD
Накоплено до этого билета: ${formatUsdCentsText(ticket.debtBeforeUsdCents)} USD в очереди до него
`; - status.textContent = `Билет ${formatQueuePrefix(parsed.queueId)}-${ticket.index.toString()} найден.`; + status.textContent = `Билет ${formatQueuePrefix(parsed.queueId)}-${ticket.index.toString()} найден. Источник Solana: ${endpoint}`; } catch (error) { result.innerHTML = `

${String(error?.message || 'Не удалось загрузить билет')}

`; status.textContent = `Не удалось посмотреть билет: ${error?.message || 'unknown'}`; @@ -340,6 +365,11 @@ export function render({ navigate }) { actions.querySelector('#public-queue-load')?.addEventListener('click', () => { void renderTicketInfo(); }); + mainnetCheckbox?.addEventListener('change', () => { + lastCoreState = null; + lastEndpoint = ''; + status.textContent = `Источник Solana: ${resolveQueueEndpoint(Boolean(testDeploy && mainnetCheckbox.checked))}`; + }); actions.querySelector('#public-queue-reset')?.addEventListener('click', () => { queryInput.value = ''; result.innerHTML = `

Введите номер билета и нажмите кнопку.

`; @@ -352,7 +382,7 @@ export function render({ navigate }) { } }); - content.append(card, inputLabel, queryInput, actions, result, status); + content.append(card, mainnetRow, inputLabel, queryInput, actions, result, status); screen.append( renderHeader({ title: 'Очередь билета', diff --git a/shine-UI/js/pages/wallet-view.js b/shine-UI/js/pages/wallet-view.js index 01da7f7d..211c2549 100644 --- a/shine-UI/js/pages/wallet-view.js +++ b/shine-UI/js/pages/wallet-view.js @@ -1,4 +1,5 @@ import { renderHeader } from '../components/header.js'; +import { defaultSolanaCluster } from '../deploy-config.js'; import { authService, state } from '../state.js'; import { formatSol, @@ -65,6 +66,7 @@ function sessionArgsOrThrow() { const SHINE_PAYMENTS_PROGRAM_ID = 'SHiPmXbM9Fs9khzRUW3TGKsS2W84aqaXTxs3ZkajW9v'; const SHINE_PAYMENTS_ORACLE_ACCOUNT = '7UVimffxr9ow1uXYxsr4LHAcV58mLzhmwaeKvJ1pjLiE'; +const SHINE_MAINNET_SOLANA_ENDPOINT = 'https://solana-rpc.publicnode.com'; const SHINE_PAYMENTS_SEEDS = { config: 'shine_payments_config', coef: 'shine_payments_coef_limit', @@ -84,6 +86,14 @@ const SUPPORT_TICKET_HELP_TEXT = [ 'Номер билета нужно сохранить отдельно: именно по нему удобно отслеживать, когда он дойдет до выплаты.', ].join('\n'); +function isTestDeployUi() { + return String(defaultSolanaCluster || '').trim().toLowerCase() !== 'mainnet-beta'; +} + +function resolveSupportQueueEndpoint(useMainnetQueue) { + return useMainnetQueue ? SHINE_MAINNET_SOLANA_ENDPOINT : state.entrySettings.solanaServer; +} + function utf8Bytes(text) { return new TextEncoder().encode(String(text || '')); } @@ -697,6 +707,16 @@ export function render({ navigate }) { queryInput.spellcheck = false; styleSupportInputField(queryInput); + const testDeploy = isTestDeployUi(); + const mainnetRow = document.createElement('label'); + mainnetRow.className = 'checkbox-row'; + mainnetRow.innerHTML = ` + + Показывать данные mainnet (${SHINE_MAINNET_SOLANA_ENDPOINT}) + `; + mainnetRow.style.display = testDeploy ? '' : 'none'; + const mainnetCheckbox = mainnetRow.querySelector('#support-ticket-mainnet-source'); + const actions = document.createElement('div'); actions.className = 'row'; actions.innerHTML = ` @@ -711,6 +731,7 @@ export function render({ navigate }) { `; let lastCoreState = null; + let lastEndpoint = ''; const renderTicketInfo = async () => { const raw = String(queryInput.value || '').trim(); @@ -720,8 +741,12 @@ export function render({ navigate }) { } try { const parsed = parseSupportTicketInput(raw); - const core = lastCoreState || await loadSupportPaymentsCore(state.entrySettings.solanaServer); + const endpoint = resolveSupportQueueEndpoint(Boolean(testDeploy && mainnetCheckbox?.checked)); + const core = lastCoreState && lastEndpoint === endpoint + ? lastCoreState + : await loadSupportPaymentsCore(endpoint); lastCoreState = core; + lastEndpoint = endpoint; const solana = await loadSolanaWeb3(); const ticketPdaSeed = queueSeedFor(parsed.queueId); const ticketIndexBytes = u64ToBytes(parsed.index); @@ -752,7 +777,7 @@ export function render({ navigate }) {
Сумма этого билета: ${formatUsdCentsText(ticket.payoutUsdCents)} USD
Накоплено до этого билета: ${formatUsdCentsText(ticket.debtBeforeUsdCents)} USD в очереди до него
`; - setStatus(`Билет ${formatQueuePrefix(parsed.queueId)}-${ticket.index.toString()} найден.`); + setStatus(`Билет ${formatQueuePrefix(parsed.queueId)}-${ticket.index.toString()} найден. Источник Solana: ${endpoint}`); } catch (error) { result.innerHTML = `

${String(error?.message || 'Не удалось загрузить билет')}

`; setStatus(`Не удалось посмотреть билет: ${error?.message || 'unknown'}`); @@ -767,9 +792,14 @@ export function render({ navigate }) { result.innerHTML = `

Введите номер билета и нажмите кнопку.

`; setStatus('Поле билета очищено.'); }); + mainnetCheckbox?.addEventListener('change', () => { + lastCoreState = null; + lastEndpoint = ''; + setStatus(`Источник Solana: ${resolveSupportQueueEndpoint(Boolean(testDeploy && mainnetCheckbox.checked))}`); + }); - content.append(backBtn, card, inputLabel, queryInput, actions, result); - setStatus('Просмотр билета готов. Введите номер в нужном формате.'); + content.append(backBtn, card, mainnetRow, inputLabel, queryInput, actions, result); + setStatus(`Просмотр билета готов. Источник Solana: ${resolveSupportQueueEndpoint(Boolean(testDeploy && mainnetCheckbox?.checked))}`); } async function renderSupportBuyIntro() {