• This repository has been archived on 19/Oct/2024
  • Stars
    star
    2,498
  • Rank 18,388 (Top 0.4 %)
  • Language
    Rust
  • License
    Apache License 2.0
  • Created over 4 years ago
  • Updated 3 months ago

Reviews

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

Repository Details

Complete Ethereum & Celo library and wallet implementation in Rust. https://docs.rs/ethers

ethers-rs

A complete Ethereum and Celo Rust library

Github Actions Telegram Chat Crates.io

Warning

This library is in the process of being deprecated. See #2667 for more information.

Quickstart

Add this to your Cargo.toml:

[dependencies]
ethers = "2.0"

And this to your code:

use ethers::prelude::*;

Documentation

View the API reference here or the online book here.

Examples are organized into individual crates under the /examples folder. You can run any of the examples by executing:

# cargo run -p <example-crate-name> --example <name>
cargo run -p examples-big-numbers --example math_operations

EVM-compatible chains support

There are many chains live which are Ethereum JSON-RPC & EVM compatible, but do not yet have support for EIP-2718 Typed Transactions. This means that transactions submitted to them by default in ethers-rs will have invalid serialization. To address that, you must use the legacy feature flag:

[dependencies]
ethers = { version = "2.0", features = ["legacy"] }

Polygon support

There is abigen support for Polygon and the Mumbai test network. It is recommended that you set the POLYGONSCAN_API_KEY environment variable. You can get one here.

Avalanche support

There is abigen support for Avalanche and the Fuji test network. It is recommended that you set the SNOWTRACE_API_KEY environment variable. You can get one here.

Optimism support

Optimism is supported via the optimism feature flag:

[dependencies]
ethers = { version = "2.0", features = ["optimism"] }

Optimism has a new transaction type: Deposited Transactions with type ID 0x7E, which requires 3 new fields:

  • sourceHash: The hash which uniquely identifies the origin of the deposit
  • mint: The ETH value to mint on L2.
  • isSystemTx: True if the tx does not interact with the L2 block gas pool

Note: the optimism and celo features are mutually exclusive.

Celo Support

Celo support is turned on via the feature-flag celo:

[dependencies]
ethers = { version = "2.0", features = ["celo"] }

