Добавить страницу донатов канала

This commit is contained in:
AidarKC
2026-09-17 22:43:49 +03:00
parent 7b81d140ec
commit 7aa05dc609
10 changed files with 1609 additions and 124 deletions
@@ -1,4 +1,5 @@
import { extractClientKey32FromStoredValue } from './client-key-utils.js';
import { base64ToBytes } from './crypto-utils.js';
import { loadEncryptedUserSecrets } from './key-vault.js';
import { SOLANA_ENDPOINT_DEFAULT } from '../solana-programs.js';
import { loadSolanaWeb3 } from '../vendor/solana-web3-loader.js';
@@ -45,6 +46,17 @@ function encodeBase58(bytesLike) {
return out;
}
export function solanaAddressFromPublicKeyBase64(publicKeyB64) {
const clean = String(publicKeyB64 || '').trim();
if (!clean) return '';
const bytes = base64ToBytes(clean);
if (bytes.length !== 32) {
throw new Error('Публичный ключ Solana должен содержать 32 байта');
}
return encodeBase58(bytes);
}
function normalizeEndpoint(url) {
const raw = String(url || '').trim();
if (!raw) return DEFAULT_SOLANA_ENDPOINT;
@@ -110,6 +122,17 @@ async function keypairFromStoredSecret(storedSecret) {
}
}
export async function getSolanaWalletFromStoredSecret(storedSecret) {
const clean = String(storedSecret || '').trim();
if (!clean) throw new Error('Не передан приватный ключ');
const keypair = await keypairFromStoredSecret(clean);
return {
address: keypair.publicKey.toBase58(),
keypair,
};
}
export async function createRandomSolanaWallet() {
const solana = await loadSolanaLib();
const keypair = solana.Keypair.generate();