> ## Documentation Index
> Fetch the complete documentation index at: https://docs.qu.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# JsonRpcApiProvider

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

## Extends

* [`AbstractProvider`](/sdk/content/classes/AbstractProvider)\<`C`>

## Extended by

* [`JsonRpcProvider`](/sdk/content/classes/JsonRpcProvider)
* [`BrowserProvider`](/sdk/content/classes/BrowserProvider)
* [`SocketProvider`](/sdk/content/classes/SocketProvider)

## Type parameters

| Type parameter | Value                                               |
| :------------- | :-------------------------------------------------- |
| `C`            | [`FetchRequest`](/sdk/content/classes/FetchRequest) |

## Constructors

### new JsonRpcApiProvider()

```ts theme={null}
new JsonRpcApiProvider<C>(network?, options?): JsonRpcApiProvider<C>
```

Creates a new JsonRpcApiProvider instance.

#### Parameters

| Parameter  | Type                                                                               | Description                   |
| :--------- | :--------------------------------------------------------------------------------- | :---------------------------- |
| `network`? | [`Networkish`](/sdk/content/type-aliases/Networkish)                               | The network to connect to.    |
| `options`? | [`JsonRpcApiProviderOptions`](/sdk/content/type-aliases/JsonRpcApiProviderOptions) | The options for the provider. |

#### Returns

[`JsonRpcApiProvider`](/sdk/content/classes/JsonRpcApiProvider)\<`C`>

#### Overrides

