UNPKG

@fanitrade/fani-solana-tokenlist

Version:
359 lines 23.3 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.programIds = exports.PROGRAM_IDS = exports.ENABLE_FEES_INPUT = exports.SYSTEM = exports.METAPLEX_ID = exports.AUCTION_ID = exports.VAULT_ID = exports.MEMO_ID = exports.METADATA_PROGRAM_ID = exports.BPF_UPGRADE_LOADER_ID = exports.SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID = exports.TOKEN_PROGRAM_ID = exports.WRAPPED_SOL_MINT = exports.METADATA_SCHEMA = exports.Data = exports.Creator = exports.Edition = exports.EditionMarker = exports.MasterEditionV2 = exports.MasterEditionV1 = exports.Metadata = exports.decodeMetadata = exports.findProgramAddress = exports.EDITION_MARKER_BIT_SIZE = exports.RESERVATION = exports.EDITION = exports.METADATA_PREFIX = exports.extendBorsh = void 0; const web3_js_1 = require("@solana/web3.js"); const borsh_1 = require("borsh"); const bs58_1 = __importDefault(require("bs58")); const extendBorsh = () => { borsh_1.BinaryReader.prototype.readPubkey = function () { const reader = this; const array = reader.readFixedArray(32); return new web3_js_1.PublicKey(array); }; borsh_1.BinaryWriter.prototype.writePubkey = function (value) { const writer = this; writer.writeFixedArray(value.toBuffer()); }; borsh_1.BinaryReader.prototype.readPubkeyAsString = function () { const reader = this; const array = reader.readFixedArray(32); return bs58_1.default.encode(array); }; borsh_1.BinaryWriter.prototype.writePubkeyAsString = function (value) { const writer = this; writer.writeFixedArray(bs58_1.default.decode(value)); }; }; exports.extendBorsh = extendBorsh; exports.extendBorsh(); const MetadataKey = { Uninitialized: 0, MetadataV1: 4, EditionV1: 1, MasterEditionV1: 2, MasterEditionV2: 6, EditionMarker: 7 }; exports.METADATA_PREFIX = 'metadata'; exports.EDITION = 'edition'; exports.RESERVATION = 'reservation'; exports.EDITION_MARKER_BIT_SIZE = 248; const findProgramAddress = async (seeds, programId) => { const key = `pda-${seeds.reduce((agg, item) => agg + item.toString('hex'), '')}${programId.toString()}`; const cached = localStorage.getItem(key); if (cached) { const value = JSON.parse(cached); return [new web3_js_1.PublicKey(value.key), parseInt(value.nonce)]; } const result = await web3_js_1.PublicKey.findProgramAddress(seeds, programId); localStorage.setItem(key, JSON.stringify({ key: result[0].toBase58(), nonce: result[1] })); return result; }; exports.findProgramAddress = findProgramAddress; const decodeMetadata = (buffer) => { let metadata; try { metadata = borsh_1.deserializeUnchecked(exports.METADATA_SCHEMA, Metadata, buffer); } catch (_a) { return; } return metadata; }; exports.decodeMetadata = decodeMetadata; async function getEdition(tokenMint) { const PROGRAM_IDS = exports.programIds(); return (await exports.findProgramAddress([ Buffer.from(exports.METADATA_PREFIX), PROGRAM_IDS.metadata.toBuffer(), tokenMint.toBuffer(), Buffer.from(exports.EDITION) ], PROGRAM_IDS.metadata))[0]; } class Metadata { constructor(args) { this.key = MetadataKey.MetadataV1; this.updateAuthority = args.updateAuthority; this.mint = args.mint; this.data = args.data; this.primarySaleHappened = args.primarySaleHappened; this.isMutable = args.isMutable; } async init() { const edition = await getEdition(this.mint); this.edition = edition; this.masterEdition = edition; } } exports.Metadata = Metadata; class MasterEditionV1 { constructor(args) { this.key = MetadataKey.MasterEditionV1; this.supply = args.supply; this.maxSupply = args.maxSupply; this.printingMint = args.printingMint; this.oneTimePrintingAuthorizationMint = args.oneTimePrintingAuthorizationMint; } } exports.MasterEditionV1 = MasterEditionV1; class MasterEditionV2 { constructor(args) { this.key = MetadataKey.MasterEditionV2; this.supply = args.supply; this.maxSupply = args.maxSupply; } } exports.MasterEditionV2 = MasterEditionV2; class CreateMetadataArgs { constructor(args) { this.data = args.data; this.isMutable = args.isMutable; } } class UpdateMetadataArgs { constructor(args) { this.data = args.data ? args.data : null; this.updateAuthority = args.updateAuthority ? new web3_js_1.PublicKey(args.updateAuthority) : null; this.primarySaleHappened = args.primarySaleHappened; } } class CreateMasterEditionArgs { constructor(args) { this.maxSupply = args.maxSupply; } } class MintPrintingTokensArgs { constructor(args) { this.supply = args.supply; } } class EditionMarker { constructor(args) { this.key = MetadataKey.EditionMarker; this.ledger = args.ledger; } editionTaken(edition) { const editionOffset = edition % exports.EDITION_MARKER_BIT_SIZE; const indexOffset = Math.floor(editionOffset / 8); if (indexOffset > 30) { throw new 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.EditionMarker = EditionMarker; class Edition { constructor(args) { this.key = MetadataKey.EditionV1; this.parent = args.parent; this.edition = args.edition; } } exports.Edition = Edition; class Creator { constructor(args) { this.address = args.address; this.verified = args.verified; this.share = args.share; } } exports.Creator = Creator; class Data { constructor(args) { this.name = args.name; this.symbol = args.symbol; this.uri = args.uri; this.sellerFeeBasisPoints = args.sellerFeeBasisPoints; this.creators = args.creators; } } exports.Data = Data; exports.METADATA_SCHEMA = new Map([ [ CreateMetadataArgs, { kind: 'struct', fields: [ ['instruction', 'u8'], ['data', Data], ['isMutable', 'u8'] // bool ] } ], [ UpdateMetadataArgs, { kind: 'struct', fields: [ ['instruction', 'u8'], ['data', { kind: 'option', type: Data }], ['updateAuthority', { kind: 'option', type: 'pubkey' }], ['primarySaleHappened', { kind: 'option', type: 'u8' }] ] } ], [ CreateMasterEditionArgs, { kind: 'struct', fields: [ ['instruction', 'u8'], ['maxSupply', { kind: 'option', type: 'u64' }] ] } ], [ MintPrintingTokensArgs, { kind: 'struct', fields: [ ['instruction', 'u8'], ['supply', 'u64'] ] } ], [ MasterEditionV1, { kind: 'struct', fields: [ ['key', 'u8'], ['supply', 'u64'], ['maxSupply', { kind: 'option', type: 'u64' }], ['printingMint', 'pubkey'], ['oneTimePrintingAuthorizationMint', 'pubkey'] ] } ], [ MasterEditionV2, { kind: 'struct', fields: [ ['key', 'u8'], ['supply', 'u64'], ['maxSupply', { kind: 'option', type: 'u64' }] ] } ], [ Edition, { kind: 'struct', fields: [ ['key', 'u8'], ['parent', 'pubkey'], ['edition', 'u64'] ] } ], [ Data, { kind: 'struct', fields: [ ['name', 'string'], ['symbol', 'string'], ['uri', 'string'], ['sellerFeeBasisPoints', 'u16'], ['creators', { kind: 'option', type: [Creator] }] ] } ], [ Creator, { kind: 'struct', fields: [ ['address', 'pubkey'], ['verified', 'u8'], ['share', 'u8'] ] } ], [ Metadata, { kind: 'struct', fields: [ ['key', 'u8'], ['updateAuthority', 'pubkey'], ['mint', 'pubkey'], ['data', Data], ['primarySaleHappened', 'u8'], ['isMutable', 'u8'] // bool ] } ], [ EditionMarker, { kind: 'struct', fields: [ ['key', 'u8'], ['ledger', [31]] ] } ] ]); exports.WRAPPED_SOL_MINT = new web3_js_1.PublicKey('So11111111111111111111111111111111111111112'); exports.TOKEN_PROGRAM_ID = new web3_js_1.PublicKey('TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'); exports.SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID = new web3_js_1.PublicKey('ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'); exports.BPF_UPGRADE_LOADER_ID = new web3_js_1.PublicKey('BPFLoaderUpgradeab1e11111111111111111111111'); exports.METADATA_PROGRAM_ID = new web3_js_1.PublicKey('metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s' // 'GCUQ7oWCzgtRKnHnuJGxpr5XVeEkxYUXwTKYcqGtxLv4', ); exports.MEMO_ID = new web3_js_1.PublicKey('MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr'); exports.VAULT_ID = new web3_js_1.PublicKey('vau1zxA2LbssAUEF7Gpw91zMM1LvXrvpzJtmZ58rPsn' // '41cCnZ1Z1upJdtsS1tzFGR34cPFgJLzvJFmgYKpCqkz7', ); exports.AUCTION_ID = new web3_js_1.PublicKey('auctxRXPeJoc4817jDhf4HbjnhEcr1cCXenosMhK5R8' // '6u5XVthCStUfmNrYhFsST94oKxzwEZfZFHFhiCnB2nR1', ); exports.METAPLEX_ID = new web3_js_1.PublicKey('p1exdMJcjVao65QdewkaZRUnU6VPSXhus9n2GzWfh98' // '98jcGaKLKx9vv33H9edLUXAydrSipHhJGDQuPXBVPVGp', ); exports.SYSTEM = new web3_js_1.PublicKey('11111111111111111111111111111111'); exports.ENABLE_FEES_INPUT = false; // legacy pools are used to show users contributions in those pools to allow for withdrawals of funds exports.PROGRAM_IDS = [ { name: 'mainnet-beta' }, { name: 'testnet' }, { name: 'devnet' }, { name: 'localnet' } ]; const programIds = () => { return { token: exports.TOKEN_PROGRAM_ID, associatedToken: exports.SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID, bpf_upgrade_loader: exports.BPF_UPGRADE_LOADER_ID, system: exports.SYSTEM, metadata: exports.METADATA_PROGRAM_ID, memo: exports.MEMO_ID, vault: exports.VAULT_ID, auction: exports.AUCTION_ID, metaplex: exports.METAPLEX_ID }; }; exports.programIds = programIds; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWV0YWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvTWV0YWRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsNkNBQTRDO0FBQzVDLGlDQUF5RTtBQUN6RSxnREFBMEI7QUFFbkIsTUFBTSxXQUFXLEdBQUcsR0FBRyxFQUFFO0lBQzdCLG9CQUFZLENBQUMsU0FBaUIsQ0FBQyxVQUFVLEdBQUc7UUFDM0MsTUFBTSxNQUFNLEdBQUksSUFBZ0MsQ0FBQztRQUNqRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sSUFBSSxtQkFBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLENBQUMsQ0FBQztJQUVELG9CQUFZLENBQUMsU0FBaUIsQ0FBQyxXQUFXLEdBQUcsVUFBVSxLQUFnQjtRQUN0RSxNQUFNLE1BQU0sR0FBSSxJQUFnQyxDQUFDO1FBQ2pELE1BQU0sQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDM0MsQ0FBQyxDQUFDO0lBRUQsb0JBQVksQ0FBQyxTQUFpQixDQUFDLGtCQUFrQixHQUFHO1FBQ25ELE1BQU0sTUFBTSxHQUFJLElBQWdDLENBQUM7UUFDakQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QyxPQUFPLGNBQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQyxDQUFDO0lBRUQsb0JBQVksQ0FBQyxTQUFpQixDQUFDLG1CQUFtQixHQUFHLFVBQ3BELEtBQVU7UUFFVixNQUFNLE1BQU0sR0FBSSxJQUFnQyxDQUFDO1FBQ2pELE1BQU0sQ0FBQyxlQUFlLENBQUMsY0FBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQy9DLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQztBQXhC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