@blockassetlabs/blaze
Version:
Blockasset Blaze
181 lines • 6.96 kB
JavaScript
;
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