| Crates.io | web3 |
| lib.rs | web3 |
| version | 0.19.0 |
| created_at | 2016-12-28 01:04:31.41543+00 |
| updated_at | 2023-06-20 19:30:46.224071+00 |
| description | Ethereum JSON-RPC client. |
| homepage | https://github.com/tomusdrw/rust-web3 |
| repository | https://github.com/tomusdrw/rust-web3 |
| max_upload_size | |
| id | 7804 |
| size | 637,532 |
Ethereum JSON-RPC multi-transport client. Rust implementation of Web3.js library.
Documentation: crates.io
Note this package is barely maintained and I am looking for an active maintainer (see #664). If you are starting a new project, I'd recommend choosing https://github.com/gakonst/ethers-rs instead.
First, add this to your Cargo.toml:
[dependencies]
web3 = "0.18.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.
Unpin requirements. (#361)tokio instead of async-std for ws.rs transport (issue with test).Into<X>)debris/ethabi)U256,H256,Address(H160)Transaction from Parity)TransactionReceipt from Parity)RichBlock from Parity)Work from Parity)SyncStats from Parity)eth_*eth_*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.18.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.18.0", default-features = false, features = ["http-rustls-tls"] }
The library supports following features:
http - Enables HTTP transport (requires tokio runtime, because of hyper).http-tls - Enables TLS support via reqwest/default-tls for HTTP transport (implies http; default).http-native-tls - Enables TLS support via reqwest/native-tls for HTTP transport (implies http).http-rustls-tls - Enables TLS support via reqwest/rustls-tls for HTTP transport (implies http).ws-tokio - Enables WS transport using tokio runtime.ws-tls-tokio - Enables TLS support for WS transport (implies ws-tokio; default).ws-async-std - Enables WS transport using async-std runtime.ws-tls-async-std - Enables TLS support for WS transport (implies ws-async-std).ipc-tokio - Enables IPC transport using tokio runtime (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 - Enable arbitrary_precision in serde_json.allow-missing-fields - Some response fields are mandatory in Ethereum but not present in
EVM-compatible chains such as Celo and Fantom. This feature enables compatibility by setting a
default value on those fields.