UNPKG

@blockassetlabs/blaze

Version:

Blockasset Blaze

171 lines 6.21 kB
import { AnchorProvider, BorshAccountsCoder, Program, utils } from '@project-serum/anchor'; import { SignerWallet } from '@saberhq/solana-contrib'; import { Keypair, PublicKey } from '@solana/web3.js'; import { BLAZE_ADDRESS, BLAZE_IDL, BLAZE_PREFIX, BLAZE_PROJECT_ID_OFFSET, ENTRANTS_PREFIX } from './constants'; import { findIdentifierId } from './pda'; const getProgram = (connection) => { const provider = new AnchorProvider(connection, new SignerWallet(Keypair.generate()), {}); return new Program(BLAZE_IDL, BLAZE_ADDRESS, provider); }; export const getBlaze = async (connection, blazeId) => { const program = getProgram(connection); const parsed = await program.account.blaze.fetch(blazeId); return { parsed, pubkey: blazeId }; }; export 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] })); }; export const getAllBlazes = async (connection) => { if (!connection) return []; const programAccounts = await connection.getProgramAccounts(BLAZE_ADDRESS, { filters: [ { memcmp: { offset: 0, bytes: utils.bytes.bs58.encode(BorshAccountsCoder.accountDiscriminator(BLAZE_PREFIX)) } } ] }); const blazeDatas = []; const coder = new BorshAccountsCoder(BLAZE_IDL); programAccounts.forEach(account => { try { const blazeData = coder.decode(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())); }; export const getIdentifier = async (connection) => { const program = getProgram(connection); const [identifierId] = await findIdentifierId(); const parsed = await program.account.identifier.fetch(identifierId); return { parsed, pubkey: identifierId }; }; export const getBlazesByProjectId = async (connection, projectId) => { if (!connection) return []; const programAccounts = await connection.getProgramAccounts(BLAZE_ADDRESS, { filters: [ { memcmp: { offset: 0, bytes: utils.bytes.bs58.encode(BorshAccountsCoder.accountDiscriminator(BLAZE_PREFIX)) } }, { memcmp: { offset: BLAZE_PROJECT_ID_OFFSET, bytes: projectId.toBase58() } } ] }); const blazeDatas = []; const coder = new BorshAccountsCoder(BLAZE_IDL); programAccounts.forEach(account => { try { const blazeData = coder.decode(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())); }; export const getAllEntrants = async (connection) => { if (!connection) return []; const programAccounts = await connection.getProgramAccounts(BLAZE_ADDRESS, { filters: [ { memcmp: { offset: 0, bytes: utils.bytes.bs58.encode(BorshAccountsCoder.accountDiscriminator(ENTRANTS_PREFIX)) } } ] }); const entrantsDatas = []; const coder = new BorshAccountsCoder(BLAZE_IDL); programAccounts.forEach(account => { try { const entrantsDataRaw = coder.decode(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 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())); }; export const getEntrants = async (connection, entrantsId) => { if (!connection) return null; const programAccounts = await connection.getProgramAccounts(BLAZE_ADDRESS, { filters: [ { memcmp: { offset: 0, bytes: utils.bytes.bs58.encode(BorshAccountsCoder.accountDiscriminator(ENTRANTS_PREFIX)) } } ] }); const coder = new BorshAccountsCoder(BLAZE_IDL); const account = programAccounts.find(account => account.pubkey.toBase58() === entrantsId.toBase58()); if (!account) return null; try { const entrantsDataRaw = coder.decode(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 PublicKey(entrantsFieldData.slice(i * 32, (i + 1) * 32))); } return { ...account, parsed: { ...entrantsDataRaw, entrants } }; } // eslint-disable-next-line no-empty } catch (e) { } }; //# sourceMappingURL=accounts.js.map