[`AbstractProvider`](/sdk/content/classes/AbstractProvider).[`constructor`](/sdk/content/classes/AbstractProvider#constructors)

#### Source

[providers/provider-jsonrpc.ts:784](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/provider-jsonrpc.ts#L784)

## Accessors

### connect

```ts theme={null}
get connect(): FetchRequest[]
```

Get the list of connected FetchRequests.

#### Returns

[`FetchRequest`](/sdk/content/classes/FetchRequest)\[]

The list of connected FetchRequests.

#### Source

[providers/abstract-provider.ts:1026](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/abstract-provider.ts#L1026)

***

### destroyed

```ts theme={null}
get destroyed(): boolean
```

If this provider has been destroyed using the [**destroy**](/sdk/content/classes/AbstractProvider#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.

#### Returns

`boolean`

#### Source

[providers/abstract-provider.ts:2545](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/abstract-provider.ts#L2545)

***

### paused

```ts theme={null}
get paused(): boolean
```

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.

#### Returns

`boolean`

Whether the provider is paused.

#### Source

[providers/abstract-provider.ts:2577](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/abstract-provider.ts#L2577)

***

### pollingInterval

```ts theme={null}
get pollingInterval(): number
```

Get the polling interval.

#### Returns

`number`

The polling interval.

#### Source

[providers/abstract-provider.ts:1183](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/abstract-provider.ts#L1183)

***

### provider

```ts theme={null}
get provider(): this
```

Returns `this`, to allow an **AbstractProvider** to implement the [Contract Runner](../classes/ContractRunner)
interface.

#### Returns

`this`

The provider instance.

#### Source

[providers/abstract-provider.ts:1193](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/abstract-provider.ts#L1193)

***

### ready

```ts theme={null}
get ready(): boolean
```

Returns true only if the JsonRpcApiProvider.\_start | **\_start** has been called.

#### Returns

`boolean`

True if the provider is ready.

#### Source

[providers/provider-jsonrpc.ts:1117](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/provider-jsonrpc.ts#L1117)

## Methods

### \_clearTimeout()

```ts theme={null}
_clearTimeout(timerId): void
```

Clear a timer created using the AbstractProvider.\_setTimeout | **\_setTimeout** method.

#### Parameters

| Parameter | Type     | Description                   |
| :-------- | :------- | :---------------------------- |
| `timerId` | `number` | The ID of the timer to clear. |

#### Returns

`void`

#### Inherited from

[`AbstractProvider`](/sdk/content/classes/AbstractProvider).[`_clearTimeout`](/sdk/content/classes/AbstractProvider#_cleartimeout)

#### Source

[providers/abstract-provider.ts:2221](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/abstract-provider.ts#L2221)

***

### destroy()

```ts theme={null}
destroy(): void
```

Destroys the provider, stopping all processing and canceling all pending requests.

#### Returns

`void`

#### Overrides

[`AbstractProvider`](/sdk/content/classes/AbstractProvider).[`destroy`](/sdk/content/classes/AbstractProvider#destroy)

#### Source

[providers/provider-jsonrpc.ts:1587](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/provider-jsonrpc.ts#L1587)

***

### getActiveRegions()

```ts theme={null}
getActiveRegions(): Promise<Shard[]>
```

Get the active region shards based on the protocol expansion number.

#### Returns

`Promise`\<[`Shard`](/sdk/content/enumerations/Shard)\[]>

A promise that resolves to the active shards.

#### Inherited from

[`AbstractProvider`](/sdk/content/classes/AbstractProvider).[`getActiveRegions`](/sdk/content/classes/AbstractProvider#getactiveregions)

#### Source

[providers/abstract-provider.ts:1110](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/abstract-provider.ts#L1110)

***

### getActiveZones()

```ts theme={null}
getActiveZones(): Promise<Zone[]>
```

Get the active zones for a shard based on the protocol expansion number.

#### Returns

`Promise`\<[`Zone`](/sdk/content/enumerations/Zone)\[]>

A promise that resolves to the active zones.

#### Inherited from

[`AbstractProvider`](/sdk/content/classes/AbstractProvider).[`getActiveZones`](/sdk/content/classes/AbstractProvider#getactivezones)

#### Source

[providers/abstract-provider.ts:1127](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/abstract-provider.ts#L1127)

***

### getLatestQiToQuaiRate()

```ts theme={null}
getLatestQiToQuaiRate(zone, amt?): Promise<bigint>
```

Get the latest Qi rate for a zone.

#### Parameters

| Parameter | Type                                     | Description                                    |
| :-------- | :--------------------------------------- | :--------------------------------------------- |
| `zone`    | [`Zone`](/sdk/content/enumerations/Zone) | The zone to get the rate for.                  |
| `amt`?    | `bigint`                                 | The amount to get the rate for. Default is `1` |

#### Returns

`Promise`\<`bigint`>

A promise that resolves to the latest Qi rate.

#### Inherited from

[`AbstractProvider`](/sdk/content/classes/AbstractProvider).[`getLatestQiToQuaiRate`](/sdk/content/classes/AbstractProvider#getlatestqitoquairate)

#### Source

[providers/abstract-provider.ts:1149](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/abstract-provider.ts#L1149)

***

### getLatestQuaiToQiRate()

```ts theme={null}
getLatestQuaiToQiRate(zone, amt?): Promise<bigint>
```

Get the latest Quai rate for a zone.

#### Parameters

| Parameter | Type                                     | Description                                             |
| :-------- | :--------------------------------------- | :------------------------------------------------------ |
| `zone`    | [`Zone`](/sdk/content/enumerations/Zone) | The zone to get the rate for.                           |
| `amt`?    | `bigint`                                 | The amount in quais to get the rate for. Default is `1` |

#### Returns

`Promise`\<`bigint`>

A promise that resolves to the latest Quai -> Qi rate for the given amount.

#### Inherited from

[`AbstractProvider`](/sdk/content/classes/AbstractProvider).[`getLatestQuaiToQiRate`](/sdk/content/classes/AbstractProvider#getlatestquaitoqirate)

#### Source

[providers/abstract-provider.ts:1068](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/abstract-provider.ts#L1068)

***

### getProtocolExpansionNumber()

```ts theme={null}
getProtocolExpansionNumber(): Promise<number>
```

Get the protocol expansion number.

#### Returns

`Promise`\<`number`>

A promise that resolves to the protocol expansion number.

#### Inherited from

[`AbstractProvider`](/sdk/content/classes/AbstractProvider).[`getProtocolExpansionNumber`](/sdk/content/classes/AbstractProvider#getprotocolexpansionnumber)

#### Source

[providers/abstract-provider.ts:1101](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/abstract-provider.ts#L1101)

***

### getQiToQuaiRateAtBlock()

```ts theme={null}
getQiToQuaiRateAtBlock(
   zone, 
   blockTag, 
amt?): Promise<bigint>
```

Get the Qi rate at a specific block.

#### Parameters

| Parameter  | Type                                             | Description                                    |
| :--------- | :----------------------------------------------- | :--------------------------------------------- |
| `zone`     | [`Zone`](/sdk/content/enumerations/Zone)         | The zone to get the rate for.                  |
| `blockTag` | [`BlockTag`](/sdk/content/type-aliases/BlockTag) | The block tag to get the rate at.              |
| `amt`?     | `bigint`                                         | The amount to get the rate for. Default is `1` |

#### Returns

`Promise`\<`bigint`>

A promise that resolves to the Qi rate at the specified block.

#### Inherited from

[`AbstractProvider`](/sdk/content/classes/AbstractProvider).[`getQiToQuaiRateAtBlock`](/sdk/content/classes/AbstractProvider#getqitoquairateatblock)

#### Source

[providers/abstract-provider.ts:1162](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/abstract-provider.ts#L1162)

***

### getQuaiToQiRateAtBlock()

```ts theme={null}
getQuaiToQiRateAtBlock(
   zone, 
   blockTag, 
amt?): Promise<bigint>
```

Get the Quai rate at a specific block.

#### Parameters

| Parameter  | Type                                             | Description                                    |
| :--------- | :----------------------------------------------- | :--------------------------------------------- |
| `zone`     | [`Zone`](/sdk/content/enumerations/Zone)         | The zone to get the rate for.                  |
| `blockTag` | [`BlockTag`](/sdk/content/type-aliases/BlockTag) | The block tag to get the rate at.              |
| `amt`?     | `bigint`                                         | The amount to get the rate for. Default is `1` |

#### Returns

`Promise`\<`bigint`>

A promise that resolves to the Quai rate at the specified block.

#### Inherited from

[`AbstractProvider`](/sdk/content/classes/AbstractProvider).[`getQuaiToQiRateAtBlock`](/sdk/content/classes/AbstractProvider#getquaitoqirateatblock)

#### Source

[providers/abstract-provider.ts:1081](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/abstract-provider.ts#L1081)

***

### getSigner()

```ts theme={null}
getSigner(address?): Promise<JsonRpcSigner>
```

Returns a JsonRpcSigner for the given address.

#### Parameters

| Parameter  | Type                 | Description                          |
| :--------- | :------------------- | :----------------------------------- |
| `address`? | `string` \| `number` | The address or index of the account. |

#### Returns

`Promise`\<[`JsonRpcSigner`](/sdk/content/classes/JsonRpcSigner)>

A promise that resolves to the JsonRpcSigner.

#### Throws

If the account is invalid.

#### Source

[providers/provider-jsonrpc.ts:1542](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/provider-jsonrpc.ts#L1542)

***

### initialize()

```ts theme={null}
initialize<U>(urls): Promise<void>
```

Initialize the URL map with the provided URLs.

#### Type parameters

| Type parameter | Value                                                              |
| :------------- | :----------------------------------------------------------------- |
| `U`            | `string`\[] \| [`FetchRequest`](/sdk/content/classes/FetchRequest) |

#### Parameters

| Parameter | Type | Description                          |
| :-------- | :--- | :----------------------------------- |
| `urls`    | `U`  | The URLs to initialize the map with. |

#### Returns

`Promise`\<`void`>

A promise that resolves when the map is initialized.

#### Inherited from

[`AbstractProvider`](/sdk/content/classes/AbstractProvider).[`initialize`](/sdk/content/classes/AbstractProvider#initialize)

#### Source

[providers/abstract-provider.ts:874](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/abstract-provider.ts#L874)

***

### listAccounts()

```ts theme={null}
listAccounts(): Promise<JsonRpcSigner[]>
```

Returns a list of JsonRpcSigners for all accounts.

#### Returns

`Promise`\<[`JsonRpcSigner`](/sdk/content/classes/JsonRpcSigner)\[]>

A promise that resolves to an array of JsonRpcSigners.

#### Source

[providers/provider-jsonrpc.ts:1579](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/provider-jsonrpc.ts#L1579)

***

### pause()

```ts theme={null}
pause(dropWhilePaused?): void
```

Pause the provider. If `dropWhilePaused`, any events that occur while paused are dropped, otherwise all events
will be emitted once the provider is unpaused.

#### Parameters

| Parameter          | Type      | Description                          |
| :----------------- | :-------- | :----------------------------------- |
| `dropWhilePaused`? | `boolean` | Whether to drop events while paused. |

#### Returns

`void`

#### Inherited from

[`AbstractProvider`](/sdk/content/classes/AbstractProvider).[`pause`](/sdk/content/classes/AbstractProvider#pause)

#### Source

[providers/abstract-provider.ts:2598](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/abstract-provider.ts#L2598)

***

### resume()

```ts theme={null}
resume(): void
```

Resume the provider.

#### Returns

`void`

#### Inherited from

[`AbstractProvider`](/sdk/content/classes/AbstractProvider).[`resume`](/sdk/content/classes/AbstractProvider#resume)

#### Source

[providers/abstract-provider.ts:2627](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/abstract-provider.ts#L2627)

***

### send()

```ts theme={null}
send(
   method, 
   params, 
   shard?, 
now?): Promise<any>
```

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 JsonRpcApiProvider.\_send | **\_send** or
force the options values in the call to the constructor to modify this method's behavior.

#### Parameters

| Parameter | Type                                       | Description                                    |
| :-------- | :----------------------------------------- | :--------------------------------------------- |
| `method`  | `string`                                   | The method to call.                            |
| `params`  | `any`\[] \| `Record`\<`string`, `any`>     | The parameters to pass to the method.          |
| `shard`?  | [`Shard`](/sdk/content/enumerations/Shard) | The shard to send the request to.              |
| `now`?    | `boolean`                                  | If true, the request will be sent immediately. |

#### Returns

`Promise`\<`any`>

A promise that resolves to the result of the method call.

#### Source

[providers/provider-jsonrpc.ts:1500](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/provider-jsonrpc.ts#L1500)

***

### shardFromHash()

```ts theme={null}
shardFromHash(hash): Shard
```

Get the shard from a hash.

#### Parameters

| Parameter | Type     | Description                     |
| :-------- | :------- | :------------------------------ |
| `hash`    | `string` | The hash to get the shard from. |

#### Returns

[`Shard`](/sdk/content/enumerations/Shard)

The shard.

#### Inherited from

[`AbstractProvider`](/sdk/content/classes/AbstractProvider).[`shardFromHash`](/sdk/content/classes/AbstractProvider#shardfromhash)

#### Source

[providers/abstract-provider.ts:1047](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/abstract-provider.ts#L1047)

***

### zoneFromAddress()

```ts theme={null}
zoneFromAddress(_address): Promise<Zone>
```

Get the zone from an address.

#### Parameters

| Parameter  | Type                                                   | Description                       |
| :--------- | :----------------------------------------------------- | :-------------------------------- |
| `_address` | [`AddressLike`](/sdk/content/type-aliases/AddressLike) | The address to get the zone from. |

#### Returns

`Promise`\<[`Zone`](/sdk/content/enumerations/Zone)>

A promise that resolves to the zone.

#### Inherited from

[`AbstractProvider`](/sdk/content/classes/AbstractProvider).[`zoneFromAddress`](/sdk/content/classes/AbstractProvider#zonefromaddress)

#### Source

[providers/abstract-provider.ts:1036](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/abstract-provider.ts#L1036)

***

### zoneFromHash()

```ts theme={null}
zoneFromHash(hash): Zone
```

Get the zone from a hash.

#### Parameters

| Parameter | Type     | Description                    |
| :-------- | :------- | :----------------------------- |
| `hash`    | `string` | The hash to get the zone from. |

#### Returns

[`Zone`](/sdk/content/enumerations/Zone)

The zone.

#### Inherited from

[`AbstractProvider`](/sdk/content/classes/AbstractProvider).[`zoneFromHash`](/sdk/content/classes/AbstractProvider#zonefromhash)

#### Source

[providers/abstract-provider.ts:1057](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/abstract-provider.ts#L1057)
