import { NEMTransaction } from '@trezor/connect/lib/types/api/nem';
import { BinanceSDKTransaction, CardanoSignedTxData, CardanoSignTransaction, EosSDKTransaction, EthereumSignedTx, Params, PROTO, RefTransaction, SignedTransaction, StellarTransaction, TezosTransactionOperation } from '@trezor/connect-web';
import { TxInputType, TxOutputType } from '@trezor/transport/lib/types/messages';
import { BigNumber, BigNumberish, ethers } from 'ethers';
import { TxResponse } from 'xrpl';
import { Networks } from '../../../models';
import { BinanceCoins, BitcoinCoins, EosCoins, EthereumCoins, RippleCoins } from '../../../networks';
import { CardanoCoins, NemCoins, StellarCoins, TezosCoins } from './enums';
export interface TrezorData {
    id: string;
    label: string;
    unavailableCapabilities: AllCoins[];
}
export declare type AllCoins = BitcoinCoins | EthereumCoins | RippleCoins | StellarCoins | NemCoins | CardanoCoins | TezosCoins | EosCoins | BinanceCoins;
export interface CoinInNetwork {
    network: Networks;
    coin: AllCoins;
}
export declare type CustomTrezorGetAddress = {
    (args: {
        network?: Networks.Bitcoin;
        coins?: BitcoinCoins[];
        showOnTrezor?: boolean;
    }): Promise<(string | undefined)[]>;
    (args: {
        network?: Networks.Ethereum;
        coins?: EthereumCoins[];
        showOnTrezor?: boolean;
    }): Promise<(string | undefined)[]>;
    (args: {
        network?: Networks.Ripple;
        coins?: RippleCoins[];
        showOnTrezor?: boolean;
    }): Promise<(string | undefined)[]>;
    (args: {
        network?: Networks.Stellar;
        coins?: StellarCoins[];
        showOnTrezor?: boolean;
    }): Promise<(string | undefined)[]>;
    (args: {
        network?: Networks.NEM;
        coins?: NemCoins[];
        showOnTrezor?: boolean;
    }): Promise<(string | undefined)[]>;
    (args: {
        network?: Networks.Cardano;
        coins?: CardanoCoins[];
        showOnTrezor?: boolean;
    }): Promise<(string | undefined)[]>;
    (args: {
        network?: Networks.Tezos;
        coins?: TezosCoins[];
        showOnTrezor?: boolean;
    }): Promise<(string | undefined)[]>;
    (args: {
        network?: Networks.Eos;
        coins?: EosCoins[];
        showOnTrezor?: boolean;
    }): Promise<(string | undefined)[]>;
    (args: {
        network?: Networks.Binance;
        coins?: BinanceCoins[];
        showOnTrezor?: boolean;
    }): Promise<(string | undefined)[]>;
};
export interface GetAddressProps {
    network?: Networks;
    coins?: AllCoins[];
    showOnTrezor?: boolean;
}
export interface BitcoinTransaction {
    inputs: TxInputType[];
    outputs: TxOutputType[];
    refTxs?: RefTransaction[];
}
export declare type AllTransactions = BitcoinTransaction | CustomTransaction | StellarTransaction | NEMTransaction | Params<CardanoSignTransaction> | TezosTransactionOperation | EosSDKTransaction | BinanceSDKTransaction;
export interface PushedTransaction {
    txid: string;
}
export declare type AllResponses = TxResponse | SignedTransaction | EthereumSignedTx | CardanoSignedTxData | PROTO.EosSignedTx | PushedTransaction | ethers.providers.TransactionResponse;
export interface SendSignedTransactionProps {
    network?: Networks;
    coin?: AllCoins;
    transaction?: AllTransactions;
}
export interface SendTransactionProps {
    coin?: AllCoins;
    transaction?: string;
}
export interface TransferProps {
    network?: Networks;
    coin?: AllCoins;
    from?: string;
    addressTo?: string;
    value?: number;
}
export interface CustomTransaction {
    from: string;
    to: string;
    value?: number;
    data?: string;
}
export interface GetBalanceTrezor {
    coins: AllCoins[];
    address?: string;
}
export interface EthAccountInfo {
    balance?: BigNumber;
    coin: AllCoins;
    address?: string;
}
export interface GetTrezorAccountInfo {
    coin: AllCoins;
    address: string;
    network?: Networks;
}
export interface GetAccountInfoMiddle {
    coin: AllCoins;
    address: string;
    balance: number | BigNumberish;
    network?: Networks;
}
export interface GetAccountInfoResult {
    coin?: AllCoins;
    address?: string;
    balance?: number;
    network?: Networks;
}
export declare type AllCoinsAtTheSameTime = BitcoinCoins[] & EthereumCoins[] & RippleCoins[] & StellarCoins[] & NemCoins[] & CardanoCoins[] & TezosCoins[] & BinanceCoins[];
