Clients for interacting with Ethereum nodes

This crate provides asynchronous Ethereum JSON-RPC compliant clients.

For more documentation on the available calls, refer to the Provider struct.

Examples

```norun use etherscore::types::Address; use ethers_providers::{Provider, Http, Middleware}; use std::convert::TryFrom;

async fn foo() -> Result<(), Box> {

let provider = Provider::::tryfrom( "https://mainnet.infura.io/v3/YOURAPI_KEY" )?;

let block = provider.getblock(100u64).await?; println!("Got block: {}", serdejson::to_string(&block)?);

let addr = "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359".parse::

()?; let code = provider.getcode(addr, None).await?; println!("Got code: {}", serdejson::to_string(&code)?);

Ok(())

}

```

Websockets

The crate has support for WebSockets via Tokio. Please ensure that you have the "ws" and "rustls" / "openssl" features enabled if you wish to use WebSockets.

```

async fn foo() -> Result<(), Box> {

use ethers_providers::Ws;

let ws = Ws::connect("ws://localhost:8545").await?;

Ok(())

}

```

Ethereum Name Service

The provider may also be used to resolve Ethereum Name Service (ENS) names to addresses (and vice versa). The default ENS address is mainnet and can be overriden by calling the ens method on the provider.

```no_run

use ethers_providers::{Provider, Http, Middleware};

use std::convert::TryFrom;

async fn foo() -> Result<(), Box> {

let provider = Provider::::try_from(

"https://mainnet.infura.io/v3/YOURAPIKEY"

)?;

// Resolve ENS name to Address let name = "vitalik.eth"; let address = provider.resolve_name(name).await?;

// Lookup ENS name given Address let resolvedname = provider.lookupaddress(address).await?; asserteq!(name, resolvedname);

/// Lookup ENS field let url = "https://vitalik.ca".tostring(); let resolvedurl = provider.resolvefield(name, "url").await?; asserteq!(url, resolved_url);

/// Lookup and resolve ENS avatar let avatar = "https://ipfs.io/ipfs/QmSP4nq9fnN9dAiCj42ug9Wa79rqmQerZXZch82VqpiH7U/image.gif".tostring(); let resolvedavatar = provider.resolveavatar(name).await?; asserteq!(avatar, resolvedavatar.tostring());

Ok(())

}

```