UNPKG

@renec-foundation/mpl-token-metadata

Version:

MPL Token Metadata JavaScript API.

59 lines 2.39 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.EditionMarker = exports.EditionMarkerData = void 0; const mpl_core_1 = require("@renec-foundation/mpl-core"); const web3_js_1 = require("@solana/web3.js"); const Edition_1 = require("./Edition"); const MetadataProgram_1 = require("../MetadataProgram"); const buffer_1 = require("buffer"); const constants_1 = require("./constants"); class EditionMarkerData extends mpl_core_1.Borsh.Data { constructor(args) { super(args); this.key = constants_1.MetadataKey.EditionMarker; } editionTaken(edition) { const editionOffset = edition % EditionMarker.DATA_SIZE; const indexOffset = Math.floor(editionOffset / 8); if (indexOffset > 30) { throw Error('Bad index for edition'); } const positionInBitsetFromRight = 7 - (editionOffset % 8); const mask = Math.pow(2, positionInBitsetFromRight); const appliedMask = this.ledger[indexOffset] & mask; return appliedMask != 0; } } exports.EditionMarkerData = EditionMarkerData; EditionMarkerData.SCHEMA = EditionMarkerData.struct([ ['key', 'u8'], ['ledger', [31]], ]); class EditionMarker extends mpl_core_1.Account { constructor(key, info) { super(key, info); if (!this.assertOwner(MetadataProgram_1.MetadataProgram.PUBKEY)) { throw (0, mpl_core_1.ERROR_INVALID_OWNER)(); } if (!EditionMarker.isCompatible(this.info.data)) { throw (0, mpl_core_1.ERROR_INVALID_ACCOUNT_DATA)(); } this.data = EditionMarkerData.deserialize(this.info.data); } static async getPDA(mint, edition) { const editionNumber = Math.floor(edition.toNumber() / 248); return MetadataProgram_1.MetadataProgram.findProgramAddress([ buffer_1.Buffer.from(MetadataProgram_1.MetadataProgram.PREFIX), MetadataProgram_1.MetadataProgram.PUBKEY.toBuffer(), new web3_js_1.PublicKey(mint).toBuffer(), buffer_1.Buffer.from(Edition_1.Edition.EDITION_PREFIX), buffer_1.Buffer.from(editionNumber.toString()), ]); } static isCompatible(data) { return data[0] === constants_1.MetadataKey.EditionMarker; } } exports.EditionMarker = EditionMarker; EditionMarker.DATA_SIZE = 248; //# sourceMappingURL=EditionMarker.js.map