import type { BaseNodeProviderOptions } from './base.provider';
import { BaseNodeProvider } from './base.provider';
import { NodeProviderTypes } from './interfaces';
import type { UniversalBlockStats, UniversalBlock, UniversalTransaction, UniversalTrace, NetworkConfig, Hash } from './interfaces';
export interface Web3jsProviderOptions extends BaseNodeProviderOptions {
    httpUrl: string;
    wsUrl?: string;
    network: NetworkConfig;
    responseTimeout?: number;
}
export declare const createWeb3jsProvider: (options: Web3jsProviderOptions) => Web3jsProvider;
export declare class Web3jsProvider extends BaseNodeProvider<Web3jsProviderOptions> {
    readonly type = NodeProviderTypes.WEB3JS;
    private httpUrl;
    private wsUrl?;
    private network;
    private rateLimiter;
    private requestId;
    private responseTimeout;
    constructor(options: Web3jsProviderOptions);
    get connectionOptions(): Web3jsProviderOptions;
    private initializeWebSocket;
    healthcheckWebSocket(): boolean;
    handleConnectionError(error: any, _: string): Promise<void>;
    healthcheck(): Promise<boolean>;
    connect(): Promise<void>;
    disconnect(): Promise<void>;
    reconnectWebSocket(): Promise<void>;
    private _batchRpcCall;
    private get batchCall();
    private executeWithErrorHandling;
    subscribeToNewBlocks(callback: (blockNumber: number) => void): {
        unsubscribe(): void;
    };
    getBlockHeight(): Promise<number>;
    getManyBlocksByHeights(heights: number[], fullTransactions?: boolean, verifyTrie?: boolean): Promise<(UniversalBlock | null)[]>;
    getManyBlocksByHashes(hashes: Hash[], fullTransactions?: boolean): Promise<(UniversalBlock | null)[]>;
    getManyBlocksStatsByHeights(heights: number[]): Promise<(UniversalBlockStats | null)[]>;
    getManyBlocksWithReceipts(heights: string[] | number[], fullTransactions?: boolean, verifyTrie?: boolean): Promise<(UniversalBlock | null)[]>;
    private getManyBlocksReceipts;
    private getManyBlocksReceiptsViaBlockRpc;
    private getManyBlocksReceiptsViaTransactions;
    private normalizeRawReceiptForHeight;
    assertTraceSupport(): Promise<void>;
    getTracesByBlockNumber(blockNumber: number): Promise<UniversalTrace[]>;
    getTracesByTxHash(hash: string): Promise<UniversalTrace[]>;
    subscribeToPendingTransactions(callback: (txHash: string) => void): {
        unsubscribe(): void;
    };
    getRawMempool(): Promise<Record<string, any>>;
    getTransactionByHash(hash: string): Promise<UniversalTransaction | null>;
    private normalizeGethTrace;
    private normalizeParityTrace;
    private normalizeBlockStats;
    private normalizeRawBlock;
    private normalizeRawTransaction;
    private normalizeRawReceipt;
}
