import { MintInfo, MintLayout, u64 } from "@solana/spl-token"; import { AccountInfo, PublicKey } from "@solana/web3.js"; import { ParsedAccountBase, useAccount } from "./useAccount"; const deserializeMint = (data: Buffer) => { if (data.length !== MintLayout.span) { throw new Error("Not a valid Mint"); } const mintInfo = MintLayout.decode(data); if (mintInfo.mintAuthorityOption === 0) { mintInfo.mintAuthority = null; } else { mintInfo.mintAuthority = new PublicKey(mintInfo.mintAuthority); } mintInfo.supply = u64.fromBuffer(mintInfo.supply); mintInfo.isInitialized = mintInfo.isInitialized !== 0; if (mintInfo.freezeAuthorityOption === 0) { mintInfo.freezeAuthority = null; } else { mintInfo.freezeAuthority = new PublicKey(mintInfo.freezeAuthority); } return mintInfo as MintInfo; }; export const MintParser = (pubKey: PublicKey, info: AccountInfo) => { const buffer = Buffer.from(info.data); const data = deserializeMint(buffer); const details = { pubkey: pubKey, account: { ...info, }, info: data, } as ParsedAccountBase; return details; }; export function useMint(key: PublicKey | undefined | null) { return useAccount(key, MintParser).info?.info; }