| 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
 
 
  |