Providers
A Provider is an abstraction of a connection to the Ethereum network, providing a concise, consistent interface to standard Ethereum node functionality.
This is achieved through the Middleware
trait, which provides the interface for the Ethereum JSON-RPC API and other helpful methods, explained in more detail in the Middleware chapter, and the Provider
struct, which implements Middleware
.
Data transports
A Provider
wraps a generic data transport P
, through which all JSON-RPC API calls are routed.
Ethers provides concrete transport implementations for HTTP, WebSockets, and IPC, as well as higher level transports which wrap a single or multiple transports. Of course, it is also possible to define custom data transports.
Transports implement the JsonRpcClient
trait, which defines a request
method, used for sending data to the underlying Ethereum node using JSON-RPC.
Transports can optionally implement the PubsubClient
trait, if they support the Publish-subscribe pattern, like Websockets
and IPC
. This is a supertrait of JsonRpcClient
. It defines the subscribe
and unsubscribe
methods.
The Provider type
This is the definition of the Provider
type:
#![allow(unused)] fn main() { #[derive(Clone, Debug)] pub struct Provider<P> { inner: P, ens: Option<Address>, interval: Option<Duration>, from: Option<Address>, node_client: Arc<Mutex<Option<NodeClient>>>, } }
inner
: stores the generic data transport, which sends the requests;ens
: optional override for the default ENS registry address;interval
: optional value that defines the polling interval forwatch_*
streams;from
: optional address that sets a defaultfrom
address when constructing calls and transactions;node_client
: the type of node the provider is connected to, like Geth, Erigon, etc.
Now that you have a basis for what the Provider
type actually is, the next few sections will walk through each implementation of the Provider
, starting with the HTTP provider.