[workspace.package]
version = "2.0.1"
edition = "2021"
rust-version = "1.65"
license = "MIT OR Apache-2.0"
documentation = "https://docs.rs/ethers"
repository = "https://github.com/gakonst/ethers-rs"
homepage = "https://github.com/gakonst/ethers-rs"
categories = ["cryptography::cryptocurrencies"]
keywords = ["crypto", "ethers", "ethereum", "web3", "celo"]
exclude = [
    ".github/",
    "bin/",
    "book/",
    "**/tests/",
    "**/test-data/",
    "**/testdata/",
    "examples",
    "scripts/",
]

# https://docs.rs/about/metadata
[workspace.metadata.docs.rs]
all-features = true
rustc-args = ["--cfg", "docsrs"]
rustdoc-args = ["--cfg", "docsrs"]

# https://github.com/integer32llc/rust-playground/blob/c6165a36923db5d99313e6056b5b610a2ede5bb0/top-crates/src/lib.rs#L175-L184
[workspace.metadata.playground]
all-features = true

[workspace]
members = [
    "ethers",
    "ethers-addressbook",
    "ethers-contract",
    "ethers-core",
    "ethers-etherscan",
    "ethers-middleware",
    "ethers-providers",
    "ethers-signers",
    "ethers-solc",

    # Example crates
    "examples/*",
]

# Do not include example crates in default members
default-members = [
    "ethers",
    "ethers-addressbook",
    "ethers-contract",
    "ethers-core",
    "ethers-etherscan",
    "ethers-middleware",
    "ethers-providers",
    "ethers-signers",
    "ethers-solc",
]

# Explicitly set the resolver to version 2, which is the default for packages with edition >= 2021
# https://doc.rust-lang.org/edition-guide/rust-2021/default-cargo-resolver.html
resolver = "2"

[workspace.dependencies]
# workspace crates
ethers = { version = "2.0.1", path = "ethers", default-features = false }
ethers-addressbook = { version = "2.0.1", path = "ethers-addressbook", default-features = false }
ethers-contract = { version = "2.0.1", path = "ethers-contract", default-features = false }
ethers-core = { version = "2.0.1", path = "ethers-core", default-features = false }
ethers-etherscan = { version = "2.0.1", path = "ethers-etherscan", default-features = false }
ethers-middleware = { version = "2.0.1", path = "ethers-middleware", default-features = false }
ethers-providers = { version = "2.0.1", path = "ethers-providers", default-features = false }
ethers-signers = { version = "2.0.1", path = "ethers-signers", default-features = false }
ethers-solc = { version = "2.0.1", path = "ethers-solc", default-features = false }

ethers-contract-abigen = { version = "2.0.1", path = "ethers-contract/ethers-contract-abigen", default-features = false }
ethers-contract-derive = { version = "2.0.1", path = "ethers-contract/ethers-contract-derive", default-features = false }
ethers-derive-eip712 = { version = "2.0.1", path = "ethers-core/ethers-derive-eip712", default-features = false }

# async / async utils
tokio = "1.26"
tokio-tungstenite = { version = "0.18.0", default-features = false }
futures = { version = "0.3.27", default-features = false, features = ["std"] }
futures-core = "0.3.27"
futures-util = "0.3.27"
futures-executor = "0.3.27"
futures-channel = "0.3.27"
futures-locks = { version = "0.7.1", default-features = false }
futures-timer = { version = "3.0.2", default-features = false, features = ["wasm-bindgen"] }
pin-project = "1.0"
reqwest = { version = "0.11.14", default-features = false }
url = { version = "2.3", default-features = false }

# crypto
elliptic-curve = { version = "0.13.2", default-features = false }
generic-array = { version = "0.14.6", default-features = false }
k256 = { version = "0.13.0", default-features = false, features = ["ecdsa", "std"] }
sha2 = { version = "0.10.6", default-features = false }
tiny-keccak = { version = "2.0.2", default-features = false }
spki = { version = "0.7.0", default-features = false }

# serde
serde = "1.0"
serde_json = "1.0"

# macros
proc-macro2 = "1.0"
quote = "1.0"
syn = { version = "1.0", features = ["extra-traits"] }
async-trait = "0.1.66"
auto_impl = "1.0"

# misc
thiserror = "1.0"
once_cell = "1.17"
hex = "0.4"
eyre = "0.6"
tempfile = "3.4"
dunce = "1.0"
walkdir = "2.3"
regex = "1.7"
toml = "0.7"
hex-literal = "0.3"
rand = "0.8"
bytes = "1.4"
semver = "1.0"
criterion = "0.4"
rayon = "1.7"

# tracing
tracing = "0.1.37"
tracing-subscriber = { version = "0.3.16", default-features = false }
tracing-futures = "0.2.5"

# wasm
getrandom = { version = "0.2", features = ["js"] }
instant = "0.1.12"
