@blockassetlabs/blaze
Version:
Blockasset Blaze
133 lines • 6.63 kB
JavaScript
"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