duelfi_bets_controller/src/close_all.ts
2025-06-18 23:26:00 +05:30

91 lines
3.5 KiB
TypeScript

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<Bets> = new Program<Bets>(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);
});