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

# AbstractProvider

An **AbstractProvider** provides a base class for other sub-classes to implement the [**Provider**](/sdk/content/interfaces/Provider)
API by normalizing input arguments and formatting output results as well as tracking events for consistent behaviour
on an eventually-consistent network.

## Extended by

* [`JsonRpcApiProvider`](/sdk/content/classes/JsonRpcApiProvider)

## Type parameters

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

## Implements

* [`Provider`](/sdk/content/interfaces/Provider)

## Constructors

### new AbstractProvider()

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

Create a new **AbstractProvider** connected to `network`, or use the various network detection capabilities to
discover the [**Network**](/sdk/content/classes/Network) if necessary.

#### Parameters

| Parameter   | Type                                                 | Description                              |
| :---------- | :--------------------------------------------------- | :--------------------------------------- |
| `_network`? | [`Networkish`](/sdk/content/type-aliases/Networkish) | The network to connect to, or `"any"` to |
| `options`?  | `AbstractProviderOptions`                            | The options to configure the provider.   |

#### Returns

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

#### Source

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

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

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

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

Sub-classes may use this to shutdown any sockets or release their resources and reject any pending requests.

Sub-classes **must** call `super.destroy()`.

#### Returns

`void`

#### Implementation of

[`Provider`](/sdk/content/interfaces/Provider).[`destroy`](/sdk/content/interfaces/Provider#destroy)

#### Source

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

***

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

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

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

#### Implementation of

[`Provider`](/sdk/content/interfaces/Provider).[`getLatestQiToQuaiRate`](/sdk/content/interfaces/Provider#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.

#### Implementation of

[`Provider`](/sdk/content/interfaces/Provider).[`getLatestQuaiToQiRate`](/sdk/content/interfaces/Provider#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.

#### Implementation of

[`Provider`](/sdk/content/interfaces/Provider).[`getProtocolExpansionNumber`](/sdk/content/interfaces/Provider#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.

#### Implementation of

[`Provider`](/sdk/content/interfaces/Provider).[`getQiToQuaiRateAtBlock`](/sdk/content/interfaces/Provider#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.

#### Implementation of

[`Provider`](/sdk/content/interfaces/Provider).[`getQuaiToQiRateAtBlock`](/sdk/content/interfaces/Provider#getquaitoqirateatblock)

#### Source

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

***

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

#### Source

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

***

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

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

#### Source

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

***

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

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

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

#### Source

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