[package]
name = "blvm-node"
version = "0.1.45"
edition = "2024"
authors = ["Bitcoin Commons Team"]
description = "Bitcoin Commons BLVM: Minimal Bitcoin node implementation using blvm-protocol and blvm-consensus"
license = "MIT"
repository = "https://github.com/BTCDecoded/blvm-node"
homepage = "https://btcdecoded.org"
documentation = "https://docs.rs/blvm-node"
keywords = ["bitcoin", "node", "blockchain", "cryptocurrency", "p2p"]
categories = ["cryptography::cryptocurrencies", "network-programming"]
rust-version = "1.85"
[lints.rust]
unexpected_cfgs = { level = "warn", check-cfg = ['cfg(feature, values("governance", "erlay", "rayon", "wasm-modules"))'] }
unused_variables = "allow"
unused_comparisons = "allow"
unused_doc_comments = "allow"
[lints.clippy]
assertions_on_constants = "allow"
too_many_arguments = "allow"
single_match = "allow"
field_reassign_with_default = "allow"
[package.metadata.docs.rs]
all-features = true
rustdoc-args = ["--cfg", "docsrs"]
[dependencies]
blvm-protocol = { version = ">=0.1, <1" }
blvm-consensus = { version = ">=0.1, <1", optional = true }
blvm-spec-lock = { version = ">=0.1, <1", optional = true, default-features = false }
blvm-muhash = { version = ">=0.1, <1" }
sled = { version = "=0.34.7", optional = true }
redb = { version = "=1.4", optional = true }
rocksdb = { version = "=0.24.0", optional = true }
rusty-leveldb = { version = "4", optional = true }
heed3 = { version = "=0.22.1", optional = true, default-features = false }
rkyv = { version = "=0.8.16", optional = true, features = ["bytecheck"] }
tidesdb = { git = "https://github.com/tidesdb/tidesdb-rs.git", rev = "2c128540b02400a538475d992a122d940eb93da3", version = "0.6.7", optional = true }
tokio = { version = "=1.48.0", features = [
"macros",
"rt",
"rt-multi-thread",
"sync",
"time",
"net",
"io-util",
"fs",
"process",
"signal",
] }
tokio-util = { version = "=0.7.17", features = ["codec", "io"] }
futures = "=0.3.31"
http = "=1.1.0"
http-body-util = "=0.1.1"
hyper = { version = "=1.8.0", features = ["server", "http1", "http2"] }
hyper-util = { version = "=0.1.18", features = ["server", "http1", "tokio"] }
serde = { version = "=1.0.228", features = ["derive"] }
serde_json = "=1.0.133"
serde_bytes = "=0.11.19"
bincode = "=1.3.3"
bytes = "=1.11.1"
toml = "=0.8.2"
blvm-secp256k1 = { version = ">=0.1, <1" }
sha2 = "=0.10.9"
ripemd = "=0.1.3"
hex = "=0.4.3"
siphasher = "=0.3"
rustc-hash = "=2.1.1"
zeroize = { version = "=1.8.2", features = ["zeroize_derive"] }
constant_time_eq = "=0.3"
time = { version = ">=0.3.47", default-features = false }
aes-gcm = "=0.10.3"
hkdf = "=0.12.4"
rand = "=0.8.5"
dirs = "=5.0"
smallvec = { version = "=1.15.1", features = ["serde", "const_generics"] }
crossbeam-channel = "=0.5"
parking_lot = "=0.12"
rayon = { version = "1", optional = true }
anyhow = "=1.0.93"
thiserror = "=1.0.69"
tracing = "=0.1.41"
tracing-subscriber = { version = "=0.3.20", features = ["env-filter"] }
clap = { version = "=4.4.11", features = ["derive"] }
async-trait = "=0.1.75"
bitflags = "^2.6"
lru = "=0.16.4"
dashmap = "=6.0"
sysinfo = { version = "=0.30", optional = true }
reqwest = { version = "=0.12", optional = true, features = ["json"] }
[target.'cfg(target_os = "linux")'.dependencies]
io-uring = "0.7"
[target.'cfg(not(target_os = "windows"))'.dependencies]
mimalloc = { version = "=0.1", default-features = false, optional = true }
libmimalloc-sys = { version = "=0.1", features = ["extended"], optional = true }
nix = { version = "=0.28", features = ["process", "resource"], optional = true }
libc = { version = "=0.2", optional = true }
zstd = { version = "=0.13", optional = true }
notify = { version = "=6.1", optional = true }
iroh = { version = "=0.95", optional = true }
quinn = { version = "=0.11", optional = true }
rcgen = { version = "=0.12", optional = true }
rustls = { version = "=0.23", optional = true }
h3 = { version = "=0.0.8", optional = true }
h3-quinn = { version = "=0.0.10", optional = true }
[target.'cfg(target_os = "windows")'.dependencies]
windows-sys = { version = "=0.59", features = ["Win32_System_JobObjects", "Win32_System_Threading", "Win32_Foundation", "Win32_Security"] }
[features]
default = ["sysinfo", "heed3", "rocksdb", "nix", "libc", "production", "governance", "utxo-commitments", "protocol-verification"]
iroh = ["dep:iroh"]
quinn = ["dep:quinn", "dep:rcgen", "dep:rustls", "dep:h3", "dep:h3-quinn"]
utxo-commitments = ["blvm-protocol/utxo-commitments"]
stratum-v2 = []
sigop = []
sysinfo = ["dep:sysinfo"]
sled = ["dep:sled"]
redb = ["dep:redb"]
rocksdb = ["dep:rocksdb", "dep:rusty-leveldb"]
tidesdb = ["dep:tidesdb"]
heed3 = ["dep:heed3", "dep:rkyv"]
nix = ["dep:nix", "dep:libc"]
libc = ["dep:libc"]
rayon = ["dep:rayon"]
production = ["blvm-protocol/production", "dep:blvm-consensus", "rayon", "mimalloc", "libc"]
profile = ["blvm-protocol/profile", "dep:blvm-consensus"]
dandelion = ["dep:blvm-spec-lock", "blvm-protocol/dandelion"]
protocol-verification = ["dep:blvm-spec-lock", "blvm-protocol/protocol-verification"]
ctv = ["blvm-protocol/ctv", "dep:blvm-consensus"]
governance = ["dep:reqwest"]
mimalloc = ["dep:mimalloc", "dep:libmimalloc-sys"]
json-logging = []
rest-api = []
bip70-http = ["rest-api"]
module-watcher = ["dep:notify"]
wasm-modules = []
coverage-tests = []
block-compression = ["dep:zstd"]
utxo-compression = ["dep:zstd"]
witness-compression = ["dep:zstd"]
compression = ["block-compression", "utxo-compression", "witness-compression"]
[dev-dependencies]
blvm-protocol = { version = ">=0.1, <1", features = ["test-utils"] }
blvm-consensus = { version = ">=0.1, <1", features = ["test-utils"] }
tempfile = "=3.8.1"
rand = "0.8"
getrandom = "=0.2.17"
criterion = "=0.5.1"
proptest = "=1.5.0"
dhat = "=0.3"
serial_test = "=3.0"
[profile.release]
opt-level = 3
lto = false
codegen-units = 256
strip = true
panic = "abort"
[profile.release.package."*"]
opt-level = 3
[profile.release-fast]
inherits = "release"
opt-level = 2
[profile.release-fast.package."*"]
opt-level = 2
[profile.bench]
opt-level = 3
debug = false
strip = false
lto = "thin"
codegen-units = 16
[[example]]
name = "electrum-integration"
path = "examples/electrum-integration.rs"
[[example]]
name = "wallet-integration"
path = "examples/wallet-integration.rs"
[[example]]
name = "verify_heed3"
path = "examples/verify_heed3.rs"
required-features = ["heed3"]
[[bin]]
name = "convert-bitcoin-core-config"
path = "tools/convert-bitcoin-core-config.rs"
[[bin]]
name = "migrate-bitcoin-core"
path = "tools/migrate-bitcoin-core.rs"
required-features = ["rocksdb"]
[[test]]
name = "bip157_handler_coverage_suite"
path = "tests/bip157_handler_coverage_suite.rs"
required-features = ["coverage-tests"]
[[test]]
name = "blockchain_rpc_coverage_suite"
path = "tests/blockchain_rpc_coverage_suite.rs"
required-features = ["coverage-tests"]
[[test]]
name = "chainstate_coverage_suite"
path = "tests/chainstate_coverage_suite.rs"
required-features = ["coverage-tests"]
[[test]]
name = "control_rpc_coverage_suite"
path = "tests/control_rpc_coverage_suite.rs"
required-features = ["coverage-tests"]
[[test]]
name = "event_publisher_coverage_suite"
path = "tests/event_publisher_coverage_suite.rs"
required-features = ["coverage-tests"]
[[test]]
name = "hooks_manager_coverage_suite"
path = "tests/hooks_manager_coverage_suite.rs"
required-features = ["coverage-tests"]
[[test]]
name = "inter_module_coverage_suite"
path = "tests/inter_module_coverage_suite.rs"
required-features = ["coverage-tests"]
[[test]]
name = "mempool_rpc_coverage_suite"
path = "tests/mempool_rpc_coverage_suite.rs"
required-features = ["coverage-tests"]
[[test]]
name = "metrics_manager_coverage_suite"
path = "tests/metrics_manager_coverage_suite.rs"
required-features = ["coverage-tests"]
[[test]]
name = "mining_rpc_coverage_suite"
path = "tests/mining_rpc_coverage_suite.rs"
required-features = ["coverage-tests"]
[[test]]
name = "module_api_blockchain_coverage_suite"
path = "tests/module_api_blockchain_coverage_suite.rs"
required-features = ["coverage-tests"]
[[test]]
name = "module_integration_coverage_suite"
path = "tests/module_integration_coverage_suite.rs"
required-features = ["coverage-tests"]
[[test]]
name = "module_manager_coverage_suite"
path = "tests/module_manager_coverage_suite.rs"
required-features = ["coverage-tests"]
[[test]]
name = "module_registry_cas_coverage_suite"
path = "tests/module_registry_cas_coverage_suite.rs"
required-features = ["coverage-tests"]
[[test]]
name = "module_registry_manifest_coverage_suite"
path = "tests/module_registry_manifest_coverage_suite.rs"
required-features = ["coverage-tests"]
[[test]]
name = "network_manager_coverage_suite"
path = "tests/network_manager_coverage_suite.rs"
required-features = ["coverage-tests"]
[[test]]
name = "network_rpc_coverage_suite"
path = "tests/network_rpc_coverage_suite.rs"
required-features = ["coverage-tests"]
[[test]]
name = "node_api_ipc_coverage_suite"
path = "tests/node_api_ipc_coverage_suite.rs"
required-features = ["coverage-tests"]
[[test]]
name = "node_api_ipc_wrapper_coverage_suite"
path = "tests/node_api_ipc_wrapper_coverage_suite.rs"
required-features = ["coverage-tests"]
[[test]]
name = "node_mempool_coverage_suite"
path = "tests/node_mempool_coverage_suite.rs"
required-features = ["coverage-tests"]
[[test]]
name = "node_mod_coverage_suite"
path = "tests/node_mod_coverage_suite.rs"
required-features = ["coverage-tests"]
[[test]]
name = "payment_settlement_coverage_suite"
path = "tests/payment_settlement_coverage_suite.rs"
required-features = ["coverage-tests"]
[[test]]
name = "pruning_coverage_suite"
path = "tests/pruning_coverage_suite.rs"
required-features = ["coverage-tests"]
[[test]]
name = "rawtx_rpc_coverage_suite"
path = "tests/rawtx_rpc_coverage_suite.rs"
required-features = ["coverage-tests"]
[[test]]
name = "rpc_auth_coverage_suite"
path = "tests/rpc_auth_coverage_suite.rs"
required-features = ["coverage-tests"]
[[test]]
name = "rpc_server_coverage_suite"
path = "tests/rpc_server_coverage_suite.rs"
required-features = ["coverage-tests"]
[[test]]
name = "run_loop_coverage_suite"
path = "tests/run_loop_coverage_suite.rs"
required-features = ["coverage-tests"]
[[test]]
name = "serialization_cache_coverage_suite"
path = "tests/serialization_cache_coverage_suite.rs"
required-features = ["coverage-tests"]
[[test]]
name = "storage_bounds_coverage_suite"
path = "tests/storage_bounds_coverage_suite.rs"
required-features = ["coverage-tests"]
[[test]]
name = "storage_database_coverage_suite"
path = "tests/storage_database_coverage_suite.rs"
required-features = ["coverage-tests"]
[[test]]
name = "storage_mod_coverage_suite"
path = "tests/storage_mod_coverage_suite.rs"
required-features = ["coverage-tests"]
[[test]]
name = "timer_manager_coverage_suite"
path = "tests/timer_manager_coverage_suite.rs"
required-features = ["coverage-tests"]
[[test]]
name = "validation_mod_coverage_suite"
path = "tests/validation_mod_coverage_suite.rs"
required-features = ["coverage-tests"]