36 lines
1.0 KiB
TypeScript
36 lines
1.0 KiB
TypeScript
|
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;
|
||
|
}
|