UNPKG

@hyperlane-xyz/sdk

Version:

The official SDK for the Hyperlane Network

90 lines 2.57 kB
import { PublicKey } from '@solana/web3.js'; import { deserializeUnchecked } from 'borsh'; class Creator { address; verified; share; constructor(fields) { Object.assign(this, fields); } } class MetadataData { name; symbol; uri; sellerFeeBasisPoints; creators; constructor(fields) { Object.assign(this, fields); } } export class Metadata { key; updateAuthority; mint; data; primarySaleHappened; isMutable; editionNonce; constructor(fields) { Object.assign(this, fields); } } export const SPL_TOKEN_METADATA_SCHEMA = new Map([ [ Creator, { kind: 'struct', fields: [ ['address', [32]], ['verified', 'u8'], ['share', 'u8'], ], }, ], [ MetadataData, { kind: 'struct', fields: [ ['name', 'string'], ['symbol', 'string'], ['uri', 'string'], ['sellerFeeBasisPoints', 'u16'], ['creators', { kind: 'option', type: [Creator] }], ], }, ], [ Metadata, { kind: 'struct', fields: [ ['key', 'u8'], ['updateAuthority', [32]], ['mint', [32]], ['data', MetadataData], ['primarySaleHappened', 'u8'], ['isMutable', 'u8'], ['editionNonce', { kind: 'option', type: 'u8' }], ], }, ], ]); // Metadata program account for creating SPL tokens metadata const METADATA_PROGRAM_ID = new PublicKey('metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s'); const removeNullPaddingFromString = (s) => s.replaceAll('\x00', ''); export async function getLegacySPLTokenMetadata(connection, mint) { // Derive the SPL token metadata account const [metadataPda] = PublicKey.findProgramAddressSync([Buffer.from('metadata'), METADATA_PROGRAM_ID.toBuffer(), mint.toBuffer()], METADATA_PROGRAM_ID); const accountInfo = await connection.getAccountInfo(metadataPda); if (!accountInfo) return null; const metadata = deserializeUnchecked(SPL_TOKEN_METADATA_SCHEMA, Metadata, accountInfo.data); return { name: removeNullPaddingFromString(metadata.data.name), symbol: removeNullPaddingFromString(metadata.data.symbol), uri: removeNullPaddingFromString(metadata.data.uri), }; } //# sourceMappingURL=metadata.js.map