SHA256
Перевести тестовый контур на t.shineup.me
This commit is contained in:
@@ -14,6 +14,7 @@ import {
|
||||
getBalanceSol,
|
||||
getTopupSiteUrl,
|
||||
} from '../services/solana-wallet-service.js';
|
||||
import { loadSolanaWeb3 } from '../vendor/solana-web3-loader.js';
|
||||
import {
|
||||
formatSolanaErrorDetails,
|
||||
isUserAlreadyExistsSolanaError,
|
||||
@@ -185,7 +186,7 @@ export function render({ navigate }) {
|
||||
const raw = atob(publicKeyB64);
|
||||
const bytes = new Uint8Array(raw.length);
|
||||
for (let i = 0; i < raw.length; i++) bytes[i] = raw.charCodeAt(i);
|
||||
const { PublicKey } = await import('https://esm.sh/@solana/web3.js@1.98.4');
|
||||
const { PublicKey } = await loadSolanaWeb3();
|
||||
const address = new PublicKey(bytes).toBase58();
|
||||
state.registrationPayment.walletAddress = address;
|
||||
walletValue.value = address;
|
||||
|
||||
@@ -5,13 +5,14 @@ import {
|
||||
SOLANA_CLUSTER,
|
||||
} from '../solana-programs.js';
|
||||
import { state } from '../state.js';
|
||||
import { loadSolanaWeb3 } from '../vendor/solana-web3-loader.js';
|
||||
|
||||
export const pageMeta = { id: 'solana-users-init-view', title: 'Solana Init (users)' };
|
||||
|
||||
let solanaLibPromise = null;
|
||||
function loadSolanaLib() {
|
||||
if (!solanaLibPromise) {
|
||||
solanaLibPromise = import('https://esm.sh/@solana/web3.js@1.98.4?bundle');
|
||||
solanaLibPromise = loadSolanaWeb3();
|
||||
}
|
||||
return solanaLibPromise;
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ import {
|
||||
getTopupSiteUrl,
|
||||
requestAirdropSol,
|
||||
} from '../services/solana-wallet-service.js';
|
||||
import { loadSolanaWeb3 } from '../vendor/solana-web3-loader.js';
|
||||
|
||||
export const pageMeta = { id: 'topup-view', title: 'Пополнение счета', showAppChrome: false };
|
||||
|
||||
@@ -20,7 +21,7 @@ async function clientWalletAddressFromBundle() {
|
||||
const raw = atob(keyBundle.clientPair.publicKeyB64);
|
||||
const bytes = new Uint8Array(raw.length);
|
||||
for (let i = 0; i < raw.length; i += 1) bytes[i] = raw.charCodeAt(i);
|
||||
const { PublicKey } = await import('https://esm.sh/@solana/web3.js@1.98.4');
|
||||
const { PublicKey } = await loadSolanaWeb3();
|
||||
return new PublicKey(bytes).toBase58();
|
||||
}
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ import {
|
||||
SHINE_USERS_ECONOMY_CONFIG_SEED,
|
||||
SHINE_USERS_PROGRAM_ID,
|
||||
} from '../solana-programs.js';
|
||||
import { loadSolanaWeb3 } from '../vendor/solana-web3-loader.js';
|
||||
|
||||
const MAGIC = 'SHiNE';
|
||||
const LAST_BLOCK_STATE_PREFIX = 'SHiNE_LAST_BLOCK';
|
||||
@@ -30,7 +31,7 @@ const SESSION_TYPE_HOMESERVER = 100;
|
||||
|
||||
let solanaLibPromise = null;
|
||||
function loadSolanaLib() {
|
||||
if (!solanaLibPromise) solanaLibPromise = import('https://esm.sh/@solana/web3.js@1.98.4?bundle');
|
||||
if (!solanaLibPromise) solanaLibPromise = loadSolanaWeb3();
|
||||
return solanaLibPromise;
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ import {
|
||||
SHINE_USERS_PROGRAM_ID,
|
||||
SHINE_LOGIN_GUARD_PROGRAM_ID,
|
||||
} from '../solana-programs.js';
|
||||
import { loadSolanaWeb3 } from '../vendor/solana-web3-loader.js';
|
||||
|
||||
const CLASSIFY_LOGIN_INSTRUCTION_TAG = 1;
|
||||
const PRECHECK_SIM_PAYER = 'FUc28vNixp7F3nnkpGVt6nuJbgvJ4429v4B5wS52Df6P';
|
||||
@@ -10,7 +11,7 @@ const SHINE_USERS_USER_PDA_SEED_PREFIX = 'user_login=';
|
||||
|
||||
let solanaLibPromise = null;
|
||||
function loadSolanaLib() {
|
||||
if (!solanaLibPromise) solanaLibPromise = import('https://esm.sh/@solana/web3.js@1.98.4?bundle');
|
||||
if (!solanaLibPromise) solanaLibPromise = loadSolanaWeb3();
|
||||
return solanaLibPromise;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { extractClientKey32FromStoredValue } from './client-key-utils.js';
|
||||
import { loadEncryptedUserSecrets } from './key-vault.js';
|
||||
import { SOLANA_ENDPOINT_DEFAULT } from '../solana-programs.js';
|
||||
import { loadSolanaWeb3 } from '../vendor/solana-web3-loader.js';
|
||||
|
||||
const DEFAULT_SOLANA_ENDPOINT = SOLANA_ENDPOINT_DEFAULT;
|
||||
const TOPUP_SITE_URL = '/devnet-topup-view';
|
||||
@@ -24,7 +25,7 @@ function normalizeEndpoint(url) {
|
||||
|
||||
async function loadSolanaLib() {
|
||||
if (!solanaLibPromise) {
|
||||
solanaLibPromise = import('https://esm.sh/@solana/web3.js@1.98.4?bundle');
|
||||
solanaLibPromise = loadSolanaWeb3();
|
||||
}
|
||||
return solanaLibPromise;
|
||||
}
|
||||
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
const SOLANA_WEB3_SCRIPT_SRC = './solana-web3.iife.min.js';
|
||||
|
||||
let solanaWeb3Promise = null;
|
||||
|
||||
function getExistingScript() {
|
||||
return document.querySelector('script[data-shine-solana-web3="1"]');
|
||||
}
|
||||
|
||||
function resolveScriptUrl() {
|
||||
return new URL(SOLANA_WEB3_SCRIPT_SRC, import.meta.url).toString();
|
||||
}
|
||||
|
||||
export function loadSolanaWeb3() {
|
||||
if (typeof window === 'undefined' || typeof document === 'undefined') {
|
||||
return Promise.reject(new Error('Solana Web3 loader доступен только в браузере'));
|
||||
}
|
||||
if (window.solanaWeb3) {
|
||||
return Promise.resolve(window.solanaWeb3);
|
||||
}
|
||||
if (!solanaWeb3Promise) {
|
||||
solanaWeb3Promise = new Promise((resolve, reject) => {
|
||||
const existing = getExistingScript();
|
||||
if (existing) {
|
||||
existing.addEventListener('load', () => resolve(window.solanaWeb3), { once: true });
|
||||
existing.addEventListener('error', () => reject(new Error('Не удалось загрузить локальный solana-web3.js')), { once: true });
|
||||
return;
|
||||
}
|
||||
|
||||
const script = document.createElement('script');
|
||||
script.src = resolveScriptUrl();
|
||||
script.async = true;
|
||||
script.dataset.shineSolanaWeb3 = '1';
|
||||
script.onload = () => {
|
||||
if (!window.solanaWeb3) {
|
||||
reject(new Error('Локальный solana-web3.js загружен, но объект solanaWeb3 недоступен'));
|
||||
return;
|
||||
}
|
||||
resolve(window.solanaWeb3);
|
||||
};
|
||||
script.onerror = () => reject(new Error('Не удалось загрузить локальный solana-web3.js'));
|
||||
document.head.appendChild(script);
|
||||
});
|
||||
}
|
||||
return solanaWeb3Promise;
|
||||
}
|
||||
+20
File diff suppressed because one or more lines are too long
@@ -61,11 +61,11 @@
|
||||
<div class="hint">Только a-z, 0-9, _ · без точки · макс. 20 символов</div>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>Адрес сервера (URL)</label>
|
||||
<label>Арес сервера (URL) например shineup.me</label>
|
||||
<input type="text" id="serverAddress" placeholder="Адрес сервера" />
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>Серверы синхронизации (sync_servers)</label>
|
||||
<label>Логины серверов c которыми будет синхронизировать записи в блокчейн этот сервер (Например shineupme)</label>
|
||||
<textarea id="syncServers" placeholder="По одному логину на строку (можно оставить пустым)"></textarea>
|
||||
</div>
|
||||
<div class="field">
|
||||
|
||||
@@ -86,11 +86,11 @@
|
||||
<div class="card">
|
||||
<h2>Новые параметры сервера</h2>
|
||||
<div class="field">
|
||||
<label>Новый адрес сервера (URL)</label>
|
||||
<label>Арес сервера (URL) например shineup.me</label>
|
||||
<input type="text" id="serverAddress" placeholder="Адрес сервера" />
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>Новые серверы синхронизации (sync_servers)</label>
|
||||
<label>Логины серверов c которыми будет синхронизировать записи в блокчейн этот сервер (Например shineupme)</label>
|
||||
<textarea id="syncServers" placeholder="По одному логину на строку (можно оставить пустым)"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user