123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451 |
- /**
- * The available providers should suffice for most developers purposes,
- * but the [[AbstractProvider]] class has many features which enable
- * sub-classing it for specific purposes.
- *
- * @_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";
- /**
- * The types of additional event values that can be emitted for the
- * ``"debug"`` event.
- */
- export type DebugEventAbstractProvider = {
- action: "sendCcipReadFetchRequest";
- request: FetchRequest;
- index: number;
- urls: Array<string>;
- } | {
- 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;
- };
- /**
- * The value passed to the [[AbstractProvider-_getSubscriber]] method.
- *
- * Only developers sub-classing [[AbstractProvider[[ will care about this,
- * if they are modifying a low-level feature of how subscriptions operate.
- */
- export type Subscription = {
- type: "block" | "close" | "debug" | "error" | "finalized" | "network" | "pending" | "safe";
- tag: string;
- } | {
- type: "transaction";
- tag: string;
- hash: string;
- } | {
- type: "event";
- tag: string;
- filter: EventFilter;
- } | {
- type: "orphan";
- tag: string;
- filter: OrphanFilter;
- };
- /**
- * A **Subscriber** manages a subscription.
- *
- * Only developers sub-classing [[AbstractProvider[[ will care about this,
- * if they are modifying a low-level feature of how subscriptions operate.
- */
- export interface Subscriber {
- /**
- * Called initially when a subscriber is added the first time.
- */
- start(): void;
- /**
- * Called when there are no more subscribers to the event.
- */
- stop(): void;
- /**
- * Called when the subscription should pause.
- *
- * If %%dropWhilePaused%%, events that occur while paused should not
- * be emitted [[resume]].
- */
- pause(dropWhilePaused?: boolean): void;
- /**
- * Resume a paused subscriber.
- */
- resume(): void;
- /**
- * The frequency (in ms) to poll for events, if polling is used by
- * the subscriber.
- *
- * For non-polling subscribers, this must return ``undefined``.
- */
- pollingInterval?: number;
- }
- /**
- * An **UnmanagedSubscriber** is useful for events which do not require
- * any additional management, such as ``"debug"`` which only requires
- * emit in synchronous event loop triggered calls.
- */
- export declare class UnmanagedSubscriber implements Subscriber {
- /**
- * The name fof the event.
- */
- name: string;
- /**
- * Create a new UnmanagedSubscriber with %%name%%.
- */
- constructor(name: string);
- start(): void;
- stop(): void;
- pause(dropWhilePaused?: boolean): void;
- resume(): void;
- }
- /**
- * An **AbstractPlugin** is used to provide additional internal services
- * to an [[AbstractProvider]] without adding backwards-incompatible changes
- * to method signatures or other internal and complex logic.
- */
- export interface AbstractProviderPlugin {
- /**
- * The reverse domain notation of the plugin.
- */
- readonly name: string;
- /**
- * Creates a new instance of the plugin, connected to %%provider%%.
- */
- connect(provider: AbstractProvider): AbstractProviderPlugin;
- }
- /**
- * A normalized filter used for [[PerformActionRequest]] objects.
- */
- export type PerformActionFilter = {
- address?: string | Array<string>;
- topics?: Array<null | string | Array<string>>;
- fromBlock?: BlockTag;
- toBlock?: BlockTag;
- } | {
- address?: string | Array<string>;
- topics?: Array<null | string | Array<string>>;
- blockHash?: string;
- };
- /**
- * A normalized transactions used for [[PerformActionRequest]] objects.
- */
- export interface PerformActionTransaction extends PreparedTransactionRequest {
- /**
- * The ``to`` address of the transaction.
- */
- to?: string;
- /**
- * The sender of the transaction.
- */
- from?: string;
- }
- /**
- * The [[AbstractProvider]] methods will normalize all values and pass this
- * type to [[AbstractProvider-_perform]].
- */
- 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: "getPriorityFee";
- } | {
- 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;
- };
- /**
- * Options for configuring some internal aspects of an [[AbstractProvider]].
- *
- * **``cacheTimeout``** - how long to cache a low-level ``_perform``
- * for, based on input parameters. This reduces the number of calls
- * to getChainId and getBlockNumber, but may break test chains which
- * can perform operations (internally) synchronously. Use ``-1`` to
- * disable, ``0`` will only buffer within the same event loop and
- * any other value is in ms. (default: ``250``)
- */
- export type AbstractProviderOptions = {
- cacheTimeout?: number;
- pollingInterval?: number;
- };
- /**
- * An **AbstractProvider** provides a base class for other sub-classes to
- * implement the [[Provider]] API by normalizing input arguments and
- * formatting output results as well as tracking events for consistent
- * behaviour on an eventually-consistent network.
- */
- export declare class AbstractProvider implements Provider {
- #private;
- /**
- * Create a new **AbstractProvider** connected to %%network%%, or
- * use the various network detection capabilities to discover the
- * [[Network]] if necessary.
- */
- constructor(_network?: "any" | Networkish, options?: AbstractProviderOptions);
- get pollingInterval(): number;
- /**
- * Returns ``this``, to allow an **AbstractProvider** to implement
- * the [[ContractRunner]] interface.
- */
- get provider(): this;
- /**
- * Returns all the registered plug-ins.
- */
- get plugins(): Array<AbstractProviderPlugin>;
- /**
- * Attach a new plug-in.
- */
- attachPlugin(plugin: AbstractProviderPlugin): this;
- /**
- * Get a plugin by name.
- */
- getPlugin<T extends AbstractProviderPlugin = AbstractProviderPlugin>(name: string): null | T;
- /**
- * Prevent any CCIP-read operation, regardless of whether requested
- * in a [[call]] using ``enableCcipRead``.
- */
- get disableCcipRead(): boolean;
- set disableCcipRead(value: boolean);
- /**
- * Resolves to the data for executing the CCIP-read operations.
- */
- ccipReadFetch(tx: PerformActionTransaction, calldata: string, urls: Array<string>): Promise<null | string>;
- /**
- * Provides the opportunity for a sub-class to wrap a block before
- * returning it, to add additional properties or an alternate
- * sub-class of [[Block]].
- */
- _wrapBlock(value: BlockParams, network: Network): Block;
- /**
- * Provides the opportunity for a sub-class to wrap a log before
- * returning it, to add additional properties or an alternate
- * sub-class of [[Log]].
- */
- _wrapLog(value: LogParams, network: Network): Log;
- /**
- * Provides the opportunity for a sub-class to wrap a transaction
- * receipt before returning it, to add additional properties or an
- * alternate sub-class of [[TransactionReceipt]].
- */
- _wrapTransactionReceipt(value: TransactionReceiptParams, network: Network): TransactionReceipt;
- /**
- * Provides the opportunity for a sub-class to wrap a transaction
- * response before returning it, to add additional properties or an
- * alternate sub-class of [[TransactionResponse]].
- */
- _wrapTransactionResponse(tx: TransactionResponseParams, network: Network): TransactionResponse;
- /**
- * Resolves to the Network, forcing a network detection using whatever
- * technique the sub-class requires.
- *
- * Sub-classes **must** override this.
- */
- _detectNetwork(): Promise<Network>;
- /**
- * Sub-classes should use this to perform all built-in operations. All
- * methods sanitizes and normalizes the values passed into this.
- *
- * Sub-classes **must** override this.
- */
- _perform<T = any>(req: PerformActionRequest): Promise<T>;
- getBlockNumber(): Promise<number>;
- /**
- * Returns or resolves to the address for %%address%%, resolving ENS
- * names and [[Addressable]] objects and returning if already an
- * address.
- */
- _getAddress(address: AddressLike): string | Promise<string>;
- /**
- * Returns or resolves to a valid block tag for %%blockTag%%, resolving
- * negative values and returning if already a valid block tag.
- */
- _getBlockTag(blockTag?: BlockTag): string | Promise<string>;
- /**
- * Returns or resolves to a filter for %%filter%%, resolving any ENS
- * names or [[Addressable]] object and returning if already a valid
- * filter.
- */
- _getFilter(filter: Filter | FilterByBlockHash): PerformActionFilter | Promise<PerformActionFilter>;
- /**
- * Returns or resolves to a transaction for %%request%%, resolving
- * any ENS names or [[Addressable]] and returning if already a valid
- * transaction.
- */
- _getTransactionRequest(_request: TransactionRequest): PerformActionTransaction | Promise<PerformActionTransaction>;
- getNetwork(): Promise<Network>;
- getFeeData(): Promise<FeeData>;
- estimateGas(_tx: TransactionRequest): Promise<bigint>;
- call(_tx: TransactionRequest): Promise<string>;
- getBalance(address: AddressLike, blockTag?: BlockTag): Promise<bigint>;
- getTransactionCount(address: AddressLike, blockTag?: BlockTag): Promise<number>;
- getCode(address: AddressLike, blockTag?: BlockTag): Promise<string>;
- getStorage(address: AddressLike, _position: BigNumberish, blockTag?: BlockTag): Promise<string>;
- broadcastTransaction(signedTx: string): Promise<TransactionResponse>;
- getBlock(block: BlockTag | string, prefetchTxs?: boolean): Promise<null | Block>;
- getTransaction(hash: string): Promise<null | TransactionResponse>;
- getTransactionReceipt(hash: string): Promise<null | TransactionReceipt>;
- getTransactionResult(hash: string): Promise<null | string>;
- getLogs(_filter: Filter | FilterByBlockHash): Promise<Array<Log>>;
- _getProvider(chainId: number): AbstractProvider;
- getResolver(name: string): Promise<null | EnsResolver>;
- getAvatar(name: string): Promise<null | string>;
- resolveName(name: string): Promise<null | string>;
- lookupAddress(address: string): Promise<null | string>;
- waitForTransaction(hash: string, _confirms?: null | number, timeout?: null | number): Promise<null | TransactionReceipt>;
- waitForBlock(blockTag?: BlockTag): Promise<Block>;
- /**
- * Clear a timer created using the [[_setTimeout]] method.
- */
- _clearTimeout(timerId: number): void;
- /**
- * Create a timer that will execute %%func%% after at least %%timeout%%
- * (in ms). If %%timeout%% is unspecified, then %%func%% will execute
- * in the next event loop.
- *
- * [Pausing](AbstractProvider-paused) the provider will pause any
- * associated timers.
- */
- _setTimeout(_func: () => void, timeout?: number): number;
- /**
- * Perform %%func%% on each subscriber.
- */
- _forEachSubscriber(func: (s: Subscriber) => void): void;
- /**
- * Sub-classes may override this to customize subscription
- * implementations.
- */
- _getSubscriber(sub: Subscription): Subscriber;
- /**
- * If a [[Subscriber]] fails and needs to replace itself, this
- * method may be used.
- *
- * For example, this is used for providers when using the
- * ``eth_getFilterChanges`` method, which can return null if state
- * filters are not supported by the backend, allowing the Subscriber
- * to swap in a [[PollingEventSubscriber]].
- */
- _recoverSubscriber(oldSub: Subscriber, newSub: Subscriber): void;
- on(event: ProviderEvent, listener: Listener): Promise<this>;
- once(event: ProviderEvent, listener: Listener): Promise<this>;
- emit(event: ProviderEvent, ...args: Array<any>): Promise<boolean>;
- listenerCount(event?: ProviderEvent): Promise<number>;
- listeners(event?: ProviderEvent): Promise<Array<Listener>>;
- off(event: ProviderEvent, listener?: Listener): Promise<this>;
- removeAllListeners(event?: ProviderEvent): Promise<this>;
- addListener(event: ProviderEvent, listener: Listener): Promise<this>;
- removeListener(event: ProviderEvent, listener: Listener): Promise<this>;
- /**
- * If this provider has been destroyed using the [[destroy]] method.
- *
- * Once destroyed, all resources are reclaimed, internal event loops
- * and timers are cleaned up and no further requests may be sent to
- * the provider.
- */
- get destroyed(): boolean;
- /**
- * Sub-classes may use this to shutdown any sockets or release their
- * resources and reject any pending requests.
- *
- * Sub-classes **must** call ``super.destroy()``.
- */
- destroy(): void;
- /**
- * Whether the provider is currently paused.
- *
- * A paused provider will not emit any events, and generally should
- * not make any requests to the network, but that is up to sub-classes
- * to manage.
- *
- * Setting ``paused = true`` is identical to calling ``.pause(false)``,
- * which will buffer any events that occur while paused until the
- * provider is unpaused.
- */
- get paused(): boolean;
- set paused(pause: boolean);
- /**
- * Pause the provider. If %%dropWhilePaused%%, any events that occur
- * while paused are dropped, otherwise all events will be emitted once
- * the provider is unpaused.
- */
- pause(dropWhilePaused?: boolean): void;
- /**
- * Resume the provider.
- */
- resume(): void;
- }
- //# sourceMappingURL=abstract-provider.d.ts.map
|