import { Connection, PublicKey, Keypair, clusterApiUrl, LAMPORTS_PER_SOL, SystemProgram } from "@solana/web3.js"; import { Bets } from "./bets"; import { AnchorProvider, BN, Program, Wallet } from "@coral-xyz/anchor"; import { clusterUrl, cocSk, feeWallet, getRandomInt, testerSk } from "./shared"; import { getAssociatedTokenAddress } from "@solana/spl-token"; const IDL = require('./bets.json'); async function close(){ const keypair = Keypair.fromSecretKey(Uint8Array.from(cocSk)); const cocKeypair = Keypair.fromSecretKey(Uint8Array.from(cocSk)); const connection = new Connection(clusterUrl, { commitment: 'confirmed', confirmTransactionInitialTimeout: 60000 }); const provider = new AnchorProvider(connection, new Wallet(keypair), { commitment: 'confirmed', preflightCommitment: 'confirmed', }); const program:Program = new Program(IDL, provider); let solBalance = (await connection.getBalance(keypair.publicKey))/ LAMPORTS_PER_SOL; console.log(`Tester ${keypair.publicKey} has ${solBalance} SOL`); const [bet_list_pda] = await PublicKey.findProgramAddress([Buffer.from("bets_list")], program.programId); console.log(`Bets list PDA : ${bet_list_pda}`); try { const bet_list = await program.account.betsList.fetch(bet_list_pda); for (const bet of bet_list.bets) { try { const betAcc = await program.account.betVault.fetch(bet); const ownerRefferer = new PublicKey("BaTgUMPsk8fZoEMwig81Pw1KHmPpoYt31oiR5Qr2c8XR"); const joinerRefferer = feeWallet; const winner = betAcc.owner; console.log(`Closing ${bet}`); const tx = await program.methods.deductFees(winner, betAcc.ownerId).accounts({ betVault: bet, betsList: bet_list_pda, feeWallet: feeWallet, ownerReferrer: ownerRefferer, joinerReferrer: joinerRefferer, }).rpc({ skipPreflight: false, maxRetries: 3 }); await connection.confirmTransaction(tx); console.log(`fee tx: ${tx}`); const tx2 = await program.methods.closeBet(winner, betAcc.ownerId).accounts({ betVault: bet, betsList: bet_list_pda, winner: winner, }).rpc({ skipPreflight: false, maxRetries: 3 }); console.log(`close tx: ${tx2}`); const confirmation = await connection.confirmTransaction(tx2); if (confirmation.value.err) { console.error(`Transaction failed: ${confirmation.value.err}`); continue; } console.log(`tx complete: ${tx}`); solBalance = (await connection.getBalance(keypair.publicKey))/ LAMPORTS_PER_SOL; console.log(`Tester ${keypair.publicKey} has ${solBalance} SOL`); } catch (err) { console.error(`Error processing bet ${bet}:`, err); continue; } } } catch (err) { console.error('Error fetching bet list:', err); throw err; } } close().catch(err => { console.error('Fatal error:', err); process.exit(1); });