SHA256
Кошелёк Сияния: фактический расход с сервера, доработка UI и topup через compute budget
This commit is contained in:
@@ -24,7 +24,7 @@ import {
|
||||
getShineBlockchainUsage,
|
||||
getShineUsersEconomyConfig,
|
||||
updateShineUserPdaOnSolana,
|
||||
} from '../services/shine-blockchain-wallet-service.js?v=2026052803';
|
||||
} from '../services/shine-blockchain-wallet-service.js?v=202605300007';
|
||||
|
||||
export const pageMeta = { id: 'wallet-view', title: 'Кошелёк' };
|
||||
const SOLANA_PRIVATE_BASE58_MAX_LEN = 44;
|
||||
@@ -159,14 +159,14 @@ export function render({ navigate }) {
|
||||
|
||||
const usedLabel = document.createElement('p');
|
||||
usedLabel.className = 'meta-muted';
|
||||
usedLabel.textContent = 'Израсходовано (закреплено в Solana)';
|
||||
usedLabel.textContent = 'Израсходовано (фактически на сервере)';
|
||||
const usedValue = document.createElement('h2');
|
||||
usedValue.style.fontSize = '26px';
|
||||
usedValue.textContent = '— KB';
|
||||
|
||||
const leftLabel = document.createElement('p');
|
||||
leftLabel.className = 'meta-muted';
|
||||
leftLabel.textContent = 'Осталось (по Solana)';
|
||||
leftLabel.textContent = 'Осталось';
|
||||
const leftValue = document.createElement('h2');
|
||||
leftValue.style.fontSize = '30px';
|
||||
leftValue.textContent = '— KB';
|
||||
@@ -185,11 +185,8 @@ export function render({ navigate }) {
|
||||
updatedLabel.textContent = 'Обновлено: —';
|
||||
|
||||
const serverTitle = document.createElement('h3');
|
||||
serverTitle.style.margin = '8px 0 0';
|
||||
serverTitle.style.margin = '14px 0 0';
|
||||
serverTitle.textContent = 'Фактическое состояние на сервере';
|
||||
const serverBlocksLabel = document.createElement('p');
|
||||
serverBlocksLabel.className = 'meta-muted';
|
||||
serverBlocksLabel.textContent = 'Блоков: —';
|
||||
const serverSizeLabel = document.createElement('p');
|
||||
serverSizeLabel.className = 'meta-muted';
|
||||
serverSizeLabel.textContent = 'Размер цепочки: —';
|
||||
@@ -203,11 +200,8 @@ export function render({ navigate }) {
|
||||
serverLastHashLabel.textContent = 'Hash: —';
|
||||
|
||||
const solanaTitle = document.createElement('h3');
|
||||
solanaTitle.style.margin = '8px 0 0';
|
||||
solanaTitle.style.margin = '14px 0 0';
|
||||
solanaTitle.textContent = 'Закреплено в Solana';
|
||||
const solanaBlocksLabel = document.createElement('p');
|
||||
solanaBlocksLabel.className = 'meta-muted';
|
||||
solanaBlocksLabel.textContent = 'Блоков: —';
|
||||
const solanaLastLabel = document.createElement('p');
|
||||
solanaLastLabel.className = 'meta-muted';
|
||||
solanaLastLabel.textContent = 'Крайний блок: —';
|
||||
@@ -228,12 +222,10 @@ export function render({ navigate }) {
|
||||
endpointLabel,
|
||||
updatedLabel,
|
||||
serverTitle,
|
||||
serverBlocksLabel,
|
||||
serverSizeLabel,
|
||||
serverLastLabel,
|
||||
serverLastHashLabel,
|
||||
solanaTitle,
|
||||
solanaBlocksLabel,
|
||||
solanaLastLabel,
|
||||
solanaLastHashLabel,
|
||||
);
|
||||
@@ -257,7 +249,6 @@ export function render({ navigate }) {
|
||||
sizeBytes: Number(user.serverBlockchainSizeBytes || 0),
|
||||
sizeLimitBytes: Number(user.serverBlockchainSizeLimitBytes || 0),
|
||||
lastNumber,
|
||||
blocksCount: lastNumber >= 0 ? (lastNumber + 1) : 0,
|
||||
lastHash: String(user.serverLastGlobalHash || ''),
|
||||
};
|
||||
};
|
||||
@@ -314,22 +305,19 @@ export function render({ navigate }) {
|
||||
fetchServerState(),
|
||||
]);
|
||||
if (modeToken !== activeModeToken) return;
|
||||
const solanaBlocks = usage.lastBlockNumber >= 0 ? usage.lastBlockNumber + 1 : 0;
|
||||
const serverBlocks = serverState.blocksCount;
|
||||
|
||||
limitValue.textContent = formatKbFromBytes(usage.paidLimitBytes);
|
||||
usedValue.textContent = formatKbFromBytes(usage.usedBytes);
|
||||
leftValue.textContent = formatKbFromBytes(usage.leftBytes);
|
||||
const usedServerBytes = BigInt(Math.max(0, Number(serverState.sizeBytes || 0)));
|
||||
const leftServerBytes = usage.paidLimitBytes > usedServerBytes ? (usage.paidLimitBytes - usedServerBytes) : 0n;
|
||||
usedValue.textContent = formatKbFromBytes(usedServerBytes);
|
||||
leftValue.textContent = formatKbFromBytes(leftServerBytes);
|
||||
pdaLabel.textContent = `PDA: ${usage.userPda}`;
|
||||
endpointLabel.textContent = `RPC: ${usage.endpoint}`;
|
||||
updatedLabel.textContent = `Обновлено: ${nowRu()}`;
|
||||
|
||||
serverBlocksLabel.textContent = `Блоков: ${serverBlocks.toLocaleString('ru-RU')}`;
|
||||
serverSizeLabel.textContent = `Размер цепочки: ${formatKbFromBytes(serverState.sizeBytes)} из ${formatKbFromBytes(serverState.sizeLimitBytes)}`;
|
||||
serverSizeLabel.textContent = `Размер цепочки: ${formatKbFromBytes(serverState.sizeBytes)}`;
|
||||
serverLastLabel.textContent = `Крайний блок: ${serverState.lastNumber}`;
|
||||
serverLastHashLabel.textContent = `Hash: ${serverState.lastHash || '—'}`;
|
||||
|
||||
solanaBlocksLabel.textContent = `Блоков: ${solanaBlocks.toLocaleString('ru-RU')}`;
|
||||
solanaLastLabel.textContent = `Крайний блок: ${usage.lastBlockNumber}`;
|
||||
solanaLastHashLabel.textContent = `Hash: ${usage.lastBlockHashHex || '—'}`;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user