import { ActorSubclass } from '@dfinity/agent';
import { Principal } from '@dfinity/principal';
import { Metadata } from '../../interfaces/ext';
import { BurnResult } from '../../interfaces/xtc';
import { BaseMethodsExtendedActor } from '../../utils/actorFactory';
interface TimeStamp {
    timestamp_nanos: bigint;
}
export interface SendOpts {
    fee?: bigint;
    memo?: string;
    from_subaccount?: number;
    created_at_time?: TimeStamp;
}
export declare type SendResponse = {
    height: string;
} | {
    amount: string;
} | {
    transactionId: string;
};
export interface SendParams {
    to: string;
    from: string;
    amount: bigint;
    opts?: any;
}
export interface BurnParams {
    to: Principal;
    amount: string;
}
export interface BalanceResponse {
    value: string;
    decimals: number;
    error?: string;
}
interface AddedMehtodsToken {
    send: ({ to, from, amount }: SendParams) => Promise<SendResponse>;
    getMetadata: () => Promise<Metadata>;
    getBalance: (user: Principal) => Promise<BalanceResponse>;
    burnXTC: ({ to, amount }: BurnParams) => Promise<BurnResult>;
    getDecimals: () => Promise<number>;
}
export declare type TokenServiceExtended<T> = BaseMethodsExtendedActor<T> & AddedMehtodsToken;
export interface InternalTokenMethods {
    send: (actor: ActorSubclass<any>, { to, from, amount }: SendParams) => Promise<SendResponse>;
    getMetadata: (actor: ActorSubclass<any>) => Promise<Metadata>;
    getBalance: (actor: ActorSubclass<any>, user: Principal) => Promise<BalanceResponse>;
    burnXTC: (actor: ActorSubclass<any>, { to, amount }: BurnParams) => Promise<BurnResult>;
    getDecimals: (actor: ActorSubclass<any>) => Promise<number>;
}
export declare const getDecimalsFromMetadata: (metadata: Metadata) => number;
export declare const parseAmountToSend: (amount: string, decimals: number) => bigint;
declare const _default: InternalTokenMethods;
export default _default;
