import { PublicKey } from '@solana/web3.js'; import { MintInfo, MintLayout, AccountInfo, AccountLayout, u64 } from '@solana/spl-token'; import * as BufferLayout from 'buffer-layout'; import * as bs58 from 'bs58'; export const ACCOUNT_LAYOUT = BufferLayout.struct([ BufferLayout.blob(32, 'mint'), BufferLayout.blob(32, 'owner'), BufferLayout.nu64('amount'), BufferLayout.blob(93), ]); export const MINT_LAYOUT = BufferLayout.struct([ BufferLayout.blob(44), BufferLayout.u8('decimals'), BufferLayout.blob(37), ]); export function parseTokenAccountData(data: any) { // @ts-ignore let { mint, owner, amount } = ACCOUNT_LAYOUT.decode(data); return { mint: new PublicKey(mint), owner: new PublicKey(owner), amount, }; } export function parseTokenAccount(data: Buffer): AccountInfo { const accountInfo = AccountLayout.decode(data); accountInfo.mint = new PublicKey(accountInfo.mint); accountInfo.owner = new PublicKey(accountInfo.owner); accountInfo.amount = u64.fromBuffer(accountInfo.amount); return accountInfo; }