[package]
name = "reth"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
license.workspace = true
homepage.workspace = true
repository.workspace = true
description = "Reth node implementation"
default-run = "reth"

[lints]
workspace = true

[dependencies]
# reth
reth-chainspec.workspace = true
reth-config.workspace = true
reth-primitives.workspace = true
reth-fs-util.workspace = true
reth-db = { workspace = true, features = ["mdbx"] }
reth-db-api.workspace = true
reth-exex.workspace = true
reth-provider.workspace = true
reth-evm.workspace = true
reth-revm.workspace = true
reth-stages.workspace = true
reth-execution-types.workspace = true
reth-errors.workspace = true
reth-transaction-pool.workspace = true
reth-beacon-consensus.workspace = true
reth-cli-runner.workspace = true
reth-cli-commands.workspace = true
reth-cli-util.workspace = true
reth-consensus-common.workspace = true
reth-blockchain-tree.workspace = true
reth-rpc-builder.workspace = true
reth-rpc.workspace = true
reth-rpc-types.workspace = true
reth-rpc-types-compat.workspace = true
reth-rpc-api = { workspace = true, features = ["client"] }
reth-rpc-eth-types.workspace = true
reth-rpc-server-types.workspace = true
reth-network = { workspace = true, features = ["serde"] }
reth-network-p2p.workspace = true
reth-network-api.workspace = true
reth-downloaders.workspace = true
reth-tracing.workspace = true
reth-tasks.workspace = true
reth-payload-builder.workspace = true
reth-payload-primitives.workspace = true
reth-payload-validator.workspace = true
reth-basic-payload-builder.workspace = true
reth-static-file.workspace = true
reth-static-file-types = { workspace = true, features = ["clap"] }
reth-trie = { workspace = true, features = ["metrics"] }
reth-trie-db = { workspace = true, features = ["metrics"] }
reth-node-api.workspace = true
reth-node-optimism = { workspace = true, optional = true, features = [
    "optimism",
] }
reth-node-core.workspace = true
reth-ethereum-payload-builder.workspace = true
reth-db-common.workspace = true
reth-node-ethereum.workspace = true
reth-node-builder.workspace = true
reth-node-events.workspace = true
reth-node-metrics.workspace = true
reth-consensus.workspace = true
reth-optimism-primitives.workspace = true
reth-engine-util.workspace = true
reth-prune.workspace = true
reth-stages-api.workspace = true
reth-optimism-cli = { workspace = true, optional = true }

# crypto
alloy-rlp.workspace = true

# tracing
tracing.workspace = true

# io
fdlimit.workspace = true
serde.workspace = true
serde_json.workspace = true
confy.workspace = true
toml = { workspace = true, features = ["display"] }

# metrics
metrics-process.workspace = true

# async
tokio = { workspace = true, features = [
    "sync",
    "macros",
    "time",
    "rt-multi-thread",
] }
futures.workspace = true

# misc
aquamarine.workspace = true
eyre.workspace = true
clap = { workspace = true, features = ["derive", "env"] }
tempfile.workspace = true
backon.workspace = true
similar-asserts.workspace = true
itertools.workspace = true

# p2p
discv5.workspace = true

[target.'cfg(unix)'.dependencies]
tikv-jemallocator = { version = "0.5.0", optional = true }
libc = "0.2"

[dev-dependencies]
reth-discv4.workspace = true

[features]
default = ["jemalloc"]

dev = ["reth-cli-commands/dev"]

asm-keccak = ["reth-node-core/asm-keccak", "reth-primitives/asm-keccak"]

jemalloc = ["dep:tikv-jemallocator", "reth-node-core/jemalloc", "reth-node-metrics/jemalloc"]
jemalloc-prof = ["jemalloc", "tikv-jemallocator?/profiling"]

min-error-logs = ["tracing/release_max_level_error"]
min-warn-logs = ["tracing/release_max_level_warn"]
min-info-logs = ["tracing/release_max_level_info"]
min-debug-logs = ["tracing/release_max_level_debug"]
min-trace-logs = ["tracing/release_max_level_trace"]

optimism = [
    "dep:reth-node-optimism",
    "dep:reth-optimism-cli",
    "reth-beacon-consensus/optimism",
    "reth-blockchain-tree/optimism",
    "reth-node-core/optimism",
    "reth-optimism-cli?/optimism",
    "reth-primitives/optimism",
    "reth-provider/optimism",
    "reth-rpc/optimism",
]

# no-op feature flag for switching between the `optimism` and default functionality in CI matrices
ethereum = []

[[bin]]
name = "reth"
path = "src/main.rs"

[[bin]]
name = "op-reth"
path = "src/optimism.rs"
required-features = ["optimism"]
