import BigNumber from 'bignumber.js';
import { ChainInfo, CoinInfo } from '../types/chain';
import { AddressInfo, AddressValidation, ClientInfo, FeePricePerUnit, PartialTokenInfo, SignedTx, TransactionStatus, TypedMessage, UnsignedTx, UTXO } from '../types/provider';
import { Signer, Verifier } from '../types/secret';
import { BaseClient, BaseProvider, ClientFilter } from './abc';
declare class ProviderController {
    chainSelector: (chainCode: string) => ChainInfo;
    private clientsCache;
    private lastClientCache;
    constructor(chainSelector: (chainCode: string) => ChainInfo);
    getClient(chainCode: string, filter?: ClientFilter): Promise<BaseClient>;
    getProvider(chainCode: string): Promise<BaseProvider>;
    requireChainImpl(impl: string): any;
    getInfo(chainCode: string): Promise<ClientInfo>;
    getAddresses(chainCode: string, address: Array<string>): Promise<Array<AddressInfo | undefined>>;
    getBalances(chainCode: string, requests: Array<{
        address: string;
        coin: Partial<CoinInfo>;
    }>): Promise<Array<BigNumber | undefined>>;
    getTransactionStatuses(chainCode: string, txids: Array<string>): Promise<Array<TransactionStatus | undefined>>;
    getFeePricePerUnit(chainCode: string): Promise<FeePricePerUnit>;
    broadcastTransaction(chainCode: string, rawTx: string, options?: any): Promise<string>;
    getTokenInfos(chainCode: string, tokenAddresses: Array<string>): Promise<Array<PartialTokenInfo | undefined>>;
    getUTXOs(chainCode: string, address: Array<string>): Promise<{
        [address: string]: Array<UTXO>;
    }>;
    buildUnsignedTx(chainCode: string, unsignedTx: UnsignedTx): Promise<UnsignedTx>;
    pubkeyToAddress(chainCode: string, verifier: Verifier, encoding: string | undefined): Promise<string>;
    signTransaction(chainCode: string, unsignedTx: UnsignedTx, signers: {
        [p: string]: Signer;
    }): Promise<SignedTx>;
    verifyAddress(chainCode: string, address: string): Promise<AddressValidation>;
    verifyTokenAddress(chainCode: string, address: string): Promise<AddressValidation>;
    signMessage(chainCode: string, message: TypedMessage, signer: Signer, address?: string): Promise<string>;
    verifyMessage(chainCode: string, address: string, message: TypedMessage, signature: string): Promise<boolean>;
    hardwareGetXpubs(chainCode: string, paths: string[], showOnDevice?: boolean): Promise<{
        path: string;
        xpub: string;
    }[]>;
    hardwareGetAddress(chainCode: string, path: string, showOnDevice?: boolean, addressToVerify?: string): Promise<string>;
    hardwareSignTransaction(chainCode: string, unsignedTx: UnsignedTx, signers: Record<string, string>): Promise<SignedTx>;
    hardwareSignMessage(chainCode: string, message: TypedMessage, signer: string): Promise<string>;
    hardwareVerifyMessage(chainCode: string, address: string, message: TypedMessage, signature: string): Promise<boolean>;
}
export { ProviderController };
