/// <reference types="node" />
import { EthereumTransactionResult, EthereumTransactionCursor } from './../EthereumTypes';
import { IAirGapSignedTransaction } from '../../../interfaces/IAirGapSignedTransaction';
import { IAirGapTransaction } from '../../../interfaces/IAirGapTransaction';
import { SignedEthereumTransaction } from '../../../serializer/schemas/definitions/signed-transaction-ethereum';
import { UnsignedTransaction } from '../../../serializer/schemas/definitions/unsigned-transaction';
import { RawEthereumTransaction } from '../../../serializer/types';
import { FeeDefaults } from '../../ICoinProtocol';
import { ICoinSubProtocol, SubProtocolType } from '../../ICoinSubProtocol';
import { BaseEthereumProtocol } from '../BaseEthereumProtocol';
import { EtherscanInfoClient } from '../clients/info-clients/EtherscanInfoClient';
import { AirGapNodeClient } from '../clients/node-clients/AirGapNodeClient';
import { EthereumERC20ProtocolOptions } from '../EthereumProtocolOptions';
export declare class GenericERC20 extends BaseEthereumProtocol<AirGapNodeClient, EtherscanInfoClient> implements ICoinSubProtocol {
    readonly options: EthereumERC20ProtocolOptions;
    isSubProtocol: boolean;
    subProtocolType: SubProtocolType;
    readonly contractAddress: string;
    constructor(options: EthereumERC20ProtocolOptions);
    getBalanceOfPublicKey(publicKey: string): Promise<string>;
    getBalanceOfAddresses(addresses: string[]): Promise<string>;
    signWithPrivateKey(privateKey: Buffer, transaction: RawEthereumTransaction): Promise<IAirGapSignedTransaction>;
    private estimateGas;
    estimateMaxTransactionValueFromPublicKey(publicKey: string, recipients: string[], fee?: string): Promise<string>;
    estimateFeeDefaultsFromPublicKey(publicKey: string, recipients: string[], values: string[], data?: any): Promise<FeeDefaults>;
    prepareTransactionFromPublicKey(publicKey: string, recipients: string[], values: string[], fee: string): Promise<RawEthereumTransaction>;
    getTransactionsFromAddresses(addresses: string[], limit: number, cursor?: EthereumTransactionCursor): Promise<EthereumTransactionResult>;
    getTransactionDetailsFromSigned(signedTx: SignedEthereumTransaction): Promise<IAirGapTransaction[]>;
    getTransactionDetails(unsignedTx: UnsignedTransaction): Promise<IAirGapTransaction[]>;
}
