@blockassetlabs/blaze
Version:
Blockasset Blaze
150 lines • 6.08 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.closeBlaze = exports.claimPrize = exports.resolveBlaze = exports.redeemEntrants = exports.updateBlaze = exports.createBlaze = void 0;
const project_1 = require("@blockassetlabs/project");
const web3_js_1 = require("@solana/web3.js");
const blockasset_blaze_1 = require("../programs/blockasset-blaze");
const utils_1 = require("../programs/blockasset-blaze/utils");
const withFindOrInitAssociatedTokenAccount_1 = require("../utils/withFindOrInitAssociatedTokenAccount");
/**
* Create blaze
* @param connection
* @param wallet
* @param params
* projectId: PublicKey;
* prizeMint: PublicKey;
* tokenMint?: PublicKey;
* treasury: PublicKey;
* burnRate?: number;
* entrantFee: BN;
* maxEntrants: number;
* start: BN;
* end: BN;
* maxEntrantsPerWalletRate?: number;
* category?: string;
* @returns { signature, blazeId }
*/
const createBlaze = async (connection, wallet, params) => {
if (params === null || params === void 0 ? void 0 : params.burnRate) {
if (params.burnRate < 0 || params.burnRate > 100)
throw new Error('Invalid burn rate');
if (params.burnRate === 100 && (params === null || params === void 0 ? void 0 : params.treasury))
throw new Error('No need to set treasury with burnRate of 100');
if (params.burnRate === 100 && (params === null || params === void 0 ? void 0 : params.tokenMint))
throw new Error('No need to set tokenMint with burnRate of 100');
}
if (!params.tokenMint && params.burnRate)
throw new Error('tokenMint needs to be provided with burn rates of greater than zero');
const transaction = new web3_js_1.Transaction();
const tokenAccount = params.tokenMint
? await (0, withFindOrInitAssociatedTokenAccount_1.withFindOrInitAssociatedTokenAccount)(transaction, connection, params.tokenMint, params.treasury, wallet.publicKey)
: undefined;
const project = await (0, project_1.getProject)(connection, params.projectId);
const [, blazeId, entrantsKeyPair] = await (0, blockasset_blaze_1.withInitBlaze)(transaction, connection, wallet, {
...params,
tokenAccount,
treasury: tokenAccount ? undefined : params.treasury,
projectWallet: project.parsed.treasuryAccount
});
const signature = await (0, project_1.executeTransaction)(connection, wallet, transaction, {
silent: false,
signers: [entrantsKeyPair]
});
return { signature, blazeId };
};
exports.createBlaze = createBlaze;
/**
* Update single blaze
* @param connection
* @param wallet
* @param params
* blazeId: PublicKey;
* projectId: PublicKey;
* tokenMint?: PublicKey;
* tokenAccount?: PublicKey;
* treasury?: PublicKey;
* burnRate?: number;
* entrantFee: BN;
* start: BN;
* end: BN;
* maxEntrantsPerWalletRate?: number;
* category?: string;
* @returns signature of the transaction
*/
const updateBlaze = async (connection, wallet, params) => {
const transaction = new web3_js_1.Transaction();
await (0, blockasset_blaze_1.withUpdateBlaze)(transaction, connection, wallet, params);
const signature = await (0, project_1.executeTransaction)(connection, wallet, transaction);
return signature;
};
exports.updateBlaze = updateBlaze;
/**
* Buy multiple entrants from a blaze
* @param connection
* @param wallet
* @param params
* quantity: number;
* blazeId: PublicKey;
* @returns
*/
const redeemEntrants = async (connection, wallet, params) => {
const transaction = new web3_js_1.Transaction();
const blaze = await (0, blockasset_blaze_1.getBlaze)(connection, params.blazeId);
const remainingAccountsForRedeem = await (0, utils_1.withRemainingAccountsForRedeem)(transaction, connection, wallet, {
tokenMint: blaze.parsed.tokenMint,
treasury: blaze.parsed.treasury
});
await (0, blockasset_blaze_1.withRedeemEntrants)(transaction, connection, wallet, {
quantity: params.quantity,
blazeId: params.blazeId,
entrants: blaze.parsed.entrants,
remainingAccountsForRedeem
});
const signature = await (0, project_1.executeTransaction)(connection, wallet, transaction);
return signature;
};
exports.redeemEntrants = redeemEntrants;
/**
*
* @param connection
* @param wallet
* @param params
* blazeId: PublicKey;
* @returns signature
*/
const resolveBlaze = async (connection, wallet, params) => {
const transaction = new web3_js_1.Transaction();
const blaze = await (0, blockasset_blaze_1.getBlaze)(connection, params.blazeId);
await (0, blockasset_blaze_1.withResolveBlaze)(transaction, connection, wallet, {
blazeId: params.blazeId,
entrants: blaze.parsed.entrants
});
const signature = await (0, project_1.executeTransaction)(connection, wallet, transaction);
return signature;
};
exports.resolveBlaze = resolveBlaze;
const claimPrize = async (connection, wallet, params) => {
const transaction = new web3_js_1.Transaction();
const blaze = await (0, blockasset_blaze_1.getBlaze)(connection, params.blazeId);
await (0, blockasset_blaze_1.withClaimPrize)(transaction, connection, wallet, {
blazeId: params.blazeId,
prizeMint: blaze.parsed.prizeMint
});
const signature = await (0, project_1.executeTransaction)(connection, wallet, transaction);
return signature;
};
exports.claimPrize = claimPrize;
const closeBlaze = async (connection, wallet, params) => {
const transaction = new web3_js_1.Transaction();
const blaze = await (0, blockasset_blaze_1.getBlaze)(connection, params.blazeId);
await (0, blockasset_blaze_1.withCloseBlaze)(transaction, connection, wallet, {
blazeId: params.blazeId,
projectId: blaze.parsed.project,
prizeMint: blaze.parsed.prizeMint,
entrants: blaze.parsed.entrants
});
const signature = await (0, project_1.executeTransaction)(connection, wallet, transaction);
return signature;
};
exports.closeBlaze = closeBlaze;
//# sourceMappingURL=index.js.map