chore: зафиксированы оставшиеся локальные изменения

This commit is contained in:
AidarKC
2026-05-19 00:07:49 +03:00
parent a332ddc828
commit c27da63a3e
7 changed files with 268 additions and 77 deletions
@@ -6,6 +6,7 @@ const DEFAULT_SOLANA_ENDPOINT = 'https://api.devnet.solana.com';
const TOPUP_SITE_URL = 'https://shine-promo-solana-devnet.shineup.me/';
let solanaLibPromise = null;
const BASE58_RE = /^[1-9A-HJ-NP-Za-km-z]+$/;
function normalizeEndpoint(url) {
const raw = String(url || '').trim();
@@ -37,6 +38,34 @@ export async function deriveWalletFromPassword(password) {
};
}
export async function createRandomSolanaWallet() {
const solana = await loadSolanaLib();
const keypair = solana.Keypair.generate();
const privateKey32Base58 = solana.bs58.encode(keypair.secretKey.slice(0, 32));
return {
address: keypair.publicKey.toBase58(),
privateKey32Base58,
keypair,
};
}
export async function createSolanaWalletFromPrivateBase58(privateKey32Base58) {
const solana = await loadSolanaLib();
const clean = String(privateKey32Base58 || '').trim();
if (!clean) throw new Error('Введите приватный ключ');
if (!BASE58_RE.test(clean)) throw new Error('Разрешены только символы Base58');
const privateBytes = solana.bs58.decode(clean);
if (privateBytes.length !== 32) {
throw new Error('Приватный ключ должен быть ровно 32 байта в Base58');
}
const keypair = solana.Keypair.fromSeed(privateBytes);
return {
address: keypair.publicKey.toBase58(),
privateKey32Base58: clean,
keypair,
};
}
export async function getWalletFromStoredDeviceKey({ login, storagePwd }) {
const cleanLogin = String(login || '').trim();
const cleanPwd = String(storagePwd || '').trim();