///
import { Deferrable } from '@ethersproject/properties';
import { ConnectionInfo, FetchJsonResponse } from '@ethersproject/web';
import { Formatter, JsonRpcProvider, TransactionRequest } from '@ethersproject/providers';
import { Network, Networkish } from '@ethersproject/networks';
import { Queue } from '../common/queue';
import { LimitFunction } from '../common/promise-limit';
import { BigNumber, BigNumberish } from '@ethersproject/bignumber';
import { BlockTag } from '../ethers/block-tag';
import { MiddlewareCallback, MiddlewareService } from '@lido-nestjs/middleware';
import { FeeHistory } from '../ethers/fee-history';
import { TraceConfig, TraceResult } from '../interfaces/debug-traces';
import { LazyEventEmitter } from '../common/lazy-event-emitter';
import { ProviderEvents } from '../events';
export interface ExtendedJsonRpcBatchProviderEventEmitter extends LazyEventEmitter {
on(eventName: 'rpc', listener: (event: ProviderEvents) => void): this;
once(eventName: 'rpc', listener: (event: ProviderEvents) => void): this;
addListener(eventName: 'rpc', listener: (event: ProviderEvents) => void): this;
}
export interface RequestPolicy {
jsonRpcMaxBatchSize: number;
maxConcurrentRequests: number;
batchAggregationWaitMs: number;
}
export interface JsonRpcRequest {
method: string;
params: Array;
id: number;
jsonrpc: '2.0';
}
export interface JsonRpcResponse {
jsonrpc: '2.0';
id: number;
result?: unknown;
error?: {
code: number;
message: string;
data?: unknown;
};
}
export interface FullRequestIntent {
request: JsonRpcRequest;
resolve: (result: unknown) => void;
reject: (error: Error) => void;
}
export interface RequestIntent {
request: FullRequestIntent['request'];
resolve: FullRequestIntent['resolve'] | null;
reject: FullRequestIntent['reject'] | null;
}
export declare type PartialRequestIntent = RequestIntent | {
request: RequestIntent['request'];
resolve: null;
reject: null;
};
/**
* EIP-1898 support
* https://eips.ethereum.org/EIPS/eip-1898
*/
declare module '@ethersproject/providers' {
interface JsonRpcProvider {
getBalance(addressOrName: string | Promise, blockTag?: BlockTag | Promise): Promise;
getTransactionCount(addressOrName: string | Promise, blockTag?: BlockTag | Promise): Promise;
getCode(addressOrName: string | Promise, blockTag?: BlockTag | Promise): Promise;
getStorageAt(addressOrName: string | Promise, position: BigNumberish | Promise, blockTag?: BlockTag | Promise): Promise;
call(transaction: Deferrable, blockTag?: BlockTag | Promise): Promise;
}
}
export declare class ExtendedJsonRpcBatchProvider extends JsonRpcProvider {
protected _batchAggregator: NodeJS.Timer | null;
protected _queue: Queue;
protected _requestPolicy: RequestPolicy;
protected _concurrencyLimiter: LimitFunction;
protected _tickCounter: number;
protected _fetchMiddlewareService: MiddlewareService>;
protected _domain: string;
protected _eventEmitter: ExtendedJsonRpcBatchProviderEventEmitter;
protected _requestTimeoutMs?: number;
constructor(url: ConnectionInfo | string, network?: Networkish, requestPolicy?: RequestPolicy, fetchMiddlewares?: MiddlewareCallback>[], requestTimeoutMs?: number);
static _formatter: Formatter | null;
static getFormatter(): Formatter;
protected _batchAggregatorTick(): void;
protected _startBatchAggregator(): void;
getFeeHistory(blockCount: number, newestBlock?: string | null | number, rewardPercentiles?: number[]): Promise;
getDebugTraceBlockByHash(blockHash: string, traceConfig: TraceConfig): Promise;
prepareRequest(method: string, params: any): [string, Array];
use(callback: MiddlewareCallback>): void;
get domain(): string;
get eventEmitter(): ExtendedJsonRpcBatchProviderEventEmitter;
send(method: string, params: Array): Promise;
detectNetwork(): Promise;
protected fetchJson(connection: string | ConnectionInfo, json?: string, processFunc?: (value: any, response: FetchJsonResponse) => any): Promise;
}