ethers-rs/ethers-core
Justin Phu 89cf65f963
fix(core): re-export CallLogFrame from geth types (#2283)
* fix(core): re-export CallLogFrame from geth types

The CallLogFrame was not being exported from geth which made it
difficult to store all the logs using the ethers type.

* fix(core): correct the visibility of the geth CallLogFrame struct

The previous diff made the struct public but did not change the fields
itself. The struct being public is not useful unless the fields are
public.
2023-03-20 20:01:48 -07:00
..
ethers-derive-eip712 chore(deps): bump and use workspace dependencies (#2222) 2023-03-16 12:28:35 -07:00
src fix(core): re-export CallLogFrame from geth types (#2283) 2023-03-20 20:01:48 -07:00
testdata feat: support parsing bytecode from evm object (#2024) 2023-01-07 16:22:07 +02:00
Cargo.toml chore(deps): bump and use workspace dependencies (#2222) 2023-03-16 12:28:35 -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>>(())