[package]
name = "reth-optimism-primitives"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
license.workspace = true
homepage.workspace = true
repository.workspace = true
description = "OP primitive types"

[lints]
workspace = true

[dependencies]
# reth
reth-primitives-traits = { workspace = true, features = ["op"] }
reth-codecs = { workspace = true, optional = true, features = ["op"] }
reth-zstd-compressors = { workspace = true, optional = true }

# ethereum
alloy-evm.workspace = true
alloy-primitives.workspace = true
alloy-consensus.workspace = true
alloy-rlp.workspace = true
alloy-eips = { workspace = true, features = ["k256"] }
revm-context.workspace = true
revm-optimism.workspace = true
secp256k1 = { workspace = true, optional = true }

# op
op-alloy-consensus.workspace = true
alloy-rpc-types-eth = { workspace = true, optional = true }
alloy-network = { workspace = true, optional = true }
alloy-serde = { workspace = true, optional = true }

# codec
bytes = { workspace = true, optional = true }
modular-bitfield = { workspace = true, optional = true }
serde = { workspace = true, optional = true }

# misc
derive_more = { workspace = true, features = ["deref", "from", "into", "constructor"] }
rand = { workspace = true, optional = true }

# test
arbitrary = { workspace = true, features = ["derive"], optional = true }
proptest = { workspace = true, optional = true }

[dev-dependencies]
arbitrary.workspace = true
proptest-arbitrary-interop.workspace = true
proptest.workspace = true
rand.workspace = true
reth-codecs = { workspace = true, features = ["test-utils", "op"] }
rstest.workspace = true
secp256k1 = { workspace = true, features = ["rand"] }
serde_json.workspace = true

[features]
default = ["std"]
std = [
    "reth-primitives-traits/std",
    "reth-codecs?/std",
    "alloy-consensus/std",
    "alloy-eips/std",
    "alloy-primitives/std",
    "serde?/std",
    "bytes?/std",
    "derive_more/std",
    "secp256k1?/std",
    "alloy-rlp/std",
    "reth-zstd-compressors?/std",
    "op-alloy-consensus/std",
    "revm-optimism/std",
    "alloy-rpc-types-eth?/std",
    "alloy-serde?/std",
    "revm-context/std",
    "serde_json/std",
    "alloy-evm/std",
]
alloy-compat = ["dep:alloy-network", "dep:alloy-serde", "dep:alloy-rpc-types-eth", "op-alloy-consensus/alloy-compat"]
reth-codec = [
    "dep:reth-codecs",
    "std",
    "dep:proptest",
    "reth-primitives-traits/reth-codec",
    "reth-codecs?/op",
    "dep:bytes",
    "dep:modular-bitfield",
    "dep:reth-zstd-compressors",
]
serde = [
    "dep:serde",
    "reth-primitives-traits/serde",
    "alloy-primitives/serde",
    "alloy-consensus/serde",
    "alloy-eips/serde",
    "bytes?/serde",
    "reth-codecs?/serde",
    "op-alloy-consensus/serde",
    "rand?/serde",
    "secp256k1?/serde",
    "revm-optimism/serde",
    "alloy-rpc-types-eth?/serde",
    "revm-context/serde",
]
serde-bincode-compat = [
    "alloy-consensus/serde-bincode-compat",
    "alloy-eips/serde-bincode-compat",
    "op-alloy-consensus/serde-bincode-compat",
    "reth-primitives-traits/serde-bincode-compat",
]
arbitrary = [
    "std",
    "dep:arbitrary",
    "dep:secp256k1",
    "secp256k1?/rand",
    "reth-primitives-traits/arbitrary",
    "reth-codecs?/arbitrary",
    "op-alloy-consensus/arbitrary",
    "alloy-consensus/arbitrary",
    "alloy-eips/arbitrary",
    "alloy-primitives/arbitrary",
    "rand",
    "alloy-rpc-types-eth?/arbitrary",
    "alloy-serde?/arbitrary",
]
