[package]
name = "reth-transaction-pool"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
license.workspace = true
homepage.workspace = true
repository.workspace = true
description = "Transaction pool implementation"

[lints]
workspace = true

[dependencies]
# reth
reth-chain-state.workspace = true
reth-chainspec.workspace = true
reth-eth-wire-types.workspace = true
reth-primitives = { workspace = true, features = ["c-kzg", "secp256k1"] }
reth-primitives-traits.workspace = true
reth-payload-util.workspace = true
reth-execution-types.workspace = true
reth-fs-util.workspace = true
reth-storage-api.workspace = true
reth-tasks.workspace = true
revm-primitives.workspace = true
revm-interpreter.workspace = true

# ethereum
alloy-eips = { workspace = true, features = ["kzg"] }
alloy-primitives.workspace = true
alloy-rlp.workspace = true
alloy-consensus.workspace = true

# async/futures
futures-util.workspace = true
parking_lot.workspace = true
tokio = { workspace = true, default-features = false, features = ["sync"] }
tokio-stream.workspace = true

# metrics
reth-metrics.workspace = true
metrics.workspace = true

# misc
aquamarine.workspace = true
thiserror.workspace = true
tracing.workspace = true
rustc-hash.workspace = true
schnellru.workspace = true
serde = { workspace = true, features = ["derive", "rc"], optional = true }
bitflags.workspace = true
auto_impl.workspace = true
smallvec.workspace = true

# testing
rand = { workspace = true, optional = true }
paste = { workspace = true, optional = true }
proptest = { workspace = true, optional = true }
proptest-arbitrary-interop = { workspace = true, optional = true }

[dev-dependencies]
reth-primitives = { workspace = true, features = ["arbitrary"] }
reth-provider = { workspace = true, features = ["test-utils"] }
reth-tracing.workspace = true
paste.workspace = true
rand.workspace = true
proptest.workspace = true
proptest-arbitrary-interop.workspace = true
criterion.workspace = true
pprof = { workspace = true, features = ["criterion", "flamegraph"] }
assert_matches.workspace = true
tempfile.workspace = true
serde_json.workspace = true

[features]
default = ["serde"]
serde = [
    "dep:serde",
    "reth-execution-types/serde",
    "reth-eth-wire-types/serde",
    "reth-provider/serde",
    "alloy-consensus/serde",
    "alloy-eips/serde",
    "alloy-primitives/serde",
    "bitflags/serde",
    "parking_lot/serde",
    "rand?/serde",
    "smallvec/serde",
    "reth-primitives-traits/serde",
    "revm-interpreter/serde",
    "revm-primitives/serde",
]
test-utils = [
    "rand",
    "paste",
    "serde",
    "reth-chain-state/test-utils",
    "reth-chainspec/test-utils",
    "reth-primitives/test-utils",
    "reth-provider/test-utils",
    "reth-primitives-traits/test-utils",
]
arbitrary = [
    "proptest",
    "reth-primitives/arbitrary",
    "proptest-arbitrary-interop",
    "reth-chainspec/arbitrary",
    "reth-eth-wire-types/arbitrary",
    "alloy-consensus/arbitrary",
    "alloy-eips/arbitrary",
    "alloy-primitives/arbitrary",
    "bitflags/arbitrary",
    "reth-primitives-traits/arbitrary",
    "smallvec/arbitrary",
    "revm-interpreter/arbitrary",
    "revm-primitives/arbitrary",
]

[[bench]]
name = "truncate"
required-features = ["test-utils", "arbitrary"]
harness = false

[[bench]]
name = "reorder"
required-features = ["test-utils", "arbitrary"]
harness = false

[[bench]]
name = "priority"
required-features = ["arbitrary"]
harness = false
