91 lines
3.5 KiB
TypeScript
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);
|
|
}); |