UNPKG

@blockassetlabs/blaze

Version:

Blockasset Blaze

181 lines 6.96 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getEntrants = exports.getAllEntrants = exports.getBlazesByProjectId = exports.getIdentifier = exports.getAllBlazes = exports.getBlazes = exports.getBlaze = 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 pda_1 = require("./pda"); const getProgram = (connection) => { const provider = new anchor_1.AnchorProvider(connection, new solana_contrib_1.SignerWallet(web3_js_1.Keypair.generate()), {}); return new anchor_1.Program(constants_1.BLAZE_IDL, constants_1.BLAZE_ADDRESS, provider); }; const getBlaze = async (connection, blazeId) => { const program = getProgram(connection); const parsed = await program.account.blaze.fetch(blazeId); return { parsed, pubkey: blazeId }; }; exports.getBlaze = getBlaze; const getBlazes = async (connection, blazeIds) => { const program = getProgram(connection); const blazes = (await program.account.blaze.fetchMultiple(blazeIds)); return blazes.map((tm, i) => ({ parsed: tm, // eslint-disable-next-line @typescript-eslint/no-non-null-assertion pubkey: blazeIds[i] })); }; exports.getBlazes = getBlazes; const getAllBlazes = async (connection) => { if (!connection) return []; const programAccounts = await connection.getProgramAccounts(constants_1.BLAZE_ADDRESS, { filters: [ { memcmp: { offset: 0, bytes: anchor_1.utils.bytes.bs58.encode(anchor_1.BorshAccountsCoder.accountDiscriminator(constants_1.BLAZE_PREFIX)) } } ] }); const blazeDatas = []; const coder = new anchor_1.BorshAccountsCoder(constants_1.BLAZE_IDL); programAccounts.forEach(account => { try { const blazeData = coder.decode(constants_1.BLAZE_PREFIX, account.account.data); if (blazeData) { blazeDatas.push({ ...account, parsed: blazeData }); } // eslint-disable-next-line no-empty } catch (e) { } }); return blazeDatas.sort((a, b) => a.pubkey.toBase58().localeCompare(b.pubkey.toBase58())); }; exports.getAllBlazes = getAllBlazes; const getIdentifier = async (connection) => { const program = getProgram(connection); const [identifierId] = await (0, pda_1.findIdentifierId)(); const parsed = await program.account.identifier.fetch(identifierId); return { parsed, pubkey: identifierId }; }; exports.getIdentifier = getIdentifier; const getBlazesByProjectId = async (connection, projectId) => { if (!connection) return []; const programAccounts = await connection.getProgramAccounts(constants_1.BLAZE_ADDRESS, { filters: [ { memcmp: { offset: 0, bytes: anchor_1.utils.bytes.bs58.encode(anchor_1.BorshAccountsCoder.accountDiscriminator(constants_1.BLAZE_PREFIX)) } }, { memcmp: { offset: constants_1.BLAZE_PROJECT_ID_OFFSET, bytes: projectId.toBase58() } } ] }); const blazeDatas = []; const coder = new anchor_1.BorshAccountsCoder(constants_1.BLAZE_IDL); programAccounts.forEach(account => { try { const blazeData = coder.decode(constants_1.BLAZE_PREFIX, account.account.data); if (blazeData) { blazeDatas.push({ ...account, parsed: blazeData }); } // eslint-disable-next-line no-empty } catch (e) { } }); return blazeDatas.sort((a, b) => a.pubkey.toBase58().localeCompare(b.pubkey.toBase58())); }; exports.getBlazesByProjectId = getBlazesByProjectId; const getAllEntrants = async (connection) => { if (!connection) return []; const programAccounts = await connection.getProgramAccounts(constants_1.BLAZE_ADDRESS, { filters: [ { memcmp: { offset: 0, bytes: anchor_1.utils.bytes.bs58.encode(anchor_1.BorshAccountsCoder.accountDiscriminator(constants_1.ENTRANTS_PREFIX)) } } ] }); const entrantsDatas = []; const coder = new anchor_1.BorshAccountsCoder(constants_1.BLAZE_IDL); programAccounts.forEach(account => { try { const entrantsDataRaw = coder.decode(constants_1.ENTRANTS_PREFIX, account.account.data); if (entrantsDataRaw) { const entrants = []; const entrantsFieldData = account.account.data.subarray(8 + 4 + 4); for (let i = 0; i < entrantsDataRaw.total; i++) { entrants.push(new web3_js_1.PublicKey(entrantsFieldData.slice(i * 32, (i + 1) * 32))); } entrantsDatas.push({ ...account, parsed: { ...entrantsDataRaw, entrants } }); } // eslint-disable-next-line no-empty } catch (e) { } }); return entrantsDatas.sort((a, b) => a.pubkey.toBase58().localeCompare(b.pubkey.toBase58())); }; exports.getAllEntrants = getAllEntrants; const getEntrants = async (connection, entrantsId) => { if (!connection) return null; const programAccounts = await connection.getProgramAccounts(constants_1.BLAZE_ADDRESS, { filters: [ { memcmp: { offset: 0, bytes: anchor_1.utils.bytes.bs58.encode(anchor_1.BorshAccountsCoder.accountDiscriminator(constants_1.ENTRANTS_PREFIX)) } } ] }); const coder = new anchor_1.BorshAccountsCoder(constants_1.BLAZE_IDL); const account = programAccounts.find(account => account.pubkey.toBase58() === entrantsId.toBase58()); if (!account) return null; try { const entrantsDataRaw = coder.decode(constants_1.ENTRANTS_PREFIX, account.account.data); if (entrantsDataRaw) { const entrants = []; const entrantsFieldData = account.account.data.subarray(8 + 4 + 4); for (let i = 0; i < entrantsDataRaw.total; i++) { entrants.push(new web3_js_1.PublicKey(entrantsFieldData.slice(i * 32, (i + 1) * 32))); } return { ...account, parsed: { ...entrantsDataRaw, entrants } }; } // eslint-disable-next-line no-empty } catch (e) { } }; exports.getEntrants = getEntrants; //# sourceMappingURL=accounts.js.map