import { ethers } from "ethers";
import { CachingMechanismInterface } from "../interfaces";
import { Logger } from "winston";
export declare class RetryProvider extends ethers.providers.StaticJsonRpcProvider {
    readonly nodeQuorumThreshold: number;
    readonly retries: number;
    readonly delay: number;
    readonly maxConcurrency: number;
    readonly logger?: Logger | undefined;
    readonly providers: ethers.providers.StaticJsonRpcProvider[];
    constructor(params: ConstructorParameters<typeof ethers.providers.StaticJsonRpcProvider>[], chainId: number, nodeQuorumThreshold: number, retries: number, delay: number, maxConcurrency: number, providerCacheNamespace: string, pctRpcCallsLogged: number, redisClient?: CachingMechanismInterface, standardTtlBlockDistance?: number, noTtlBlockDistance?: number, providerCacheTtl?: number, logger?: Logger | undefined);
    send(method: string, params: Array<unknown>): Promise<unknown>;
    _validateResponse(method: string, _: Array<unknown>, response: unknown): boolean;
    _sendAndValidate(provider: ethers.providers.StaticJsonRpcProvider, method: string, params: Array<unknown>): Promise<unknown>;
    /**
     * Determine whether a JSON-RPC error response indicates an unrecoverable error.
     * @param method JSON-RPC method that produced the error.
     * @param error JSON-RPC error instance.
     * @returns True if the request should be aborted immediately, otherwise false.
     */
    protected failImmediate(method: string, response: unknown): boolean;
    _trySend(provider: ethers.providers.StaticJsonRpcProvider, method: string, params: Array<unknown>): Promise<unknown>;
    _getQuorum(method: string, params: Array<unknown>): number;
}
