@blockassetlabs/minter
Version:
Blockasset Minter
129 lines • 5.03 kB
JavaScript
;
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