// Сколько lamports лежит в PDA ставок и кому принадлежит рента const { PublicKey } = require(process.env.SOLANA_WEB3_MODULE || "@solana/web3.js"); const RPC = "https://smart-updown.binom.pw/solana-rpc/"; const PROGRAM = new PublicKey("9ALsnxXNzDBv3mokngCHbruRTWUZiWR7pf7vswS1fCpf"); const BET_SEED = Buffer.from("bet"); const GLOBAL_SEED = Buffer.from("global"); const VAULT_SEED = Buffer.from("vault"); const rpc = async (m, p) => { const r = await fetch(RPC, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ jsonrpc: "2.0", id: 1, method: m, params: p }) }); const x = await r.json(); if (x.error) throw new Error(JSON.stringify(x.error).slice(0, 150)); return x.result; }; const betPda = (id) => { const b = Buffer.alloc(8); b.writeBigUInt64LE(BigInt(id)); return PublicKey.findProgramAddressSync([BET_SEED, b], PROGRAM)[0]; }; (async () => { console.log(`программа: ${PROGRAM.toBase58()}`); const g = PublicKey.findProgramAddressSync([GLOBAL_SEED], PROGRAM)[0]; const v = PublicKey.findProgramAddressSync([GLOBAL_SEED, VAULT_SEED], PROGRAM)[0]; console.log(`global PDA: ${g.toBase58()}`); console.log(`vault PDA: ${v.toBase58()}\n`); let total = 0n, alive = 0; for (const id of [60, 65, 67, 68, 69, 70, 71, 72, 73, 74]) { const p = betPda(id); const r = await rpc("getAccountInfo", [p.toBase58(), { encoding: "base64" }]); const info = r.value; if (!info) { console.log(`ставка ${id}: PDA ${p.toBase58().slice(0, 8)}… НЕТ в цепи`); continue; } alive++; total += BigInt(info.lamports); console.log(`ставка ${id}: PDA ${p.toBase58().slice(0, 8)}… lamports=${info.lamports} owner=${info.owner.slice(0, 8)}… размер=${info.data[0].length * 3 / 4} байт`); } console.log(`\nвсего PDA ставок: ${alive}; суммарно lamports в них: ${total} (${Number(total) / 1e9} SOL)`); const gr = await rpc("getAccountInfo", [g.toBase58(), { encoding: "base64" }]); console.log(`global PDA lamports: ${gr.value ? gr.value.lamports : "нет"}`); process.exit(0); })();