[package] # Crate metadata name = "zebrad" version = "1.5.2" authors = ["Zcash Foundation "] description = "The Zcash Foundation's independent, consensus-compatible implementation of a Zcash node" license = "MIT OR Apache-2.0" repository = "https://github.com/ZcashFoundation/zebra" readme = "../README.md" homepage = "https://zfnd.org/zebra/" # crates.io is limited to 5 keywords and categories keywords = ["zebra", "zcash"] # Must be one of categories = ["command-line-utilities", "cryptography::cryptocurrencies"] # Settings that impact compilation edition = "2021" # Zebra is only supported on the latest stable Rust version. See the README for details. # Any Zebra release can break compatibility with older Rust versions. rust-version = "1.73" # Settings that impact runtime behaviour # make `cargo run` use `zebrad` by default # when run in the workspace directory default-run = "zebrad" # `cargo release` settings [package.metadata.release] pre-release-replacements = [ {file="../book/src/user/install.md", search="git checkout [a-z0-9\\.-]+", replace="git checkout v{{version}}"}, {file="../book/src/user/install.md", search="--tag [a-z0-9\\.-]+", replace="--tag v{{version}}"}, {file="../book/src/user/docker.md", search="--branch [a-z0-9\\.-]+", replace="--branch v{{version}}"}, ] [package.metadata.docs.rs] # Publish Zebra's supported production and developer features on docs.rs. # (Except for the log level features, because there are a lot of them.) # # features = [ "default-release-binaries", "filter-reload", "flamegraph", "journald", "prometheus", "sentry", ] [features] # In release builds, don't compile debug logging code, to improve performance. default = ["release_max_level_info", "progress-bar", "getblocktemplate-rpcs"] # Default features for official ZF binary release builds default-release-binaries = ["default", "sentry"] # Production features that activate extra dependencies, or extra features in dependencies # Mining RPC support getblocktemplate-rpcs = [ "zebra-rpc/getblocktemplate-rpcs", "zebra-consensus/getblocktemplate-rpcs", "zebra-state/getblocktemplate-rpcs", "zebra-node-services/getblocktemplate-rpcs", "zebra-chain/getblocktemplate-rpcs", ] # Experimental internal miner support internal-miner = [ "thread-priority", "zebra-chain/internal-miner", # TODO: move common code into zebra-chain or zebra-node-services and remove the RPC dependency "zebra-rpc/internal-miner", "zebra-rpc/getblocktemplate-rpcs", ] # Experimental shielded blockchain scanning shielded-scan = ["zebra-scan"] # Experimental elasticsearch indexing elasticsearch = [ "zebra-state/elasticsearch", ] # Tracing and monitoring sentry = ["dep:sentry"] journald = ["tracing-journald"] filter-reload = ["hyper"] progress-bar = [ "howudoin", "indicatif", "zebra-consensus/progress-bar", "zebra-state/progress-bar", "zebra-network/progress-bar", ] prometheus = ["metrics-exporter-prometheus"] # Production features that modify dependency behaviour # Enable additional error debugging in release builds error-debug = ["color-eyre/track-caller", "color-eyre/capture-spantrace"] # Remove verbose logging at compile-time in release or all builds. # # Release builds are defined as "cfg(not(debug_assertions))". # https://docs.rs/tracing/latest/tracing/level_filters/index.html#compile-time-filters release_max_level_warn = ["tracing/release_max_level_warn", "log/release_max_level_warn"] release_max_level_info = ["tracing/release_max_level_info", "log/release_max_level_info"] release_max_level_debug = ["tracing/release_max_level_debug", "log/release_max_level_debug"] max_level_warn = ["tracing/max_level_warn", "log/max_level_warn"] max_level_info = ["tracing/max_level_info", "log/max_level_info"] max_level_debug = ["tracing/max_level_debug", "log/max_level_debug"] # Testing features that activate extra dependencies flamegraph = ["tracing-flame", "inferno"] proptest-impl = [ "proptest", "proptest-derive", "zebra-consensus/proptest-impl", "zebra-state/proptest-impl", "zebra-network/proptest-impl", "zebra-chain/proptest-impl", "zebra-scan?/proptest-impl", ] # Build the zebra-checkpoints utility for checkpoint generation tests zebra-checkpoints = [ "zebra-utils/zebra-checkpoints", ] # The gRPC tests also need an installed lightwalletd binary lightwalletd-grpc-tests = ["tonic-build"] # tokio-console support # # To activate this feature, run: # ```sh # RUSTFLAGS="--cfg tokio_unstable" cargo build --no-default-features --features="tokio-console" --bin zebrad # ``` # # The console-subscriber is incompatible with the tracing/max_level_* features. # # For more details, see: # https://github.com/tokio-rs/console/blob/main/console-subscriber/README.md#enabling-tokio-instrumentation tokio-console = ["console-subscriber"] # TODO: replace with environmental variables that skip the tests when not set (part of #2995) test_sync_to_mandatory_checkpoint_mainnet = [] test_sync_to_mandatory_checkpoint_testnet = [] test_sync_past_mandatory_checkpoint_mainnet = [] test_sync_past_mandatory_checkpoint_testnet = [] [dependencies] zebra-chain = { path = "../zebra-chain", version = "1.0.0-beta.34" } zebra-consensus = { path = "../zebra-consensus", version = "1.0.0-beta.34" } zebra-network = { path = "../zebra-network", version = "1.0.0-beta.34" } zebra-node-services = { path = "../zebra-node-services", version = "1.0.0-beta.34" } zebra-rpc = { path = "../zebra-rpc", version = "1.0.0-beta.34" } zebra-state = { path = "../zebra-state", version = "1.0.0-beta.34" } # Experimental shielded-scan feature zebra-scan = { path = "../zebra-scan", version = "0.1.0-alpha.3", optional = true } # Required for crates.io publishing, but it's only used in tests zebra-utils = { path = "../zebra-utils", version = "1.0.0-beta.34", optional = true } abscissa_core = "0.7.0" clap = { version = "4.5.0", features = ["cargo"] } chrono = { version = "0.4.34", default-features = false, features = ["clock", "std"] } humantime-serde = "1.1.1" indexmap = "2.2.3" lazy_static = "1.4.0" semver = "1.0.21" serde = { version = "1.0.196", features = ["serde_derive"] } toml = "0.8.10" futures = "0.3.30" rayon = "1.8.1" tokio = { version = "1.36.0", features = ["time", "rt-multi-thread", "macros", "tracing", "signal"] } tokio-stream = { version = "0.1.14", features = ["time"] } tower = { version = "0.4.13", features = ["hedge", "limit"] } pin-project = "1.1.4" color-eyre = { version = "0.6.2", default-features = false, features = ["issue-url"] } # This is a transitive dependency via color-eyre. # Enable a feature that makes tinyvec compile much faster. tinyvec = { version = "1.6.0", features = ["rustc_1_55"] } thiserror = "1.0.57" tracing-subscriber = { version = "0.3.18", features = ["env-filter"] } tracing-appender = "0.2.3" tracing-error = "0.2.0" tracing-futures = "0.2.5" tracing = "0.1.39" metrics = "0.22.1" dirs = "5.0.1" atty = "0.2.14" num-integer = "0.1.46" rand = "0.8.5" # prod feature internal-miner thread-priority = { version = "0.15.1", optional = true } # prod feature sentry sentry = { version = "0.32.2", default-features = false, features = ["backtrace", "contexts", "reqwest", "rustls", "tracing"], optional = true } # prod feature flamegraph tracing-flame = { version = "0.2.0", optional = true } inferno = { version = "0.11.19", default-features = false, optional = true } # prod feature journald tracing-journald = { version = "0.3.0", optional = true } # prod feature filter-reload hyper = { version = "0.14.28", features = ["http1", "http2", "server"], optional = true } # prod feature prometheus metrics-exporter-prometheus = { version = "0.13.1", default-features = false, features = ["http-listener"], optional = true } # prod feature release_max_level_info # # zebrad uses tracing for logging, # we only use `log` to set and print the static log levels in transitive dependencies log = "0.4.20" # prod feature progress-bar howudoin = { version = "0.1.2", features = ["term-line"], optional = true } indicatif = { version = "0.17.8", optional = true } # test feature proptest-impl proptest = { version = "1.4.0", optional = true } proptest-derive = { version = "0.4.0", optional = true } # test feature tokio-console console-subscriber = { version = "0.2.0", optional = true } [build-dependencies] vergen = { version = "8.3.1", default-features = false, features = ["cargo", "git", "git2", "rustc"] } # test feature lightwalletd-grpc-tests tonic-build = { version = "0.11.0", optional = true } [dev-dependencies] abscissa_core = { version = "0.7.0", features = ["testing"] } hex = "0.4.3" hex-literal = "0.4.1" jsonrpc-core = "18.0.0" once_cell = "1.18.0" regex = "1.10.3" insta = { version = "1.33.0", features = ["json"] } # zebra-rpc needs the preserve_order feature, it also makes test results more stable serde_json = { version = "1.0.113", features = ["preserve_order"] } tempfile = "3.10.0" hyper = { version = "0.14.28", features = ["http1", "http2", "server"]} tracing-test = { version = "0.2.4", features = ["no-env-filter"] } tokio = { version = "1.36.0", features = ["full", "tracing", "test-util"] } tokio-stream = "0.1.14" # test feature lightwalletd-grpc-tests prost = "0.12.2" tonic = "0.11.0" proptest = "1.4.0" proptest-derive = "0.4.0" # enable span traces and track caller in tests color-eyre = { version = "0.6.2" } zebra-chain = { path = "../zebra-chain", features = ["proptest-impl"] } zebra-consensus = { path = "../zebra-consensus", features = ["proptest-impl"] } zebra-network = { path = "../zebra-network", features = ["proptest-impl"] } zebra-state = { path = "../zebra-state", features = ["proptest-impl"] } zebra-scan = { path = "../zebra-scan", features = ["proptest-impl"] } zebra-node-services = { path = "../zebra-node-services", features = ["rpc-client"] } zebra-test = { path = "../zebra-test" } zebra-grpc = { path = "../zebra-grpc" } # Used by the checkpoint generation tests via the zebra-checkpoints feature # (the binaries in this crate won't be built unless their features are enabled). # # Currently, we use zebra-utils/tests/build_utils_for_zebrad_tests.rs as a workaround # to build the zebra-checkpoints utility for the zebrad acceptance tests. # # When `-Z bindeps` is stabilised, enable this binary dependency instead: # https://github.com/rust-lang/cargo/issues/9096 # zebra-utils { path = "../zebra-utils", artifact = "bin:zebra-checkpoints" } zebra-utils = { path = "../zebra-utils" }