Files
mhunt_sobridge/src/sol/operator.js
2025-01-13 01:02:32 +08:00

127 lines
7.3 KiB
JavaScript

"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.previewJoinTournamentCost = previewJoinTournamentCost;
exports.JoinTournament = JoinTournament;
exports.AddTournament = AddTournament;
const web3_js_1 = require("@solana/web3.js");
const shared_1 = require("./shared");
const anchor_1 = require("@coral-xyz/anchor");
const bs58_1 = __importDefault(require("bs58"));
const rpc_1 = require("@coral-xyz/anchor/dist/cjs/utils/rpc");
function previewJoinTournamentCost(privateKey, id) {
return __awaiter(this, void 0, void 0, function* () {
var _a;
const keypair = web3_js_1.Keypair.fromSecretKey(bs58_1.default.decode(privateKey));
const provider = new anchor_1.AnchorProvider(shared_1.connection, new anchor_1.Wallet(keypair));
const program = new anchor_1.Program(shared_1.IDL, provider);
const tourneyId = new anchor_1.BN(id);
const tourneyIdBuffer = tourneyId.toArrayLike(Buffer, 'le', 8);
const [tourneyPda] = yield web3_js_1.PublicKey.findProgramAddressSync([shared_1.TOURNAMENT_SEED, tourneyIdBuffer], program.programId);
const tourneyAcc = yield program.account.tournament.fetch(tourneyPda);
// Simulate the transaction to preview cost
const transaction = new web3_js_1.Transaction().add(yield program.methods.joinTournament(tourneyId).instruction());
transaction.recentBlockhash = (yield shared_1.connection.getLatestBlockhash('finalized')).blockhash;
transaction.feePayer = keypair.publicKey;
const { value } = yield (0, rpc_1.simulateTransaction)(shared_1.connection, transaction);
// The 'value' contains the fee and log messages; you can access the fee estimate here
if (value.err) {
console.error("Simulation error:", value.err);
return;
}
// Estimate the fee using getFeeForMessage
const message = transaction.compileMessage();
const feeEstimate = yield shared_1.connection.getFeeForMessage(message);
if (feeEstimate) {
console.log(`Estimated transaction fee: ${feeEstimate} lamports`);
const entryFee = tourneyAcc.entryFee;
return ((_a = feeEstimate.value) !== null && _a !== void 0 ? _a : 0) + parseInt(entryFee.toString());
}
else {
console.error("Could not retrieve fee estimate.");
return null;
}
});
}
function JoinTournament(privateKey, id) {
return __awaiter(this, void 0, void 0, function* () {
const keypair = web3_js_1.Keypair.fromSecretKey(bs58_1.default.decode(privateKey));
const provider = new anchor_1.AnchorProvider(shared_1.connection, new anchor_1.Wallet(keypair));
const program = new anchor_1.Program(shared_1.IDL, provider);
const solBalance = yield shared_1.connection.getBalance(keypair.publicKey);
const tourneyId = new anchor_1.BN(id);
const tourneyIdBuffer = tourneyId.toArrayLike(Buffer, 'le', 8);
const [tourneyPda] = yield web3_js_1.PublicKey.findProgramAddressSync([shared_1.TOURNAMENT_SEED, tourneyIdBuffer], program.programId);
const tourneyAcc = yield program.account.tournament.fetch(tourneyPda);
const tx = yield program.methods.joinTournament(tourneyId).rpc();
return tx;
});
}
function AddTournament(privateKey, id, name, start_time, entry_fee_lamports, rewards1, rewards2) {
return __awaiter(this, void 0, void 0, function* () {
const keypair = web3_js_1.Keypair.fromSecretKey(bs58_1.default.decode(privateKey));
const provider = new anchor_1.AnchorProvider(shared_1.connection, new anchor_1.Wallet(keypair));
const program = new anchor_1.Program(shared_1.IDL, provider);
const tx = yield program.methods.addTournament(new anchor_1.BN(id), new anchor_1.BN(entry_fee_lamports), start_time, name, new anchor_1.BN(rewards1), new anchor_1.BN(rewards2)).rpc();
return tx;
});
}
// export async function PurchaseTicket(privateKey:string, amount:number){
// const totalPrice = amount * TICKET_PRICE;
// if(solBalance < totalPrice){
// console.log(`${keypair.publicKey} tried to buy ${amount} tickets (${totalPrice} SOL). But they had only ${solBalance}`);
// return false;
// }
// const [buyerAta] = await PublicKey.findProgramAddress([keypair.publicKey.toBuffer(), TOKEN_PROGRAM_ID.toBuffer(), TICKETS_MINT.toBuffer()], ASSOCIATED_TOKEN_PROGRAM_ID);
// let ticketsBalanceBefore = 0;
// console.log(`buyers ATA is: ${buyerAta.toBase58()}`);
// try{
// ticketsBalanceBefore = (await connection.getTokenAccountBalance(buyerAta)).value.uiAmount ?? 0;
// console.log(`buyer has ${ticketsBalanceBefore} tickets already`);
// }catch{
// const buyerAta = await getAssociatedTokenAddress(TICKETS_MINT, keypair.publicKey, false, TOKEN_PROGRAM_ID, ASSOCIATED_TOKEN_PROGRAM_ID);
// console.log("Buyer doesn't even has an ATA for this token, creating one");
// const createAtaInstruction = createAssociatedTokenAccountInstruction(
// keypair.publicKey, // Payer
// buyerAta, // Associated Token Account to create
// keypair.publicKey, // Owner of the account
// TICKETS_MINT, // Token mint address
// TOKEN_PROGRAM_ID, // Token program ID
// ASSOCIATED_TOKEN_PROGRAM_ID // Associated token program ID
// );
// const transaction = new Transaction().add(createAtaInstruction);
// await provider.sendAndConfirm(transaction, [keypair]);
// console.log(`Created ATA: ${buyerAta.toBase58()}`);
// console.log(`Buyer ATA Created: ${buyerAta}`);
// }
// const [sellers_reg_pda] = await PublicKey.findProgramAddress([Buffer.from("sales_reg")], program.programId);
// console.log(`Sellers Reg PDA: ${sellers_reg_pda}`);
// const seller = new PublicKey('cocD4r4yNpHxPq7CzUebxEMyLki3X4d2Y3HcTX5ptUc');
// // Make the transaction to purchase tickets
// try{
// console.log(`Purchasing ${amount} tickets from ${seller.toBase58()}`);
// const tx = await program.methods.purchaseTickets(new BN(1)).accounts({
// seller:seller,
// mint: TICKETS_MINT,
// tokenProgram: TOKEN_PROGRAM_ID,
// }).rpc();
// console.log(`Ticket purchase transaction successful: ${tx}`);
// return tx;
// }catch(e){
// console.log("Failed to purchase tickets")
// console.log(e);
// return null;
// }
// }