[workspace]
members = [
    # binary 
    "bins/revme",

    # libraries
    "crates/revm",
    "crates/primitives",
    "crates/interpreter",
    "crates/precompile",
    "crates/database",
    "crates/database/interface",
    "crates/bytecode",
    "crates/state",
    "crates/context",
    "crates/context/interface",
    "crates/handler",

    # variants
    "crates/optimism",
    "crates/inspector",

    # utility
    "crates/statetest-types",

    # examples
    "examples/block_traces",
    #"examples/cheatcode_inspector",
    "examples/contract_deployment",
    "examples/database_components",
    "examples/uniswap_get_reserves",
    "examples/uniswap_v2_usdc_swap",
    "examples/erc20_gas",
    #"examples/custom_opcodes",
]
resolver = "2"
default-members = ["crates/revm"]

[workspace.dependencies]
# revm
revm = { path = "crates/revm", version = "20.0.0-alpha.5", default-features = false }
primitives = { path = "crates/primitives", package = "revm-primitives", version = "16.0.0-alpha.3", default-features = false }
bytecode = { path = "crates/bytecode", package = "revm-bytecode", version = "1.0.0-alpha.3", default-features = false }
database = { path = "crates/database", package = "revm-database", version = "1.0.0-alpha.3", default-features = false }
database-interface = { path = "crates/database/interface", package = "revm-database-interface", version = "1.0.0-alpha.3", default-features = false }
state = { path = "crates/state", package = "revm-state", version = "1.0.0-alpha.3", default-features = false }
interpreter = { path = "crates/interpreter", package = "revm-interpreter", version = "16.0.0-alpha.5", default-features = false }
inspector = { path = "crates/inspector", package = "revm-inspector", version = "1.0.0-alpha.5", default-features = false }
precompile = { path = "crates/precompile", package = "revm-precompile", version = "17.0.0-alpha.5", default-features = false }
statetest-types = { path = "crates/statetest-types", package = "revm-statetest-types", version = "1.0.0-alpha.4", default-features = false }
context = { path = "crates/context", package = "revm-context", version = "1.0.0-alpha.4", default-features = false }
context-interface = { path = "crates/context/interface", package = "revm-context-interface", version = "1.0.0-alpha.4", default-features = false }
handler = { path = "crates/handler", package = "revm-handler", version = "1.0.0-alpha.5", default-features = false }

# alloy 
alloy-eip2930 = { version = "0.1.0", default-features = false }
alloy-eip7702 = { version = "0.5.0", default-features = false }
alloy-primitives = { version = "0.8", default-features = false }

# alloy in examples, revme or feature flagged.
alloy-rlp = { version = "0.3", default-features = false }
alloy-sol-types = { version = "0.8.2", default-features = false }
alloy-consensus = { version = "0.12.4", default-features = false }
alloy-eips = { version = "0.12.4", default-features = false }
alloy-provider = { version = "0.12.4", default-features = false }
alloy-signer = { version = "0.12.4", default-features = false }
alloy-signer-local = { version = "0.12.4", default-features = false }
alloy-transport = { version = "0.12.4", default-features = false }
alloy-transport-http = { version = "0.12.4", default-features = false }

# misc
aurora-engine-modexp = { version = "1.1", default-features = false }
auto_impl = "1.2.0"
bitflags = { version = "2.6.0", default-features = false }
bitvec = { version = "1", default-features = false }
blst = "0.3.13"
bn = { package = "substrate-bn", version = "0.6", default-features = false }
c-kzg = { version = "1.0.0", default-features = false }
cfg-if = { version = "1.0", default-features = false }
clap = "4"
criterion = { package = "codspeed-criterion-compat", version = "2.7" }
derive-where = { version = "1.2.7", default-features = false }
enumn = "0.1"
k256 = { version = "0.13.3", default-features = false }
kzg-rs = { version = "0.2.4", default-features = false }
libsecp256k1 = { version = "0.7", default-features = false }
once_cell = { version = "1.19", default-features = false }
p256 = { version = "0.13.2", default-features = false }
paste = "1.0"
phf = { version = "0.11", default-features = false }
rand = "0.8"
reqwest = "0.12"
ripemd = { version = "0.1", default-features = false }
secp256k1 = { version = "0.30", default-features = false }
serde = { version = "1.0", default-features = false }
serde_json = { version = "1.0", default-features = false }
sha2 = { version = "0.10", default-features = false }
tokio = "1.40"

# dev-dependencies
anyhow = "1.0.89"
bincode = "1.3"
eyre = "0.6.12"
hash-db = "0.15"
indicatif = "0.17"
microbench = "0.5"
plain_hasher = "0.2"
rstest = "0.24.0"
serde_derive = "1.0"
thiserror = "2.0"
triehash = "0.8"
walkdir = "2.5"

[workspace.package]
license = "MIT"
authors = ["Dragan Rakita <dragan0rakita@gmail.com>"]
categories = ["no-std", "compilers", "cryptography::cryptocurrencies"]
keywords = ["revm", "evm", "ethereum", "blockchain", "no_std"]
repository = "https://github.com/bluealloy/revm"
documentation = "https://bluealloy.github.io/revm/"
homepage = ""
edition = "2021"

[workspace.metadata.docs.rs]
all-features = true
rustdoc-args = ["--cfg", "docsrs"]

[profile.release]
codegen-units = 16
debug = "line-tables-only"
lto = "thin"
opt-level = 3
panic = "abort"
strip = true

# Use the `--profile profiling` flag to show symbols in release mode.
# e.g. `cargo build --profile profiling`
[profile.profiling]
debug = 2
inherits = "release"
strip = false

# Make sure debug symbols are in the bench profile
[profile.bench]
inherits = "profiling"

[profile.ethtests]
inherits = "test"
opt-level = 3