[package] name = "zcash_client_backend" description = "APIs for creating shielded Zcash light clients" version = "0.12.1" authors = [ "Jack Grigg ", "Kris Nuttycombe " ] homepage = "https://github.com/zcash/librustzcash" repository.workspace = true readme = "README.md" license.workspace = true edition.workspace = true rust-version.workspace = true categories.workspace = true # Exclude proto files so crates.io consumers don't need protoc. exclude = ["*.proto"] [package.metadata.cargo-udeps.ignore] development = ["zcash_proofs"] [package.metadata.docs.rs] # Manually specify features while `orchard` is not in the public API. #all-features = true features = [ "lightwalletd-tonic", "transparent-inputs", "test-dependencies", "tor", "unstable", "unstable-serialization", "unstable-spanning-tree", ] rustdoc-args = ["--cfg", "docsrs"] [dependencies] zcash_address.workspace = true zcash_encoding.workspace = true zcash_keys = { workspace = true, features = ["sapling"] } zcash_note_encryption.workspace = true zcash_primitives.workspace = true zcash_protocol.workspace = true zip32.workspace = true zip321.workspace = true # Dependencies exposed in a public API: # (Breaking upgrades to these require a breaking upgrade to this crate.) # - Data Access API time = "0.3.22" nonempty.workspace = true # - CSPRNG rand_core.workspace = true # - Encodings base64.workspace = true bech32.workspace = true bs58.workspace = true # - Errors bip32 = { workspace = true, optional = true } # - Logging and metrics memuse.workspace = true tracing.workspace = true # - Protobuf interfaces and gRPC bindings hex.workspace = true prost.workspace = true tonic = { workspace = true, optional = true, features = ["prost", "codegen"] } # - Secret management secrecy.workspace = true subtle.workspace = true # - Shielded protocols bls12_381.workspace = true group.workspace = true orchard = { workspace = true, optional = true } sapling.workspace = true # - Sync engine async-trait = { version = "0.1", optional = true } futures-util = { version = "0.3", optional = true } # - Note commitment trees incrementalmerkletree.workspace = true shardtree.workspace = true # - Test dependencies proptest = { workspace = true, optional = true } jubjub = { workspace = true, optional = true } # - ZIP 321 nom = "7" # - Tor # -- Exposed error types: `arti_client::Error`, `arti_client::config::ConfigBuildError`, # `hyper::Error`, `hyper::http::Error`, `serde_json::Error`. We could avoid this with # changes to error handling. arti-client = { workspace = true, optional = true } hyper = { workspace = true, optional = true, features = ["client", "http1"] } serde_json = { workspace = true, optional = true } # - Currency conversion rust_decimal = { workspace = true, optional = true } # Dependencies used internally: # (Breaking upgrades to these are usually backwards-compatible, but check MSRVs.) # - Documentation document-features.workspace = true # - Encodings byteorder = { workspace = true, optional = true } percent-encoding.workspace = true # - Scanning crossbeam-channel.workspace = true rayon.workspace = true # - Tor tokio = { workspace = true, optional = true, features = ["fs"] } tor-rtcompat = { workspace = true, optional = true } # - HTTP through Tor http-body-util = { workspace = true, optional = true } hyper-util = { workspace = true, optional = true } rand = { workspace = true, optional = true } serde = { workspace = true, optional = true } tokio-rustls = { workspace = true, optional = true } webpki-roots = { workspace = true, optional = true } [build-dependencies] tonic-build = { workspace = true, features = ["prost"] } which = "4" [dev-dependencies] assert_matches.workspace = true gumdrop = "0.8" incrementalmerkletree = { workspace = true, features = ["test-dependencies"] } jubjub.workspace = true proptest.workspace = true rand_core.workspace = true shardtree = { workspace = true, features = ["test-dependencies"] } zcash_proofs.workspace = true zcash_address = { workspace = true, features = ["test-dependencies"] } zcash_keys = { workspace = true, features = ["test-dependencies"] } tokio = { version = "1.21.0", features = ["rt-multi-thread"] } [features] ## Enables the `tonic` gRPC client bindings for connecting to a `lightwalletd` server. lightwalletd-tonic = ["dep:tonic"] ## Enables the `transport` feature of `tonic` producing a fully-featured client and server implementation lightwalletd-tonic-transport = ["lightwalletd-tonic", "tonic?/transport"] ## Enables receiving transparent funds and shielding them. transparent-inputs = [ "dep:bip32", "zcash_keys/transparent-inputs", "zcash_primitives/transparent-inputs", ] ## Enables receiving and spending Orchard funds. orchard = ["dep:orchard", "zcash_keys/orchard"] ## Exposes a wallet synchronization function that implements the necessary state machine. sync = [ "lightwalletd-tonic", "dep:async-trait", "dep:futures-util", ] ## Exposes a Tor client for hiding a wallet's IP address while performing certain wallet ## operations. tor = [ "dep:arti-client", "dep:async-trait", "dep:futures-util", "dep:http-body-util", "dep:hyper", "dep:hyper-util", "dep:rand", "dep:rust_decimal", "dep:serde", "dep:serde_json", "dep:tokio", "dep:tokio-rustls", "dep:tor-rtcompat", "dep:webpki-roots", ] ## Exposes APIs that are useful for testing, such as `proptest` strategies. test-dependencies = [ "dep:proptest", "dep:jubjub", "orchard?/test-dependencies", "zcash_keys/test-dependencies", "zcash_primitives/test-dependencies", "incrementalmerkletree/test-dependencies", ] #! ### Experimental features ## Exposes unstable APIs. Their behaviour may change at any time. unstable = ["dep:byteorder", "zcash_keys/unstable"] ## Exposes APIs for unstable serialization formats. These may change at any time. unstable-serialization = ["dep:byteorder"] ## Exposes the [`data_api::scanning::spanning_tree`] module. unstable-spanning-tree = [] [lib] bench = false [badges] maintenance = { status = "actively-developed" }