Celo's transactions differ from Ethereum transactions by including 3 new fields:

  • fee_currency: The currency fees are paid in (None for CELO, otherwise it's an Address)
  • gateway_fee_recipient: The address of the fee recipient (None for no gateway fee paid)
  • gateway_fee: Gateway fee amount (None for no gateway fee paid)

The feature flag enables these additional fields in the transaction request builders and in the transactions which are fetched over JSON-RPC.

Note: the optimism and celo features are mutually exclusive.

Features

  • Ethereum JSON-RPC Client
  • Interacting and deploying smart contracts
  • Type safe smart contract bindings code generation
  • Querying past events
  • Event monitoring as Streams
  • ENS as a first class citizen
  • Celo support
  • Polygon support
  • Avalanche support
  • Optimism support
  • Websockets / eth_subscribe
  • Hardware Wallet Support
  • Parity APIs (tracing, parity_blockWithReceipts)
  • Geth TxPool API
  • WASM Bindings (see note)
  • FFI Bindings (see note)
  • CLI for common operations

Websockets

Websockets support is turned on via the feature-flag ws:

[dependencies]
ethers = { version = "2.0", features = ["ws"] }

Interprocess Communication (IPC)

IPC support is turned on via the feature-flag ipc:

[dependencies]
ethers = { version = "2.0", features = ["ipc"] }

HTTP Secure (HTTPS)

If you are looking to connect to a HTTPS endpoint, then you need to enable the rustls or openssl feature. feature-flags.

To enable rustls:

[dependencies]
ethers = { version = "2.0", features = ["rustls"] }

To enable openssl:

[dependencies]
ethers = { version = "2.0", features = ["openssl"] }

Note on WASM and FFI bindings

You should be able to build a wasm app that uses ethers-rs (see the example for reference). If ethers fails to compile in WASM, please open an issue. There is currently no plan to provide an official JS/TS-accessible library interface, as we believe viem or ethers.js serve that need very well.

Similarly, you should be able to build FFI bindings to ethers-rs. If ethers fails to compile in C library formats, please open an issue. There is currently no plan to provide official FFI bindings.

Getting Help

First, see if the answer to your question can be found in the API documentation. If the answer is not there, try opening an issue with the question.

Join the ethers-rs telegram to chat with the community!

Contributing

Thanks for your help improving the project! We are so happy to have you! We have a contributing guide to help you get involved in the ethers-rs project.

If you open a Pull Request, do not forget to add your changes in the CHANGELOG, ensure your code is properly formatted with cargo +nightly fmt and that Clippy is happy cargo clippy; you can even try to let clippy fix simple issues itself: cargo +nightly clippy --fix

Running the tests

Tests require the following installed:

  1. solc (>=0.8.0). We also recommend using svm for more flexibility.
  2. anvil
  3. geth

Additionally, the ETHERSCAN_API_KEY environment variable has to be set to run ethers-etherscan tests. You can get one here.

Projects using ethers-rs

Credits

This library would not have been possible without the great work done in:

A lot of the code was inspired and adapted from them, to a unified and opinionated interface, built with async/await and std futures from the ground up.

More Repositories

1

solidity-book

The Senior Solidity Engineer's Book is a resource meant to transform you into a Senior Solidity Engineer.
Makefile
843
star
2

opensea-rs

Rust client to Opensea's APIs and Ethereum smart contracts
Rust
243
star
3

narwhal-abci-evm

Rust
123
star
4

awesome-sp1

A curated list of awesome resources related to SP1 - Succinct's zkVM.
89
star
5

sgx-revm

PoC of Revm execution in SGX
Rust
79
star
6

lootloose

Open your Loot bags and see what's inside
Solidity
78
star
7

dark-forest

[WIP] Rust implementation of the Dark Forest game client
Rust
63
star
8

humanize

Human readable descriptions for your Ethereum transactions
62
star
9

rubberduck-gpt3.vim

This is a vim plugin that allows you to simulate rubber duck programming by using the chatGPT API to generate code suggestions and natural language explanations based on the selected lines of code and a user-specified query. Most of this entire codebase was generated by talking with ChatGPT itself, marked as `ai` commits.
Python
52
star
10

ethers-fireblocks

ethers-rs middleware and signer for Fireblocks' APIs
Rust
48
star
11

rust-ethereum-book

Book showing how to interact with Ethereum from Rust
Makefile
40
star
12

noir-hello-world

Solidity
30
star
13

optimism-tx-format

Shows how optimistic geth modifies transactions that get submitted to it by converting them to OVM Messages and then calls to the OVM Execution Manager
Go
26
star
14

eip1559

EIP1559 Analysis
Python
21
star
15

fractional-rs

CLI & Library for interacting with https://fractional.art/
Rust
21
star
16

GethCluster

Ethereum node cluster deployment script for bootstrapping private test networks
Shell
15
star
17

forge-benchmarks

Shell
14
star
18

solidity-bls

BLS threshold signature verification in Solidity
JavaScript
14
star
19

save-noun11

Solidity
14
star
20

forge-template

Template for getting started with Forge
Solidity
14
star
21

VyperWeb3Deploy

Wrapper for compiling Vyper smart contracts in javascript and automatically deploying them via web3.js
JavaScript
14
star
22

spammers

CLI for generating load for benchmarking eth nodes
Rust
12
star
23

dotfiles

My dotfiles along with a script to deploy them to your environment.
Shell
11
star
24

forge-tracing-repro

Solidity
11
star
25

thesis

Version control for my thesis conducted during the 10th semester in Electrical & Computer Engineering at Aristotle University of Thessaloniki. "Decentralized Metering and Billing of Energy on Ethereum with Respect to Scalability and Security"
TeX
10
star
26

open-fastrlp

Yank of the V0.1.2 of the Fast RLP crate, from when it was still Apache licensed. V0.1.3 was changed to GPL.
Rust
10
star
27

gakonst.github.io

All of my thoughts. Technical mostly.
HTML
10
star
28

eth-vegeta

Configuring Vegeta (https://github.com/tsenart/vegeta) to work for eth load tests
Go
8
star
29

awesome-plasma

Curated list of awesome Plasma resources
6
star
30

covid-gr

Logistic regressions + dataset on the Greek COVID-19 outbreak
Jupyter Notebook
6
star
31

thesis-code

Decentralized Metering and Billing of energy on Ethereum with respect to scalability and security
Python
6
star
32

ethers-structopt

Structopt derived ethers-rs types, useful for building Ethereum CLIs
Rust
6
star
33

eth-testnet

Cross-client Docker-compose customizable testnet image
Dockerfile
5
star
34

changesets-rs

🦀 A way to manage your versioning and changelogs with a focus on monorepos. Inspired by attlassian/changesets.
4
star
35

xchain-account

XChain account contract for Optimism, to issue L1 calls to L2
TypeScript
4
star
36

web3-rust-tower-web-repro

Rust
3
star
37

old-website

My personal website
HTML
3
star
38

Challenges

Misc. coding challenges
Python
3
star
39

evmodin-test

Rust
3
star
40

Conference-Badge-Creator

Tool to export Excel file data and batch-print it on conference badge.
Python
3
star
41

fb-exchange-chatbot

Python
3
star
42

truffle-boilerplate

Boilerplate truffle repo for contract dev
JavaScript
3
star
43

transmissions11.github.io

the html behind 2λ.com
HTML
3
star
44

zexe-serialization-comparison

Comparing the new serialization API vs the previous one
Rust
2
star
45

althea-tower-web-repro

Rust
2
star
46

sqlitemap

A key value store for Sqlite3 in Rust, following HashMap's interface
Rust
2
star
47

test-versioned-dapp-install

Shell
2
star
48

petsas-list-analysis

Python
2
star
49

ethers-abigen-monorepo-repro

Rust
2
star
50

plasma-cash-paper

Plasma Cash: Towards Improved Plasma Constructions.
TeX
2
star
51

aquamarine-repro

https://github.com/mersinvald/aquamarine/issues/28
Rust
2
star
52

publications

Various documents published under my name in the public domain
2
star
53

rust-wasm-demo

Go / Node / Python examples for Rust Wasm
Python
1
star
54

channel-notes

Personal notes on state channels
1
star
55

rustgo-ffi-wip

Rust
1
star
56

commit-reveal

Example repository of Commit - Reveal voting mechanism using ECVerify.sol
Solidity
1
star
57

optimism-gateway

TypeScript
1
star
58

pythess_x_btc-meetup

Code used for the PyThess x Bitcoin Meetup, on Solidity and interacting with Ethereum via Web3.py
Python
1
star
59

truffle-compact-ecrecover

Compact signature verification with 2 words. Inspired from https://github.com/HarryR/solcrypto/blob/01a3c5d91053f3b8bffde328146d5f18015ebfed/contracts/ECDSA.sol
1
star