• Stars
    star
    1,452
  • Rank 32,405 (Top 0.7 %)
  • Language
    Rust
  • License
    MIT License
  • Created almost 8 years ago
  • Updated 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Ethereum JSON-RPC multi-transport client. Rust implementation of web3 library. ENS address: rust-web3.eth

web3

Ethereum JSON-RPC multi-transport client. Rust implementation of Web3.js library.

Build Status Crates.io

Documentation: crates.io

Status

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.

Usage

First, add this to your Cargo.toml:

[dependencies]
web3 = "0.19.0"

Example

#[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.

Futures migration

  • Get rid of parking_lot (replace with async-aware locks if really needed).
  • Consider getting rid of Unpin requirements. (#361)
  • WebSockets: TLS support (#360)
  • WebSockets: Reconnecting & Pings
  • Consider using tokio instead of async-std for ws.rs transport (issue with test).
  • Restore IPC Transport

General

  • More flexible API (accept Into<X>)
  • Contract calls (ABI encoding; debris/ethabi)
  • Batch Requests

Transports

  • HTTP transport
  • IPC transport
  • WebSockets transport

Types

  • Types for U256,H256,Address(H160)
  • Index type (numeric, encoded to hex)
  • Transaction type (Transaction from Parity)
  • Transaction receipt type (TransactionReceipt from Parity)
  • Block type (RichBlock from Parity)
  • Work type (Work from Parity)
  • Syncing type (SyncStats from Parity)

APIs

  • Eth: eth_*
  • Eth filters: eth_*
  • Eth pubsub: eth_*
  • net_*
  • web3_*
  • personal_*
  • traces_*

Parity-specific APIs

  • 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()

Installation on Windows

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.19.0", default-features = false, features = ["http"] }

Avoiding OpenSSL dependency

On Linux, native-tls is implemented using OpenSSL. To avoid that dependency for HTTPS use the corresponding feature.

web3 = { version = "0.19.0", default-features = false, features = ["http-rustls-tls"] }

Cargo Features

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.

More Repositories

1

jsonrpc-proxy

A generic and extensible JSON-RPC proxy, supporting cache and load-balancing.
Rust
81
star
2

grunt-sync

[Not actively developed] Grunt.js task providing one-way synchronization of directories. Instead of copying all files only those that has been changed are copied which actually results in much faster execution.
JavaScript
77
star
3

ethsign

A library to read JSON keyfiles and sign Ethereum stuff.
Rust
38
star
4

sub0-offchain-workshop

Code for offchain workshop.
Rust
27
star
5

resty

A simple JSON REST API framework.
Rust
13
star
6

eth-tx-utils

Bump gas price of an existing transaction by providing it's RLP, new gas price and your JSON keyfile.
Rust
9
star
7

SortedList

Fast priority queue implementation for JavaScript (fast: min/max, logarithmic: insert, contains)
JavaScript
5
star
8

rustfest-2017

Materials for Ethereum workshop (RustFest 2017, Zurich)
Rust
4
star
9

gradleps

Search through Maven Central for suitable dependency and append it automatically to your Gradle buildfile.
JavaScript
4
star
10

mgr.p2p.proxy

Distributed P2P web caching proxy
Python
3
star
11

ng2-jsx

Using JSX syntax in Angular2 templates.
TypeScript
3
star
12

eth-opcodevis

Simple Ethereum Byte Code visualiser
JavaScript
3
star
13

wasm-oo7-tutorial

2
star
14

javascript.examples

Some examples that helps understanding Javascript.
JavaScript
2
star
15

game-of-life

Rust implementation of game of life
Rust
2
star
16

js.minesweeper

Javascript minesweeper using require.js + Backbone + Mocha (for tests)
JavaScript
2
star
17

multisig-list

JavaScript
1
star
18

fs.bg

Javascript FullScreen background plugin.
JavaScript
1
star
19

modernjs-demo

JavaScript
1
star
20

firmWeb3

Web3 wrapper to simplify certainty/"finality" management.
JavaScript
1
star
21

angular2-redux-example

angular2-redux-example
JavaScript
1
star
22

slides-flux-redux

HTML
1
star
23

etherdisplay

JavaScript
1
star
24

rust-js-dapp

Build js code during rust compilation
Rust
1
star
25

libp2p-netsim-tests

Rust
1
star
26

team-self-allocation

A tool to support a process of self-forming teams.
JavaScript
1
star
27

web3.onChange

Plugin converting Web3 calls into "Event Emitters"
JavaScript
1
star
28

cargo-5730

An unexpected behavior of cargo leaking dev-dependencies features to regular dependencies.
Rust
1
star
29

deployment-app

Automate your deployment using web application.
JavaScript
1
star
30

kdtree

K-d tree implementation for nearest neighbours searching.
JavaScript
1
star
31

rust-assert-diff

Easily spot difference in long string assertions in Rust output
JavaScript
1
star
32

rust-executors

Rust
1
star
33

25-3-offchain-identity

Rust
1
star