ethers-rs/ethers-core
Dan Cline 537d0a9deb
fix(core): properly parse genesis alloc storage (#2205)
* fix(core): properly parse genesis alloc storage

 * Previously we were not properly parsing the storage field of
   GenesisAlloc. The first issue was in using serde(flatten), which is
   just incorrect because storage is not encoded flattened. The second
   issue was in the parsing of H256 keys and values. Some of the storage
   values in hive genesis examples were encoded in less than 64 hex
   characters, such as the string `0x12`. This would not succeed normal
   H256 parsing.
 * Introduce from_unformatted_hex_map to properly deserialize the
   storage map.
 * Modify existing genesis parsing tests to check parsed storage and
   code values against expected values.
 * Introduce new genesis parsing test from the hive smoke tests,
   checking full struct equality.

* remove unused from_unformatted hex

* make clippy happy
2023-02-27 15:22:01 -07:00
..
ethers-derive-eip712 chore: update all rust editions to 2021 (#1979) 2022-12-30 14:48:29 +02:00
src fix(core): properly parse genesis alloc storage (#2205) 2023-02-27 15:22:01 -07:00
testdata feat: support parsing bytecode from evm object (#2024) 2023-01-07 16:22:07 +02:00
Cargo.toml chore(deps): bump tempfile from 3.3.0 to 3.4.0 (#2200) 2023-02-27 13:03:47 -07:00
README.md docs: fix broken links, update documentation (#2203) 2023-02-27 13:03:17 -07:00

README.md

ethers-core

Ethereum data 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

For more information, please refer to the book.

Feature flags

  • eip712: Provides the Eip712 trait and derive procedural macro for EIP-712 encoding of typed data.

ABI

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

Utilities

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

Examples

Calculate the UniswapV2 pair address for two ERC20 tokens:

# use ethers_core::abi::{self, Token};
# use ethers_core::types::{Address, H256};
# use ethers_core::utils;
let factory: Address = "0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f".parse()?;

let token_a: Address = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48".parse()?;
let token_b: Address = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2".parse()?;
let encoded = abi::encode_packed(&[Token::Address(token_a), Token::Address(token_b)])?;
let salt = utils::keccak256(encoded);

let init_code_hash: H256 = "0x96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f".parse()?;

let pair = utils::get_create2_address_from_hash(factory, salt, init_code_hash);
let weth_usdc = "0xB4e16d0168e52d35CaCD2c6185b44281Ec28C9Dc".parse()?;
assert_eq!(pair, weth_usdc);
# Ok::<(), Box<dyn std::error::Error>>(())