| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350 | /** *  One of the most common ways to interact with the blockchain is *  by a node running a JSON-RPC interface which can be connected to, *  based on the transport, using: * *  - HTTP or HTTPS - [[JsonRpcProvider]] *  - WebSocket - [[WebSocketProvider]] *  - IPC - [[IpcSocketProvider]] * * @_section: api/providers/jsonrpc:JSON-RPC Provider  [about-jsonrpcProvider] */import { FetchRequest } from "../utils/index.js";import { AbstractProvider } from "./abstract-provider.js";import { AbstractSigner } from "./abstract-signer.js";import { Network } from "./network.js";import type { TypedDataDomain, TypedDataField } from "../hash/index.js";import type { TransactionLike } from "../transaction/index.js";import type { PerformActionRequest, Subscriber, Subscription } from "./abstract-provider.js";import type { Networkish } from "./network.js";import type { Provider, TransactionRequest, TransactionResponse } from "./provider.js";import type { Signer } from "./signer.js";/** *  A JSON-RPC payload, which are sent to a JSON-RPC server. */export type JsonRpcPayload = {    /**     *  The JSON-RPC request ID.     */    id: number;    /**     *  The JSON-RPC request method.     */    method: string;    /**     *  The JSON-RPC request parameters.     */    params: Array<any> | Record<string, any>;    /**     *  A required constant in the JSON-RPC specification.     */    jsonrpc: "2.0";};/** *  A JSON-RPC result, which are returned on success from a JSON-RPC server. */export type JsonRpcResult = {    /**     *  The response ID to match it to the relevant request.     */    id: number;    /**     *  The response result.     */    result: any;};/** *  A JSON-RPC error, which are returned on failure from a JSON-RPC server. */export type JsonRpcError = {    /**     *  The response ID to match it to the relevant request.     */    id: number;    /**     *  The response error.     */    error: {        code: number;        message?: string;        data?: any;    };};/** *  When subscribing to the ``"debug"`` event, the [[Listener]] will *  receive this object as the first parameter. */export type DebugEventJsonRpcApiProvider = {    action: "sendRpcPayload";    payload: JsonRpcPayload | Array<JsonRpcPayload>;} | {    action: "receiveRpcResult";    result: Array<JsonRpcResult | JsonRpcError>;} | {    action: "receiveRpcError";    error: Error;};/** *  Options for configuring a [[JsonRpcApiProvider]]. Much of this *  is targetted towards sub-classes, which often will not expose *  any of these options to their consumers. * *  **``polling``** - use the polling strategy is used immediately *  for events; otherwise, attempt to use filters and fall back onto *  polling (default: ``false``) * *  **``staticNetwork``** - do not request chain ID on requests to *  validate the underlying chain has not changed (default: ``null``) * *  This should **ONLY** be used if it is **certain** that the network *  cannot change, such as when using INFURA (since the URL dictates the *  network). If the network is assumed static and it does change, this *  can have tragic consequences. For example, this **CANNOT** be used *  with MetaMask, since the user can select a new network from the *  drop-down at any time. * *  **``batchStallTime``** - how long (ms) to aggregate requests into a *  single batch. ``0`` indicates batching will only encompass the current *  event loop. If ``batchMaxCount = 1``, this is ignored. (default: ``10``) * *  **``batchMaxSize``** - target maximum size (bytes) to allow per batch *  request (default: 1Mb) * *  **``batchMaxCount``** - maximum number of requests to allow in a batch. *  If ``batchMaxCount = 1``, then batching is disabled. (default: ``100``) * *  **``cacheTimeout``** - passed as [[AbstractProviderOptions]]. */export type JsonRpcApiProviderOptions = {    polling?: boolean;    staticNetwork?: null | boolean | Network;    batchStallTime?: number;    batchMaxSize?: number;    batchMaxCount?: number;    cacheTimeout?: number;    pollingInterval?: number;};/** *  A **JsonRpcTransactionRequest** is formatted as needed by the JSON-RPC *  Ethereum API specification. */export interface JsonRpcTransactionRequest {    /**     *  The sender address to use when signing.     */    from?: string;    /**     *  The target address.     */    to?: string;    /**     *  The transaction data.     */    data?: string;    /**     *  The chain ID the transaction is valid on.     */    chainId?: string;    /**     *  The [[link-eip-2718]] transaction type.     */    type?: string;    /**     *  The maximum amount of gas to allow a transaction to consume.     *     *  In most other places in ethers, this is called ``gasLimit`` which     *  differs from the JSON-RPC Ethereum API specification.     */    gas?: string;    /**     *  The gas price per wei for transactions prior to [[link-eip-1559]].     */    gasPrice?: string;    /**     *  The maximum fee per gas for [[link-eip-1559]] transactions.     */    maxFeePerGas?: string;    /**     *  The maximum priority fee per gas for [[link-eip-1559]] transactions.     */    maxPriorityFeePerGas?: string;    /**     *  The nonce for the transaction.     */    nonce?: string;    /**     *  The transaction value (in wei).     */    value?: string;    /**     *  The transaction access list.     */    accessList?: Array<{        address: string;        storageKeys: Array<string>;    }>;}export declare class JsonRpcSigner extends AbstractSigner<JsonRpcApiProvider> {    address: string;    constructor(provider: JsonRpcApiProvider, address: string);    connect(provider: null | Provider): Signer;    getAddress(): Promise<string>;    populateTransaction(tx: TransactionRequest): Promise<TransactionLike<string>>;    sendUncheckedTransaction(_tx: TransactionRequest): Promise<string>;    sendTransaction(tx: TransactionRequest): Promise<TransactionResponse>;    signTransaction(_tx: TransactionRequest): Promise<string>;    signMessage(_message: string | Uint8Array): Promise<string>;    signTypedData(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, _value: Record<string, any>): Promise<string>;    unlock(password: string): Promise<boolean>;    _legacySignMessage(_message: string | Uint8Array): Promise<string>;}/** *  The JsonRpcApiProvider is an abstract class and **MUST** be *  sub-classed. * *  It provides the base for all JSON-RPC-based Provider interaction. * *  Sub-classing Notes: *  - a sub-class MUST override _send *  - a sub-class MUST call the `_start()` method once connected */export declare abstract class JsonRpcApiProvider extends AbstractProvider {    #private;    constructor(network?: Networkish, options?: JsonRpcApiProviderOptions);    /**     *  Returns the value associated with the option %%key%%.     *     *  Sub-classes can use this to inquire about configuration options.     */    _getOption<K extends keyof JsonRpcApiProviderOptions>(key: K): JsonRpcApiProviderOptions[K];    /**     *  Gets the [[Network]] this provider has committed to. On each call, the network     *  is detected, and if it has changed, the call will reject.     */    get _network(): Network;    /**     *  Sends a JSON-RPC %%payload%% (or a batch) to the underlying channel.     *     *  Sub-classes **MUST** override this.     */    abstract _send(payload: JsonRpcPayload | Array<JsonRpcPayload>): Promise<Array<JsonRpcResult | JsonRpcError>>;    /**     *  Resolves to the non-normalized value by performing %%req%%.     *     *  Sub-classes may override this to modify behavior of actions,     *  and should generally call ``super._perform`` as a fallback.     */    _perform(req: PerformActionRequest): Promise<any>;    /**     *  Sub-classes may override this; it detects the *actual* network that     *  we are **currently** connected to.     *     *  Keep in mind that [[send]] may only be used once [[ready]], otherwise the     *  _send primitive must be used instead.     */    _detectNetwork(): Promise<Network>;    /**     *  Sub-classes **MUST** call this. Until [[_start]] has been called, no calls     *  will be passed to [[_send]] from [[send]]. If it is overridden, then     *  ``super._start()`` **MUST** be called.     *     *  Calling it multiple times is safe and has no effect.     */    _start(): void;    /**     *  Resolves once the [[_start]] has been called. This can be used in     *  sub-classes to defer sending data until the connection has been     *  established.     */    _waitUntilReady(): Promise<void>;    /**     *  Return a Subscriber that will manage the %%sub%%.     *     *  Sub-classes may override this to modify the behavior of     *  subscription management.     */    _getSubscriber(sub: Subscription): Subscriber;    /**     *  Returns true only if the [[_start]] has been called.     */    get ready(): boolean;    /**     *  Returns %%tx%% as a normalized JSON-RPC transaction request,     *  which has all values hexlified and any numeric values converted     *  to Quantity values.     */    getRpcTransaction(tx: TransactionRequest): JsonRpcTransactionRequest;    /**     *  Returns the request method and arguments required to perform     *  %%req%%.     */    getRpcRequest(req: PerformActionRequest): null | {        method: string;        args: Array<any>;    };    /**     *  Returns an ethers-style Error for the given JSON-RPC error     *  %%payload%%, coalescing the various strings and error shapes     *  that different nodes return, coercing them into a machine-readable     *  standardized error.     */    getRpcError(payload: JsonRpcPayload, _error: JsonRpcError): Error;    /**     *  Requests the %%method%% with %%params%% via the JSON-RPC protocol     *  over the underlying channel. This can be used to call methods     *  on the backend that do not have a high-level API within the Provider     *  API.     *     *  This method queues requests according to the batch constraints     *  in the options, assigns the request a unique ID.     *     *  **Do NOT override** this method in sub-classes; instead     *  override [[_send]] or force the options values in the     *  call to the constructor to modify this method's behavior.     */    send(method: string, params: Array<any> | Record<string, any>): Promise<any>;    /**     *  Resolves to the [[Signer]] account for  %%address%% managed by     *  the client.     *     *  If the %%address%% is a number, it is used as an index in the     *  the accounts from [[listAccounts]].     *     *  This can only be used on clients which manage accounts (such as     *  Geth with imported account or MetaMask).     *     *  Throws if the account doesn't exist.     */    getSigner(address?: number | string): Promise<JsonRpcSigner>;    listAccounts(): Promise<Array<JsonRpcSigner>>;    destroy(): void;}/** *  @_ignore: */export declare abstract class JsonRpcApiPollingProvider extends JsonRpcApiProvider {    #private;    constructor(network?: Networkish, options?: JsonRpcApiProviderOptions);    _getSubscriber(sub: Subscription): Subscriber;    /**     *  The polling interval (default: 4000 ms)     */    get pollingInterval(): number;    set pollingInterval(value: number);}/** *  The JsonRpcProvider is one of the most common Providers, *  which performs all operations over HTTP (or HTTPS) requests. * *  Events are processed by polling the backend for the current block *  number; when it advances, all block-base events are then checked *  for updates. */export declare class JsonRpcProvider extends JsonRpcApiPollingProvider {    #private;    constructor(url?: string | FetchRequest, network?: Networkish, options?: JsonRpcApiProviderOptions);    _getConnection(): FetchRequest;    send(method: string, params: Array<any> | Record<string, any>): Promise<any>;    _send(payload: JsonRpcPayload | Array<JsonRpcPayload>): Promise<Array<JsonRpcResult>>;}//# sourceMappingURL=provider-jsonrpc.d.ts.map
 |