ethers-rs/ethers-core
Dan Cline e9a808e84f
fix(core): fix geth --init temp dir race condition (#2068)
* fix(core): fix geth --init temp dir race condition

 * previously, if multiple instances of geth were spawned concurrently,
   only one directory would be used to populate geth's genesis.json.
   this can lead to a race condition where the genesis.json would be
   re-written by a second instance, before the first instance reads the
   genesis.json for populating its db and genesis block with the geth
   --init command. this was possible because directory returned by
   std::env::temp_dir() is often shared
 * fixes the race condition by using tempfile::tempdir(), which creates
   a unique directory per call to tempdir()

* only use tempfile on non-wasm32
2023-01-21 18:13:40 -08:00
..
ethers-derive-eip712 chore: update all rust editions to 2021 (#1979) 2022-12-30 14:48:29 +02:00
src fix(core): fix geth --init temp dir race condition (#2068) 2023-01-21 18:13:40 -08:00
testdata feat: support parsing bytecode from evm object (#2024) 2023-01-07 16:22:07 +02:00
Cargo.toml fix(core): fix geth --init temp dir race condition (#2068) 2023-01-21 18:13:40 -08:00
README.md fmt: all (#1751) 2022-09-28 11:58:26 -07:00

README.md

Ethereum types, cryptography and utilities.

It is recommended to use the utils, types and abi re-exports instead of the core module to simplify your imports.

This library provides type definitions for Ethereum's main datatypes along with other utilities for interacting with the Ethereum ecosystem

Signing an ethereum-prefixed message

Signing in Ethereum is done by first prefixing the message with "\x19Ethereum Signed Message:\n" + message.length, and then signing the hash of the result.

# async fn foo() -> Result<(), Box<dyn std::error::Error>> {
use ethers::signers::{Signer, LocalWallet};

let message = "Some data";
let wallet = LocalWallet::new(&mut rand::thread_rng());

// Sign the message
let signature = wallet.sign_message(message).await?;

// Recover the signer from the message
let recovered = signature.recover(message)?;

assert_eq!(recovered, wallet.address());
# Ok(())
# }

Utilities

The crate provides utilities for launching local Ethereum testnets by using ganache-cli via the GanacheBuilder struct.

Features

  • ["eip712"] | Provides Eip712 trait for EIP-712 encoding of typed data for derived structs

ABI Encoding and Decoding

This crate re-exports the ethabi crate's functions under the abi module, as well as the secp256k1 and rand crates for convenience.