UNPKG

@blockassetlabs/blaze

Version:

Blockasset Blaze

141 lines 5.36 kB
import { executeTransaction, getProject } from '@blockassetlabs/project'; import { Transaction } from '@solana/web3.js'; import { getBlaze, withClaimPrize, withCloseBlaze, withInitBlaze, withRedeemEntrants, withResolveBlaze, withUpdateBlaze } from '../programs/blockasset-blaze'; import { withRemainingAccountsForRedeem } from '../programs/blockasset-blaze/utils'; import { withFindOrInitAssociatedTokenAccount } from '../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 } */ export 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 Transaction(); const tokenAccount = params.tokenMint ? await withFindOrInitAssociatedTokenAccount(transaction, connection, params.tokenMint, params.treasury, wallet.publicKey) : undefined; const project = await getProject(connection, params.projectId); const [, blazeId, entrantsKeyPair] = await withInitBlaze(transaction, connection, wallet, { ...params, tokenAccount, treasury: tokenAccount ? undefined : params.treasury, projectWallet: project.parsed.treasuryAccount }); const signature = await executeTransaction(connection, wallet, transaction, { silent: false, signers: [entrantsKeyPair] }); return { signature, blazeId }; }; /** * 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 */ export const updateBlaze = async (connection, wallet, params) => { const transaction = new Transaction(); await withUpdateBlaze(transaction, connection, wallet, params); const signature = await executeTransaction(connection, wallet, transaction); return signature; }; /** * Buy multiple entrants from a blaze * @param connection * @param wallet * @param params * quantity: number; * blazeId: PublicKey; * @returns */ export const redeemEntrants = async (connection, wallet, params) => { const transaction = new Transaction(); const blaze = await getBlaze(connection, params.blazeId); const remainingAccountsForRedeem = await withRemainingAccountsForRedeem(transaction, connection, wallet, { tokenMint: blaze.parsed.tokenMint, treasury: blaze.parsed.treasury }); await withRedeemEntrants(transaction, connection, wallet, { quantity: params.quantity, blazeId: params.blazeId, entrants: blaze.parsed.entrants, remainingAccountsForRedeem }); const signature = await executeTransaction(connection, wallet, transaction); return signature; }; /** * * @param connection * @param wallet * @param params * blazeId: PublicKey; * @returns signature */ export const resolveBlaze = async (connection, wallet, params) => { const transaction = new Transaction(); const blaze = await getBlaze(connection, params.blazeId); await withResolveBlaze(transaction, connection, wallet, { blazeId: params.blazeId, entrants: blaze.parsed.entrants }); const signature = await executeTransaction(connection, wallet, transaction); return signature; }; export const claimPrize = async (connection, wallet, params) => { const transaction = new Transaction(); const blaze = await getBlaze(connection, params.blazeId); await withClaimPrize(transaction, connection, wallet, { blazeId: params.blazeId, prizeMint: blaze.parsed.prizeMint }); const signature = await executeTransaction(connection, wallet, transaction); return signature; }; export const closeBlaze = async (connection, wallet, params) => { const transaction = new Transaction(); const blaze = await getBlaze(connection, params.blazeId); await withCloseBlaze(transaction, connection, wallet, { blazeId: params.blazeId, projectId: blaze.parsed.project, prizeMint: blaze.parsed.prizeMint, entrants: blaze.parsed.entrants }); const signature = await executeTransaction(connection, wallet, transaction); return signature; }; //# sourceMappingURL=index.js.map