2020-06-15 14:43:32 +00:00
# <h1 align="center"> ethers.rs </h1>
2020-05-22 18:37:21 +00:00
2020-06-17 09:22:01 +00:00
**Complete Ethereum and Celo wallet implementation and utilities in Rust**
2020-06-15 14:43:32 +00:00
2020-06-17 13:09:41 +00:00
![Github Actions ](https://github.com/gakonst/ethers-rs/workflows/Tests/badge.svg )
2021-10-15 14:44:26 +00:00
[![Telegram Chat ](https://img.shields.io/endpoint?color=neon&style=flat-square&url=https%3A%2F%2Ftg.sumanjay.workers.dev%2Fethers_rs )](https://t.me/ethers_rs)
[![Crates.io][crates-badge]][crates-url]
[crates-badge]: https://img.shields.io/crates/v/ethers.svg
[crates-url]: https://crates.io/crates/ethers
2020-06-15 14:43:32 +00:00
## Documentation
2020-06-17 13:09:41 +00:00
Extensive documentation and examples are available [here ](https://docs.rs/ethers ).
2020-06-15 14:43:32 +00:00
Alternatively, you may clone the repository and run `cd ethers/ && cargo doc --open`
2021-08-30 11:00:30 +00:00
You can also run any of the examples by executing: `cargo run -p ethers --example <name>`
2020-06-15 14:43:32 +00:00
## Add ethers-rs to your repository
```toml
[dependencies]
2022-10-25 18:18:49 +00:00
ethers = "1.0.0"
2020-06-15 14:43:32 +00:00
```
< / details >
2020-05-22 18:37:21 +00:00
2020-08-21 12:54:23 +00:00
## Running the tests
Tests require the following installed:
2021-11-22 18:24:48 +00:00
2022-04-21 17:23:51 +00:00
1. [`solc` ](https://solidity.readthedocs.io/en/latest/installing-solidity.html ) (>=0.8.10). We also recommend using [solc-select ](https://github.com/crytic/solc-select ) for more flexibility.
2022-06-01 15:22:39 +00:00
2. [`anvil` ](https://github.com/foundry-rs/foundry/blob/master/anvil/README.md )
2022-04-21 17:23:51 +00:00
3. [`geth` ](https://github.com/ethereum/go-ethereum )
2020-08-21 12:54:23 +00:00
2021-11-22 18:24:48 +00:00
In addition, it is recommended that you set the `ETHERSCAN_API_KEY` environment variable
2022-04-21 17:23:51 +00:00
for [the abigen via Etherscan ](https://github.com/gakonst/ethers-rs/blob/master/ethers-contract/tests/abigen.rs ) tests.
2020-08-21 12:54:23 +00:00
You can get one [here ](https://etherscan.io/apis ).
2021-08-19 07:08:59 +00:00
### 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 ](https://eips.ethereum.org/EIPS/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:
```toml
[dependencies]
2022-10-25 18:18:49 +00:00
ethers = { version = "1.0.0", features = ["legacy"] }
2021-08-19 07:08:59 +00:00
```
2021-11-23 11:23:42 +00:00
### 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 ](https://polygonscan.io/apis ).
### 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 ](https://snowtrace.io/apis ).
2020-06-17 09:22:01 +00:00
### Celo Support
[Celo ](http://celo.org/ ) support is turned on via the feature-flag `celo` :
```toml
[dependencies]
2022-10-25 18:18:49 +00:00
ethers = { version = "1.0.0", features = ["celo"] }
2020-06-17 09:22:01 +00:00
```
Celo's transactions differ from Ethereum transactions by including 3 new fields:
2021-11-22 18:24:48 +00:00
2022-09-28 18:58:26 +00:00
- `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)
2020-06-17 09:22:01 +00:00
The feature flag enables these additional fields in the transaction request builders and
in the transactions which are fetched over JSON-RPC.
2020-05-24 18:56:10 +00:00
## Features
2020-05-22 18:37:21 +00:00
2022-09-28 18:58:26 +00:00
- [x] Ethereum JSON-RPC Client
- [x] Interacting and deploying smart contracts
- [x] Type safe smart contract bindings code generation
- [x] Querying past events
- [x] Event monitoring as `Stream` s
- [x] ENS as a first class citizen
- [x] Celo support
- [x] Polygon support
- [x] Avalanche support
- [x] Websockets / `eth_subscribe`
- [x] Hardware Wallet Support
- [x] Parity APIs (`tracing`, `parity_blockWithReceipts` )
- [x] Geth TxPool API
- [ ] WASM Bindings (see note)
- [ ] FFI Bindings (see note)
- [ ] CLI for common operations
2020-06-15 14:43:32 +00:00
2022-07-24 01:20:06 +00:00
### Websockets
Websockets support is turned on via the feature-flag `ws` :
```toml
[dependencies]
2022-10-25 18:18:49 +00:00
ethers = { version = "1.0.0", features = ["ws"] }
2022-07-24 01:20:06 +00:00
```
### Interprocess Communication (IPC)
IPC support is turned on via the feature-flag `ipc` :
```toml
[dependencies]
2022-10-25 18:18:49 +00:00
ethers = { version = "1.0.0", features = ["ipc"] }
2022-07-24 01:20:06 +00:00
```
### 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` :
2022-09-28 18:58:26 +00:00
2022-07-24 01:20:06 +00:00
```toml
[dependencies]
2022-10-25 18:18:49 +00:00
ethers = { version = "1.0.0", features = ["rustls"] }
2022-07-24 01:20:06 +00:00
```
To enable `openssl` :
2022-09-28 18:58:26 +00:00
2022-07-24 01:20:06 +00:00
```toml
[dependencies]
2022-10-25 18:18:49 +00:00
ethers = { version = "1.0.0", features = ["openssl"] }
2022-07-24 01:20:06 +00:00
```
2021-11-22 18:24:48 +00:00
## Note on WASM and FFI bindings
You should be able to build a wasm app that uses ethers-rs (see the [example ](./examples/ethers-wasm ) for reference). If ethers fails to
compile in WASM, please
[open an issue ](https://github.com/gakonst/ethers-rs/issues/new/choose ).
There is currently no plan to provide an official JS/TS-accessible library
interface. we believe [ethers.js ](https://docs.ethers.io/v5/ ) serves that need
very well.
Similarly, you should be able to build FFI bindings to ethers-rs. If ethers
fails to compile in c lib formats, please
[open an issue ](https://github.com/gakonst/ethers-rs/issues/new/choose ).
There is currently no plan to provide official FFI bindings, and as ethers-rs is
not yet stable 1.0.0, its interface may change significantly between versions.
2020-06-15 14:43:32 +00:00
## Getting Help
2020-06-17 13:09:41 +00:00
First, see if the answer to your question can be found in the [API documentation ](https://docs.rs/ethers ). If the answer
2020-06-15 14:43:32 +00:00
is not there, try opening an [issue ](https://github.com/gakonst/ethers-rs/issues/new ) with the question.
2020-12-23 17:18:10 +00:00
Join the [ethers-rs telegram ](https://t.me/ethers_rs ) to chat with the community!
2020-12-20 09:12:52 +00:00
2020-06-15 14:43:32 +00:00
## Contributing
2020-05-22 18:37:21 +00:00
2020-06-15 14:43:32 +00:00
Thanks for your help improving the project! We are so happy to have you! We have
[a contributing guide ](https://github.com/gakonst/ethers-rs/blob/master/CONTRIBUTING.md ) to
help you get involved in the ethers-rs project.
2020-05-26 11:00:56 +00:00
2022-08-08 17:30:37 +00:00
If you make a Pull Request, do not forget to add your changes in the [CHANGELOG ](CHANGELOG.md ) and ensure your code is
2021-10-29 12:29:35 +00:00
properly formatted with `cargo +nightly fmt` and clippy is happy `cargo clippy` , you can even try to let clippy fix simple
issues itself: `cargo +nightly clippy --fix -Z unstable-options`
2021-08-31 10:52:11 +00:00
2020-06-15 14:43:32 +00:00
## Related Projects
2020-05-25 18:14:13 +00:00
2022-11-07 23:18:38 +00:00
This library would not have been possible without the great work done in:
2021-11-22 18:24:48 +00:00
2022-09-28 18:58:26 +00:00
- [`ethers.js` ](https://github.com/ethers-io/ethers.js/ )
- [`rust-web3` ](https://github.com/tomusdrw/rust-web3/ )
- [`ethcontract-rs` ](https://github.com/gnosis/ethcontract-rs/ )
- [`guac_rs` ](https://github.com/althea-net/guac_rs/tree/master/web3/src/jsonrpc )
2020-05-25 18:14:13 +00:00
2020-06-15 14:43:32 +00:00
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.
2020-12-31 19:08:12 +00:00
## Projects using ethers-rs
2022-09-28 18:58:26 +00:00
- [Yield Liquidator ](https://github.com/yieldprotocol/yield-liquidator/ ): Liquidator for Yield Protocol
- [MEV Inspect ](https://github.com/flashbots/mev-inspect-rs/ ): Miner Extractable Value inspector
- [Ethers Flashbots ](https://github.com/onbjerg/ethers-flashbots ): Ethers middleware for [Flashbots ](https://docs.flashbots.net )
- [Ethers Fireblocks ](https://github.com/gakonst/ethers-fireblocks ): Ethers middleware and signer for [Fireblocks ](https://fireblocks.io )' API
- [Celo Threshold BLS DKG ](https://github.com/celo-org/celo-threshold-bls-rs/ ): CLI for using Celo as a data availability network for the Joint-Feldman BLS DKG
- [Celo Plumo Prover ](https://github.com/celo-org/plumo-prover ): Creates Celo's ultralight client proof from on-chain data
- [Celo SNARK Setup Coordinator ](https://github.com/celo-org/snark-setup-operator ): Coordinator for executing a pipelined Groth16 SNARK setup