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.15.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.
http- Enables HTTP transport (requirestokioruntime, because ofhyper).http-tls- Enables TLS support for HTTP transport (implieshttp).ws- Enables WS transport.ws-tls- Enables TLS support for WS transport (impliesws).
- 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.14.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.14.0", default-features = false, features = ["http-rustls"] }
The library supports following features:
http- Enableshttptransport.http-tls- Enableshttpover TLS (https) transport support using OS-native TLS. Implieshttp.http-rustls- Enableshttpover TLS (https) transport support using rustls. Implieshttp.ipc-tokio- Enablesipctransport (tokioruntime). *NIX only!ws-tokio- Enableswstranport (tokioruntime).ws-tls-tokio- Enableswsstranport (tokioruntime).ws-async-std- Enableswstranport (async-stdruntime).ws-tls-async-std- Enableswsstranport (async-stdruntime).
By default http-tls and ws-tls-tokio are enabled.