SHA256
chore: зафиксированы оставшиеся локальные изменения
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user