/** * About Subclassing the Provider... * * @_section: api/providers/abstract-provider: Subclassing Provider [abstract-provider] */ import { FetchRequest } from "../utils/index.js"; import { EnsResolver } from "./ens-resolver.js"; import { Network } from "./network.js"; import { Block, FeeData, Log, TransactionReceipt, TransactionResponse } from "./provider.js"; import type { AddressLike } from "../address/index.js"; import type { BigNumberish } from "../utils/index.js"; import type { Listener } from "../utils/index.js"; import type { Networkish } from "./network.js"; import type { BlockParams, LogParams, TransactionReceiptParams, TransactionResponseParams } from "./formatting.js"; import type { BlockTag, EventFilter, Filter, FilterByBlockHash, OrphanFilter, PreparedTransactionRequest, Provider, ProviderEvent, TransactionRequest } from "./provider.js"; export type DebugEventAbstractProvider = { action: "sendCcipReadFetchRequest"; request: FetchRequest; index: number; urls: Array; } | { action: "receiveCcipReadFetchResult"; request: FetchRequest; result: any; } | { action: "receiveCcipReadFetchError"; request: FetchRequest; result: any; } | { action: "sendCcipReadCall"; transaction: { to: string; data: string; }; } | { action: "receiveCcipReadCallResult"; transaction: { to: string; data: string; }; result: string; } | { action: "receiveCcipReadCallError"; transaction: { to: string; data: string; }; error: Error; }; export type Subscription = { type: "block" | "close" | "debug" | "network" | "pending"; tag: string; } | { type: "transaction"; tag: string; hash: string; } | { type: "event"; tag: string; filter: EventFilter; } | { type: "orphan"; tag: string; filter: OrphanFilter; }; export interface Subscriber { start(): void; stop(): void; pause(dropWhilePaused?: boolean): void; resume(): void; pollingInterval?: number; } export declare class UnmanagedSubscriber implements Subscriber { name: string; constructor(name: string); start(): void; stop(): void; pause(dropWhilePaused?: boolean): void; resume(): void; } export interface AbstractProviderPlugin { readonly name: string; connect(provider: AbstractProvider): AbstractProviderPlugin; } export type PerformActionFilter = { address?: string | Array; topics?: Array>; fromBlock?: BlockTag; toBlock?: BlockTag; } | { address?: string | Array; topics?: Array>; blockHash?: string; }; export interface PerformActionTransaction extends PreparedTransactionRequest { to?: string; from?: string; } export type PerformActionRequest = { method: "broadcastTransaction"; signedTransaction: string; } | { method: "call"; transaction: PerformActionTransaction; blockTag: BlockTag; } | { method: "chainId"; } | { method: "estimateGas"; transaction: PerformActionTransaction; } | { method: "getBalance"; address: string; blockTag: BlockTag; } | { method: "getBlock"; blockTag: BlockTag; includeTransactions: boolean; } | { method: "getBlock"; blockHash: string; includeTransactions: boolean; } | { method: "getBlockNumber"; } | { method: "getCode"; address: string; blockTag: BlockTag; } | { method: "getGasPrice"; } | { method: "getLogs"; filter: PerformActionFilter; } | { method: "getStorage"; address: string; position: bigint; blockTag: BlockTag; } | { method: "getTransaction"; hash: string; } | { method: "getTransactionCount"; address: string; blockTag: BlockTag; } | { method: "getTransactionReceipt"; hash: string; } | { method: "getTransactionResult"; hash: string; }; export declare class AbstractProvider implements Provider { #private; constructor(_network?: "any" | Networkish); get provider(): this; get plugins(): Array; attachPlugin(plugin: AbstractProviderPlugin): this; getPlugin(name: string): null | T; get disableCcipRead(): boolean; set disableCcipRead(value: boolean); ccipReadFetch(tx: PerformActionTransaction, calldata: string, urls: Array): Promise; _wrapBlock(value: BlockParams, network: Network): Block; _wrapLog(value: LogParams, network: Network): Log; _wrapTransactionReceipt(value: TransactionReceiptParams, network: Network): TransactionReceipt; _wrapTransactionResponse(tx: TransactionResponseParams, network: Network): TransactionResponse; _detectNetwork(): Promise; _perform(req: PerformActionRequest): Promise; getBlockNumber(): Promise; _getAddress(address: AddressLike): string | Promise; _getBlockTag(blockTag?: BlockTag): string | Promise; _getFilter(filter: Filter | FilterByBlockHash): PerformActionFilter | Promise; _getTransactionRequest(_request: TransactionRequest): PerformActionTransaction | Promise; getNetwork(): Promise; getFeeData(): Promise; estimateGas(_tx: TransactionRequest): Promise; call(_tx: TransactionRequest): Promise; getBalance(address: AddressLike, blockTag?: BlockTag): Promise; getTransactionCount(address: AddressLike, blockTag?: BlockTag): Promise; getCode(address: AddressLike, blockTag?: BlockTag): Promise; getStorage(address: AddressLike, _position: BigNumberish, blockTag?: BlockTag): Promise; broadcastTransaction(signedTx: string): Promise; getBlock(block: BlockTag | string, prefetchTxs?: boolean): Promise; getTransaction(hash: string): Promise; getTransactionReceipt(hash: string): Promise; getTransactionResult(hash: string): Promise; getLogs(_filter: Filter | FilterByBlockHash): Promise>; _getProvider(chainId: number): AbstractProvider; getResolver(name: string): Promise; getAvatar(name: string): Promise; resolveName(name: string): Promise; lookupAddress(address: string): Promise; waitForTransaction(hash: string, _confirms?: null | number, timeout?: null | number): Promise; waitForBlock(blockTag?: BlockTag): Promise; _clearTimeout(timerId: number): void; _setTimeout(_func: () => void, timeout?: number): number; _forEachSubscriber(func: (s: Subscriber) => void): void; _getSubscriber(sub: Subscription): Subscriber; _recoverSubscriber(oldSub: Subscriber, newSub: Subscriber): void; on(event: ProviderEvent, listener: Listener): Promise; once(event: ProviderEvent, listener: Listener): Promise; emit(event: ProviderEvent, ...args: Array): Promise; listenerCount(event?: ProviderEvent): Promise; listeners(event?: ProviderEvent): Promise>; off(event: ProviderEvent, listener?: Listener): Promise; removeAllListeners(event?: ProviderEvent): Promise; addListener(event: ProviderEvent, listener: Listener): Promise; removeListener(event: ProviderEvent, listener: Listener): Promise; destroy(): void; get paused(): boolean; set paused(pause: boolean); pause(dropWhilePaused?: boolean): void; resume(): void; }