/// 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; }