@blockassetlabs/minter
Version:
Blockasset Minter
67 lines • 3.02 kB
JavaScript
import { Keypair } from "@solana/web3.js";
import { withFindOrInitAssociatedTokenAccount } from "../../utils/withFindOrInitAssociatedTokenAccount";
import { getMinter } from "./accounts";
import { closeMinterInstruction, initMinterInstruction, mintInstruction, setAsRedeemedInstruction, updateMinterInstruction, } from "./instruction";
import { findMinterId, findRedeemedMintsId } from "./pda";
import { withRemainingAccountsForMint } from "./utils";
export const withInitMinter = async (transaction, connection, wallet, params) => {
const { publicKey: identifierId } = Keypair.generate();
const minterId = findMinterId(identifierId);
const redeemedMintsId = findRedeemedMintsId(minterId);
transaction.add(await initMinterInstruction(connection, wallet, {
...params,
identifierId,
minterId,
redeemedMintsId,
}));
return [transaction, minterId, identifierId];
};
export const withUpdateMinter = async (transaction, connection, wallet, params) => {
const minterData = await getMinter(connection, params.minterId);
transaction.add(await updateMinterInstruction(connection, wallet, {
projectId: minterData.parsed.project,
...params,
}));
return transaction;
};
export const withCloseMinter = async (transaction, connection, wallet, params) => {
const redeemedMintsId = findRedeemedMintsId(params.minterId);
const minterData = await getMinter(connection, params.minterId);
transaction.add(await closeMinterInstruction(connection, wallet, {
minterId: params.minterId,
redeemedMintsId,
projectId: minterData.parsed.project,
mintId: minterData.parsed.mint,
}));
return transaction;
};
export const withMint = async (transaction, connection, wallet, params) => {
const redeemedMintsId = findRedeemedMintsId(params.minterId);
const minterData = await getMinter(connection, params.minterId);
const [userTokenAccountId, remainingAccounts] = await Promise.all([
withFindOrInitAssociatedTokenAccount(transaction, connection, minterData.parsed.mint, wallet.publicKey, wallet.publicKey),
withRemainingAccountsForMint(transaction, connection, wallet, {
mints: params.setMints,
}),
]);
transaction.add(await mintInstruction(connection, wallet, {
minterId: params.minterId,
userTokenAccountId,
redeemedMintsId,
mintId: minterData.parsed.mint,
remainingAccounts,
}));
return transaction;
};
export const withSetAsRedeemed = async (transaction, connection, wallet, params) => {
const redeemedMintsId = findRedeemedMintsId(params.minterId);
const minterData = await getMinter(connection, params.minterId);
transaction.add(await setAsRedeemedInstruction(connection, wallet, {
minterId: params.minterId,
projectId: minterData.parsed.project,
redeemedMintsId,
mints: params.mints,
}));
return transaction;
};
//# sourceMappingURL=transaction.js.map