UNPKG

@nosana/kit

Version:

Nosana KIT

64 lines (63 loc) 2.13 kB
import { Address, Instruction, TransactionSigner } from '@solana/kit'; import { Logger } from '../../logger/Logger.js'; export interface TokenAccount { pubkey: Address; owner: Address; mint: Address; amount: bigint; decimals: number; } export interface TokenAccountWithBalance extends TokenAccount { uiAmount: number; } import type { SolanaService } from '../solana/index.js'; /** * Dependencies for TokenService */ export interface TokenServiceDeps { logger: Logger; solana: SolanaService; } /** * Config for TokenService */ export interface TokenServiceConfig { tokenAddress: Address; } /** * TokenService interface */ export interface TokenService { getAllTokenHolders(options?: { includeZeroBalance?: boolean; excludePdaAccounts?: boolean; }): Promise<TokenAccountWithBalance[]>; getTokenAccountForAddress(owner: string | Address): Promise<TokenAccountWithBalance | null>; getBalance(owner: string | Address): Promise<number>; /** * Get the associated token account address for a given owner. * * @param owner The owner address * @returns The associated token account address */ getATA(owner: Address | string): Promise<Address>; /** * Get instruction(s) to transfer SPL tokens from one address to another. * May return 1 or 2 instructions depending on whether the recipient's associated token account needs to be created. * * @param params Transfer parameters * @param params.to Recipient address * @param params.amount Amount in token base units (number or bigint) * @param params.from Optional sender TransactionSigner. If not provided, uses wallet from client. * @returns Array of instructions (create ATA instruction if needed, then transfer instruction) */ transfer(params: { to: Address | string; amount: number | bigint; from?: TransactionSigner; }): Promise<Instruction[]>; } /** * Creates a TokenService instance. */ export declare function createTokenService(deps: TokenServiceDeps, config: TokenServiceConfig): TokenService;