Кошелёк Сияния: фактический расход с сервера, доработка UI и topup через compute budget
This commit is contained in:
parent
edc94d3700
commit
b75ac46781
@ -1,2 +1,2 @@
|
||||
client.version=1.2.99
|
||||
server.version=1.2.93
|
||||
client.version=1.2.100
|
||||
server.version=1.2.94
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
<link rel="manifest" href="./manifest.webmanifest" />
|
||||
<title>Shine UI Demo</title>
|
||||
<script>
|
||||
window.__SHINE_BUILD_HASH__ = '20260530000600';
|
||||
window.__SHINE_BUILD_HASH__ = '20260530000700';
|
||||
window.__SHINE_CLIENT_VERSION__ = '1.2.8';
|
||||
</script>
|
||||
<script>
|
||||
|
||||
@ -47,7 +47,7 @@ import * as keyStorageView from './pages/key-storage-view.js';
|
||||
|
||||
import * as profileView from './pages/profile-view.js';
|
||||
import * as profileEditView from './pages/profile-edit-view.js';
|
||||
import * as walletView from './pages/wallet-view.js?v=202605300006';
|
||||
import * as walletView from './pages/wallet-view.js?v=202605300007';
|
||||
import * as settingsView from './pages/settings-view.js';
|
||||
import * as developerSettingsView from './pages/developer-settings-view.js';
|
||||
import * as serverSettingsView from './pages/server-settings-view.js';
|
||||
|
||||
@ -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 || '—'}`;
|
||||
|
||||
|
||||
@ -457,10 +457,12 @@ export async function updateShineUserPdaOnSolana({
|
||||
],
|
||||
data: ixData,
|
||||
});
|
||||
const computeIx = solana.ComputeBudgetProgram.setComputeUnitLimit({ units: 400_000 });
|
||||
const heapIx = solana.ComputeBudgetProgram.requestHeapFrame({ bytes: 131_072 });
|
||||
|
||||
const signature = await solana.sendAndConfirmTransaction(
|
||||
connection,
|
||||
new solana.Transaction().add(edIxRoot, edIxBch, updIx),
|
||||
new solana.Transaction().add(computeIx, heapIx, edIxRoot, edIxBch, updIx),
|
||||
[deviceKeypair],
|
||||
{ commitment: 'confirmed' },
|
||||
);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user