[package]
name = "reth-ethereum"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
license.workspace = true
homepage.workspace = true
repository.workspace = true

[lints]
workspace = true

[dependencies]
# reth
reth-primitives-traits.workspace = true
reth-chainspec.workspace = true
reth-network = { workspace = true, optional = true }
reth-provider = { workspace = true, optional = true }
reth-db = { workspace = true, optional = true, features = ["mdbx"] }
reth-storage-api = { workspace = true, optional = true }
reth-node-api = { workspace = true, optional = true }
reth-consensus = { workspace = true, optional = true }
reth-consensus-common = { workspace = true, optional = true }
reth-evm = { workspace = true, optional = true }
reth-rpc = { workspace = true, optional = true }
reth-rpc-api = { workspace = true, optional = true }
reth-rpc-eth-types = { workspace = true, optional = true }
reth-rpc-builder = { workspace = true, optional = true }
reth-exex = { workspace = true, optional = true }
reth-trie = { workspace = true, optional = true }

# reth-ethereum
reth-ethereum-primitives.workspace = true
reth-ethereum-cli = { workspace = true, optional = true }
reth-ethereum-consensus = { workspace = true, optional = true }
reth-evm-ethereum = { workspace = true, optional = true }
reth-node-ethereum = { workspace = true, optional = true }

# alloy
alloy-rpc-types-eth = { workspace = true, optional = true }

[features]
default = ["std"]
std = [
    "reth-chainspec/std",
    "reth-ethereum-primitives/std",
    "reth-primitives-traits/std",
    "reth-consensus?/std",
    "reth-consensus-common?/std",
    "alloy-rpc-types-eth?/std",
    "reth-storage-api?/std",
    "reth-evm?/std",
]
arbitrary = [
    "std",
    "reth-chainspec/arbitrary",
    "reth-ethereum-primitives/arbitrary",
    "reth-primitives-traits/arbitrary",
    "reth-db?/arbitrary",
    "alloy-rpc-types-eth?/arbitrary",
]

test-utils = [
    "reth-chainspec/test-utils",
    "reth-consensus?/test-utils",
    "reth-db?/test-utils",
    "reth-ethereum-primitives/test-utils",
    "reth-evm?/test-utils",
    "reth-network?/test-utils",
    "reth-node-ethereum?/test-utils",
    "reth-primitives-traits/test-utils",
    "reth-provider?/test-utils",
    "reth-trie?/test-utils",
]

full = ["consensus", "evm", "node", "provider", "rpc", "exex", "trie"]

alloy-compat = ["reth-ethereum-primitives/alloy-compat"]
cli = ["dep:reth-ethereum-cli"]
consensus = ["dep:reth-consensus", "dep:reth-consensus-common", "dep:reth-ethereum-consensus"]
evm = ["dep:reth-evm", "dep:reth-evm-ethereum"]
exex = ["provider", "dep:reth-exex"]
node-api = ["dep:reth-node-api"]
node = ["provider", "consensus", "evm", "node-api", "dep:reth-node-ethereum", "rpc", "trie"]
rpc = ["dep:reth-rpc", "dep:reth-rpc-builder", "dep:reth-rpc-api", "dep:reth-rpc-eth-types", "dep:alloy-rpc-types-eth"]
js-tracer = ["rpc", "reth-rpc/js-tracer"]
network = ["dep:reth-network"]
provider = ["storage-api", "dep:reth-provider", "dep:reth-db"]
storage-api = ["dep:reth-storage-api"]
trie = ["dep:reth-trie"]
