import { Balance, BaseChainClient, ChainClient, ChainClientParams, Fees, Network, Tx, TxHash, TxHistoryParams, TxParams, TxsPage } from "../client";
import { Address, Asset, BaseAmount } from "@dojima-wallet/utils";
import BigNumber from "bignumber.js";
import { CosmosSDKClient } from "./cosmos";
import { TxOfflineParams } from "./cosmos";
import { CosmosClientParams } from "./types";
/**
 * Interface for custom Cosmos client
 */
export interface CosmosClient {
    getSDKClient(): CosmosSDKClient;
}
/**
 * Custom Cosmos client
 */
declare class Client extends BaseChainClient implements CosmosClient, ChainClient {
    private sdkClient;
    private clientUrls;
    private chainIds;
    /**
     * Constructor
     *
     * Client has to be initialised with network type and phrase.
     * It will throw an error if an invalid phrase has been passed.
     *
     * @param {ChainClientParams} params
     *
     * @throws {"Invalid phrase"} Thrown if the given phase is invalid.
     */
    constructor({ network, phrase, clientUrls, chainIds, rootDerivationPaths, }: ChainClientParams & CosmosClientParams);
    /**
     * Updates current network.
     *
     * @param {Network} network
     * @returns {void}
     */
    setNetwork(network: Network): void;
    /**
     * Get the explorer url.
     *
     * @returns {string} The explorer url.
     */
    getExplorerUrl(): string;
    /**
     * Get the explorer url for the given address.
     *
     * @param {Address} address
     * @returns {string} The explorer url for the given address.
     */
    getExplorerAddressUrl(address: Address): string;
    /**
     * Get the explorer url for the given transaction id.
     *
     * @param {string} txID
     * @returns {string} The explorer url for the given transaction id.
     */
    getExplorerTxUrl(txID: string): string;
    /**
     * @private
     * Get private key.
     *
     * @returns {PrivKey} The private key generated from the given phrase
     *
     * @throws {"Phrase not set"}
     * Throws an error if phrase has not been set before
     * */
    private getPrivateKey;
    getSDKClient(): CosmosSDKClient;
    /**
     * Get the current address.
     *
     * @returns {Address} The current address.
     *
     * @throws {Error} Thrown if phrase has not been set before. A phrase is needed to create a wallet and to derive an address from it.
     */
    getAddress(index?: number): string;
    /**
     * Validate the given address.
     *
     * @param {Address} address
     * @returns {boolean} `true` or `false`
     */
    validateAddress(address: Address): boolean;
    /**
     * Get the balance of a given address.
     *
     * @param {Address} address By default, it will return the balance of the current wallet. (optional)
     * @param {Asset} asset If not set, it will return all assets available. (optional)
     * @returns {Balance[]} The balance of the address.
     */
    getBalance(address: Address, assets?: Asset[]): Promise<Balance[]>;
    /**
     * Get transaction history of a given address and asset with pagination options.
     * If `asset` is not set, history will include `ATOM` txs only
     * By default it will return the transaction history of the current wallet.
     *
     * @param {TxHistoryParams} params The options to get transaction history. (optional)
     * @returns {TxsPage} The transaction history.
     */
    getTransactions(params?: TxHistoryParams): Promise<TxsPage>;
    /**
     * Get the transaction details of a given transaction id. Supports `ATOM` txs only.
     *
     * @param {string} txId The transaction id.
     * @returns {Tx} The transaction details of the given transaction id.
     */
    getTransactionData(txId: string): Promise<Tx>;
    /**
     * Transfer balances.
     *
     * @param {TxParams} params The transfer options.
     * @returns {TxHash} The transaction hash.
     */
    transfer({ walletIndex, asset, amount, recipient, memo, gasLimit, feeAmount, }: TxParams & {
        gasLimit?: BigNumber;
        feeAmount?: BaseAmount;
    }): Promise<TxHash>;
    /**
     * Transfer offline balances.
     *
     * @param {TxOfflineParams} params The transfer offline options.
     * @returns {string} The signed transaction bytes.
     */
    transferOffline({ walletIndex, asset, amount, recipient, memo, from_account_number, from_sequence, gasLimit, feeAmount, }: TxOfflineParams): Promise<string>;
    /**
     * Returns fees.
     * It tries to get chain fees from HermesChain `inbound_addresses` first
     * If it fails, it returns DEFAULT fees.
     *
     * @returns {Fees} Current fees
     */
    getFees(): Promise<Fees>;
}
export { Client };
