537d0a9deb
* 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 |
||
---|---|---|
.. | ||
ethers-derive-eip712 | ||
src | ||
testdata | ||
Cargo.toml | ||
README.md |
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 theEip712
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>>(())