UNPKG

@blockassetlabs/minter

Version:

Blockasset Minter

129 lines 5.03 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getRedeemedMints = exports.getMintersByProjectId = exports.getAllMinters = exports.getMinters = exports.getMinter = void 0; const anchor_1 = require("@project-serum/anchor"); const solana_contrib_1 = require("@saberhq/solana-contrib"); const web3_js_1 = require("@solana/web3.js"); const constants_1 = require("./constants"); const getProgram = (connection, commitment = "processed") => { const provider = new anchor_1.AnchorProvider(connection, new solana_contrib_1.SignerWallet(web3_js_1.Keypair.generate()), { commitment, }); return new anchor_1.Program(constants_1.MINTER_IDL, constants_1.MINTER_ADDRESS, provider); }; const getMinter = async (connection, minterId, commitment) => { const program = getProgram(connection, commitment); const parsed = await program.account.minter.fetch(minterId); return { parsed, pubkey: minterId, }; }; exports.getMinter = getMinter; const getMinters = async (connection, minterIds, commitment) => { const program = getProgram(connection, commitment); const minters = (await program.account.minter.fetchMultiple(minterIds)); return minters.map((tm, i) => ({ parsed: tm, // eslint-disable-next-line @typescript-eslint/no-non-null-assertion pubkey: minterIds[i], })); }; exports.getMinters = getMinters; const getAllMinters = async (connection, commitment) => { if (!connection) return []; const programAccounts = await connection.getProgramAccounts(constants_1.MINTER_ADDRESS, { filters: [ { memcmp: { offset: 0, bytes: anchor_1.utils.bytes.bs58.encode(anchor_1.BorshAccountsCoder.accountDiscriminator(constants_1.MINTER_DISCRIMINATOR)), }, }, ], commitment, }); const minterDatas = []; const coder = new anchor_1.BorshAccountsCoder(constants_1.MINTER_IDL); programAccounts.forEach((account) => { try { const minterData = coder.decode(constants_1.MINTER_DISCRIMINATOR, account.account.data); if (minterData) { minterDatas.push({ ...account, parsed: minterData, }); } // eslint-disable-next-line no-empty } catch (e) { } }); return minterDatas.sort((a, b) => a.pubkey.toBase58().localeCompare(b.pubkey.toBase58())); }; exports.getAllMinters = getAllMinters; const getMintersByProjectId = async (connection, projectId, commitment) => { if (!connection) return []; const programAccounts = await connection.getProgramAccounts(constants_1.MINTER_ADDRESS, { filters: [ { memcmp: { offset: 0, bytes: anchor_1.utils.bytes.bs58.encode(anchor_1.BorshAccountsCoder.accountDiscriminator(constants_1.MINTER_DISCRIMINATOR)), }, }, { memcmp: { offset: constants_1.MINTER_PROJECT_ID_OFFSET, bytes: projectId.toBase58(), }, }, ], commitment, }); const minterDatas = []; const coder = new anchor_1.BorshAccountsCoder(constants_1.MINTER_IDL); programAccounts.forEach((account) => { try { const minterData = coder.decode(constants_1.MINTER_DISCRIMINATOR, account.account.data); if (minterData) { minterDatas.push({ ...account, parsed: minterData, }); } // eslint-disable-next-line no-empty } catch (e) { } }); return minterDatas.sort((a, b) => a.pubkey.toBase58().localeCompare(b.pubkey.toBase58())); }; exports.getMintersByProjectId = getMintersByProjectId; const getRedeemedMints = async (connection, redeemedMintsId, commitment) => { const program = getProgram(connection, commitment); const accountInfo = await program.account.redeemedMints.getAccountInfo(redeemedMintsId); if (!accountInfo) return null; const coder = new anchor_1.BorshAccountsCoder(constants_1.MINTER_IDL); try { const redeemedMintsDataRaw = coder.decodeUnchecked(constants_1.REDEEMED_MINTS_ACCOUNT_NAME, accountInfo.data); if (!redeemedMintsDataRaw) return null; const mints = []; const mintsFieldData = accountInfo.data.subarray(8 + 4 + 32); for (let i = 0; i < redeemedMintsDataRaw.total; i++) { mints.push(new web3_js_1.PublicKey(mintsFieldData.slice(i * 32, (i + 1) * 32))); } return { pubkey: redeemedMintsId, parsed: { ...redeemedMintsDataRaw, mints }, }; } catch (e) { console.error(e); return null; } }; exports.getRedeemedMints = getRedeemedMints; //# sourceMappingURL=accounts.js.map