export = BaseProvider;
declare class BaseProvider extends EventEmitter {
    /**
  
     * @param {object} [options]
     * @param {string} options.url - Full json rpc http url
     * @param {number} [options.timeout=30*1000] - Request time out in ms
     * @param {number} [options.retry=1] - Retry number
     * @param {boolean} [options.keepAlive=false] - Whether open the http keep-alive option
     * @param {object} [options.logger] - Logger with `info` and `error`
     * @return {BaseProvider}
     */
    constructor({ url, retry, timeout, keepAlive, logger, }?: {
        url: string;
        timeout?: number;
        retry?: number;
        keepAlive?: boolean;
        logger?: object;
    });
    url: string;
    retry: number;
    timeout: number;
    logger: any;
    keepAlive: boolean;
    headers: {
        Connection: string;
    };
    /**
     * Gen a random json rpc id.
     * It is used in `call` method, overwrite it to gen your own id.
     *
     * @return {string}
     */
    requestId(): string;
    /**
     * @param {any}
     * @private
     * @return {Promise<*>}
     */
    private _request;
    /**
     * @param {any[]}
     * @return {Promise<*>}
     * @private
     */
    private _requestBatch;
    /**
     * Call a json rpc method with params
     *
     * @param {object} data
     * @param {string} data.method - Json rpc method name.
     * @param {array} [data.params] - Json rpc method params.
     * @return {Promise<*>} Json rpc method return value.
     *
     * @example
     * > await provider.request({method: 'cfx_epochNumber'});
     * > await provider.request({method: 'cfx_getBlockByHash', params: [blockHash]});
     */
    request({ method, params }: {
        method: string;
        params?: any[];
    }): Promise<any>;
    /**
     * Call a json rpc method with params
     *
     * @param {string} method - Json rpc method name.
     * @param {any[]} params - Json rpc method params.
     * @return {Promise<*>} Json rpc method return value.
     *
     * @example
     * > await provider.call('cfx_epochNumber');
     * > await provider.call('cfx_getBlockByHash', blockHash);
     */
    call(method: string, ...params: any[]): Promise<any>;
    /**
     * Send a json rpc method request
     *
     * @param {string} method - Json rpc method name.
     * @param {array} [params] - Json rpc method params.
     * @return {Promise<*>} Json rpc method return value.
     *
     * @example
     * > await provider.send('cfx_epochNumber');
     * > await provider.send('cfx_getBlockByHash', [blockHash]);
     */
    send(method: string, params?: any[]): Promise<any>;
    /**
     * Batch call json rpc methods with params
     *
     * @param {object[]} array - Array of object with "method" and "params"
     * @return {Promise<Array>}
     *
     * @example
     * > await provider.batch([
     *   { method: 'cfx_epochNumber' },
     *   { method: 'cfx_getBalance', params: ['cfxtest:aaawgvnhveawgvnhveawgvnhveawgvnhvey1umfzwp'] },
     *   { method: 'InValidInput' },
     * ])
     [ '0x3b734d', '0x22374d959c622f74728', RPCError: Method not found ]
     */
    batch(array: object[]): Promise<any[]>;
    close(): void;
}
declare namespace BaseProvider {
    export { RPCError };
}
import EventEmitter = require("events");
import RPCError = require("./RPCError");
//# sourceMappingURL=BaseProvider.d.ts.map