-----
Documentation: [html](https://docs.ethers.io/)
-----
Other Providers
===============
FallbackProvider
----------------
#### **new ***ethers* . *providers* . **FallbackProvider**( providers [ , quorum ] )
Creates a new instance of a FallbackProvider connected to *providers*. If quorum is not specified, half of the total sum of the provider weights is used.
The *providers* can be either an array of [Provider](/v5/api/providers/provider/) or [FallbackProviderConfig](/v5/api/providers/other/#FallbackProviderConfig). If a [Provider](/v5/api/providers/provider/) is provided, the defaults are a priority of 1 and a weight of 1.
#### *provider* . **providerConfigs** => *Array< [FallbackProviderConfig](/v5/api/providers/other/#FallbackProviderConfig) >*
The list of Provider Configurations that describe the backends.
#### *provider* . **quorum** => *number*
The quorum the backend responses must agree upon before a result will be resolved. By default this is *half the sum of the weights*.
### FallbackProviderConfig
#### *fallbackProviderConfig* . **provider** => *[Provider](/v5/api/providers/provider/)*
The provider for this configuration.
#### *fallbackProviderConfig* . **priority** => *number*
The priority used for the provider. Higher priorities are favoured over lower priorities. If multiple providers share the same priority, they are chosen at random.
#### *fallbackProviderConfig* . **stallTimeout** => *number*
The timeout (in ms) after which another [Provider](/v5/api/providers/provider/) will be attempted. This does not affect the current Provider; if it returns a result it is counted as part of the quorum.
Lower values will result in more network traffic, but may reduce the response time of requests.
#### *fallbackProviderConfig* . **weight** => *number*
The weight a response from this provider provides. This can be used if a given [Provider](/v5/api/providers/provider/) is more trusted, for example.
IpcProvider
-----------
#### *ipcProvider* . **path** => *string*
The path this [Provider](/v5/api/providers/provider/) is connected to.
UrlJsonRpcProvider
------------------
#### **new ***ethers* . *providers* . **UrlJsonRpcProvider**( [ network [ , apiKey ] ] )
Sub-classes do not need to override this. Instead they should override the static method `getUrl` and optionally `getApiKey`.
#### *urlJsonRpcProvider* . **apiKey** => *any*
The value of the apiKey that was returned from `InheritedClass.getApiKey`.
#### *InheritingClass* . **getApiKey**( apiKey ) => *any*
This function should examine the *apiKey* to ensure it is valid and return a (possible modified) value to use in `getUrl`.
#### *InheritingClass* . **getUrl**( network , apiKey ) => *string*
The URL to use for the JsonRpcProvider instance.
Web3Provider
------------
#### **new ***ethers* . *providers* . **Web3Provider**( externalProvider [ , network ] )
Create a new **Web3Provider**, which wraps an [EIP-1193 Provider](https://eips.ethereum.org/EIPS/eip-1193) or Web3Provider-compatible Provider.
#### *web3Provider* . **provider** => *Web3CompatibleProvider*
The provider used to create this instance.
### ExternalProvider
#### *externalProvider* . **request**( request ) => *Promise< any >*
This follows the [EIP-1193](https://eips.ethereum.org/EIPS/eip-1193) API signature.
The *request* should be a standard JSON-RPC payload, which should at a minimum specify the `method` and `params`.
The result should be the actual result, which differs from the Web3.js response, which is a wrapped JSON-RPC response.
#### *externalProvider* . **sendAsync**( request , callback ) => *void*
This follows the [Web3.js Provider Signature](https://github.com/ethereum/web3.js/blob/1.x/packages/web3-providers-http/types/index.d.ts#L57).
The *request* should be a standard JSON-RPC payload, which should at a minimum specify the `method` and `params`.
The *callback* should use the error-first calling semantics, so `(error, result)` where the result is a JSON-RPC wrapped result.
#### *externalProvider* . **send**( request , callback ) => *void*
This is identical to `sendAsync`. Historically, this used a synchronous web request, but no current browsers support this, so its use this way was deprecated quite a long time ago
WebSocketProvider
-----------------
#### **new ***ethers* . *provider* . **WebSocketProvider**( [ url [ , network ] ] )
Returns a new [WebSocketProvider](/v5/api/providers/other/#WebSocketProvider) connected to *url* as the *network*.
If *url* is unspecified, the default `"ws://localhost:8546"` will be used. If *network* is unspecified, it will be queried from the network.