Ethereum JSON-RPC multi-transport client. Rust implementation of Web3.js library.
Documentation: crates.io
First, add this to your Cargo.toml:
[dependencies]
web3 = "0.16.0"#[tokio::main]
async fn main() -> web3::Result<()> {
    let transport = web3::transports::Http::new("http://localhost:8545")?;
    let web3 = web3::Web3::new(transport);
    println!("Calling accounts.");
    let mut accounts = web3.eth().accounts().await?;
    println!("Accounts: {:?}", accounts);
    accounts.push("00a329c0648769a73afac7f9381e08fb43dbea72".parse().unwrap());
    println!("Calling balance.");
    for account in accounts {
        let balance = web3.eth().balance(account, None).await?;
        println!("Balance of {:?}: {}", account, balance);
    }
    Ok(())
}If you want to deploy smart contracts you have written you can do something like this (make sure you have the solidity compiler installed):
solc -o build --bin --abi contracts/*.sol
The solidity compiler is generating the binary and abi code for the smart contracts in a directory called contracts and is being output to a directory called build.
For more see examples folder.
- Get rid of parking_lot (replace with async-aware locks if really needed).
 -  Consider getting rid of 
Unpinrequirements. (#361) - WebSockets: TLS support (#360)
 - WebSockets: Reconnecting & Pings
 -  Consider using 
tokioinstead ofasync-stdforws.rstransport (issue with test). - Restore IPC Transport
 
-  More flexible API (accept 
Into<X>) -  Contract calls (ABI encoding; 
debris/ethabi) - Batch Requests
 
- HTTP transport
 - IPC transport
 - WebSockets transport
 
-  Types for 
U256,H256,Address(H160) - Index type (numeric, encoded to hex)
 -  Transaction type (
Transactionfrom Parity) -  Transaction receipt type (
TransactionReceiptfrom Parity) -  Block type (
RichBlockfrom Parity) -  Work type (
Workfrom Parity) -  Syncing type (
SyncStatsfrom Parity) 
-  Eth: 
eth_* -  Eth filters: 
eth_* -  Eth pubsub: 
eth_* -  
net_* -  
web3_* -  
personal_* -  
traces_* 
- 
Parity read-only:
parity_* - 
Parity accounts:
parity_*(partially implemented) - 
Parity set:
parity_* - 
signer_* - 
Own APIs (Extendable)
 
let web3 = Web3::new(transport);
web3.api::<CustomNamespace>().custom_method().wait().unwrap()Currently, Windows does not support IPC, which is enabled in the library by default. To compile, you need to disable the IPC feature:
web3 = { version = "0.16.0", default-features = false, features = ["http"] }
On Linux, native-tls is implemented using OpenSSL. To avoid that dependency
for HTTPS use the corresponding feature.
web3 = { version = "0.16.0", default-features = false, features = ["http-rustls-tls"] }
The library supports following features:
http- Enables HTTP transport (requirestokioruntime, because ofhyper).http-tls- Enables TLS support viareqwest/default-tlsfor HTTP transport (implieshttp; default).http-native-tls- Enables TLS support viareqwest/native-tlsfor HTTP transport (implieshttp).http-rustls-tls- Enables TLS support viareqwest/rustls-tlsfor HTTP transport (implieshttp).ws-tokio- Enables WS transport usingtokioruntime.ws-tls-tokio- Enables TLS support for WS transport (impliesws-tokio; default).ws-async-std- Enables WS transport usingasync-stdruntime.ws-tls-async-std- Enables TLS support for WS transport (impliesws-async-std).ipc-tokio- Enables IPC transport usingtokioruntime (default).signing- Enable account namespace and local-signing support (default).eip-1193- Enable EIP-1193 support.wasm- Compile for WASM (make sure to disable default features).arbitrary_precision- Enablearbitrary_precisioninserde_json.