UNPKG

@blockassetlabs/blaze

Version:

Blockasset Blaze

133 lines 6.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.withClaimPrize = exports.withResolveBlaze = exports.withRedeemEntrants = exports.withCloseBlaze = exports.withUpdateBlaze = exports.withInitBlaze = exports.withInitBlazeIdentifier = void 0; const anchor_1 = require("@project-serum/anchor"); const web3_js_1 = require("@solana/web3.js"); const tryGetAccount_1 = require("../../utils/tryGetAccount"); const withFindOrInitAssociatedTokenAccount_1 = require("../../utils/withFindOrInitAssociatedTokenAccount"); const accounts_1 = require("./accounts"); const constants_1 = require("./constants"); const instruction_1 = require("./instruction"); const pda_1 = require("./pda"); /** * Add init blaze identifier instructions to a transaction * @param transaction * @param connection * @param wallet * @returns Transaction, public key for the created blaze identifier */ const withInitBlazeIdentifier = async (transaction, connection, wallet) => { const [identifierId] = await (0, pda_1.findIdentifierId)(); transaction.add(await (0, instruction_1.initIdentifierInstruction)(connection, wallet, { identifierId: identifierId })); return [transaction, identifierId]; }; exports.withInitBlazeIdentifier = withInitBlazeIdentifier; const withInitBlaze = async (transaction, connection, wallet, params) => { const [[identifierId], identifierData] = await Promise.all([ (0, pda_1.findIdentifierId)(), (0, tryGetAccount_1.tryGetAccount)(() => (0, accounts_1.getIdentifier)(connection)) ]); const identifier = (identifierData === null || identifierData === void 0 ? void 0 : identifierData.parsed.count) || new anchor_1.BN(1); if (!identifierData) { transaction.add(await (0, instruction_1.initIdentifierInstruction)(connection, wallet, { identifierId: identifierId })); } const [blazeId] = await (0, pda_1.findBlazeId)(identifier); const [blazePrizeMintTokenAccount, userPrizeMintTokenAccount] = await Promise.all([ (0, withFindOrInitAssociatedTokenAccount_1.withFindOrInitAssociatedTokenAccount)(transaction, connection, params.prizeMint, blazeId, wallet.publicKey, true), (0, withFindOrInitAssociatedTokenAccount_1.withFindOrInitAssociatedTokenAccount)(transaction, connection, params.prizeMint, wallet.publicKey, wallet.publicKey) ]); const entrantsAccountDataSize = 8 + 4 + 4 + 32 * params.maxEntrants; const entrantsKeyPair = web3_js_1.Keypair.generate(); const lamports = await connection.getMinimumBalanceForRentExemption(entrantsAccountDataSize, 'confirmed'); transaction.add(web3_js_1.SystemProgram.createAccount({ fromPubkey: wallet.publicKey, newAccountPubkey: entrantsKeyPair.publicKey, space: entrantsAccountDataSize, lamports, programId: constants_1.BLAZE_ADDRESS }), await (0, instruction_1.initBlazeInstruction)(connection, wallet, { identifierId, blazeId, projectId: params.projectId, projectWallet: params.projectWallet, blazePrizeMintTokenAccount, userPrizeMintTokenAccount, entrants: entrantsKeyPair.publicKey, tokenMint: params.tokenMint, tokenAccount: params.tokenAccount, treasury: params.treasury, burnRate: params.burnRate, category: params.category, prizeMint: params.prizeMint, entrantFee: params.entrantFee, maxEntrants: params.maxEntrants, start: params.start, end: params.end, maxEntrantsPerWalletRate: params.maxEntrantsPerWalletRate })); return [transaction, blazeId, entrantsKeyPair]; }; exports.withInitBlaze = withInitBlaze; const withUpdateBlaze = async (transaction, connection, wallet, params) => { transaction.add(await (0, instruction_1.updateBlazeInstruction)(connection, wallet, { blazeId: params.blazeId, projectId: params.projectId, tokenMint: params.tokenMint, tokenAccount: params.tokenAccount, treasury: params.treasury, burnRate: params.burnRate, entrantFee: params.entrantFee, start: params.start, end: params.end, maxEntrantsPerWalletRate: params.maxEntrantsPerWalletRate, category: params.category })); return transaction; }; exports.withUpdateBlaze = withUpdateBlaze; const withCloseBlaze = async (transaction, connection, wallet, params) => { const [blazePrizeMintTokenAccount, userPrizeMintTokenAccount] = await Promise.all([ (0, withFindOrInitAssociatedTokenAccount_1.withFindOrInitAssociatedTokenAccount)(transaction, connection, params.prizeMint, params.blazeId, wallet.publicKey, true), (0, withFindOrInitAssociatedTokenAccount_1.withFindOrInitAssociatedTokenAccount)(transaction, connection, params.prizeMint, wallet.publicKey, wallet.publicKey) ]); transaction.add(await (0, instruction_1.closeBlazeInstruction)(connection, wallet, { blazeId: params.blazeId, projectId: params.projectId, entrants: params.entrants, blazePrizeMintTokenAccount, userPrizeMintTokenAccount })); return transaction; }; exports.withCloseBlaze = withCloseBlaze; const withRedeemEntrants = async (transaction, connection, wallet, params) => { transaction.add(await (0, instruction_1.redeemEntrantsInstruction)(connection, wallet, params)); return transaction; }; exports.withRedeemEntrants = withRedeemEntrants; const withResolveBlaze = async (transaction, connection, wallet, params) => { transaction.add(await (0, instruction_1.resolveBlazeInstruction)(connection, wallet, { blazeId: params.blazeId, entrants: params.entrants })); return transaction; }; exports.withResolveBlaze = withResolveBlaze; const withClaimPrize = async (transaction, connection, wallet, params) => { const [blazePrizeMintTokenAccount, winnerPrizeMintTokenAccount] = await Promise.all([ (0, withFindOrInitAssociatedTokenAccount_1.withFindOrInitAssociatedTokenAccount)(transaction, connection, params.prizeMint, params.blazeId, wallet.publicKey, true), (0, withFindOrInitAssociatedTokenAccount_1.withFindOrInitAssociatedTokenAccount)(transaction, connection, params.prizeMint, wallet.publicKey, wallet.publicKey) ]); transaction.add(await (0, instruction_1.claimPrizeInstruction)(connection, wallet, { blazeId: params.blazeId, blazePrizeMintTokenAccount, winnerPrizeMintTokenAccount })); return transaction; }; exports.withClaimPrize = withClaimPrize; //# sourceMappingURL=transaction.js.map