Go to file
teor 8cf62b4a17
change(deps): Update dependencies that only appear in the lock file (#6217)
* Manually update duplicate dependency exceptions

* Update the release checklist to check for missed dependency updates

* Fix a clippy "unused result" lint

* Run `cargo update`

Output:
```
$ cargo update
    Updating crates.io index
    Updating addr2line v0.17.0 -> v0.19.0
    Updating ahash v0.8.2 -> v0.8.3
    Updating aho-corasick v0.7.18 -> v0.7.20
    Updating anyhow v1.0.69 -> v1.0.70
    Updating arrayref v0.3.6 -> v0.3.7
    Updating async-stream v0.3.2 -> v0.3.4
    Updating async-stream-impl v0.3.2 -> v0.3.4
    Updating async-trait v0.1.52 -> v0.1.67
    Updating axum v0.5.17 -> v0.6.12
    Updating axum-core v0.2.9 -> v0.3.3
    Updating backtrace v0.3.64 -> v0.3.67
    Updating base64 v0.13.0 -> v0.13.1
    Updating bit-set v0.5.2 -> v0.5.3
    Removing block-buffer v0.7.3
    Removing block-buffer v0.10.2
      Adding block-buffer v0.10.4
    Removing block-padding v0.1.5
    Updating bls12_381 v0.7.0 -> v0.7.1
    Updating bstr v0.2.17 -> v1.4.0
    Updating byte-slice-cast v1.2.1 -> v1.2.2
    Removing byte-tools v0.3.1
    Updating bytemuck v1.8.0 -> v1.13.1
    Updating cc v1.0.73 -> v1.0.79
    Removing chunked_transfer v1.4.0
    Updating cipher v0.4.3 -> v0.4.4
    Updating clang-sys v1.3.1 -> v1.6.0
    Updating clap v3.2.20 -> v3.2.23
    Updating console v0.15.4 -> v0.15.5
    Updating constant_time_eq v0.2.4 -> v0.2.5
    Updating crossbeam-channel v0.5.4 -> v0.5.7
    Updating crossbeam-deque v0.8.1 -> v0.8.3
    Updating crossbeam-epoch v0.9.7 -> v0.9.14
    Updating crossbeam-utils v0.8.7 -> v0.8.15
      Adding cxx-build v1.0.93
    Updating cxx-gen v0.7.74 -> v0.7.93
    Updating darling v0.14.1 -> v0.14.4
    Updating darling_core v0.14.1 -> v0.14.4
    Updating darling_macro v0.14.1 -> v0.14.4
    Removing digest v0.8.1
    Removing digest v0.10.5
      Adding digest v0.10.6
    Updating dirs-sys v0.3.6 -> v0.3.7
    Updating either v1.6.1 -> v1.8.1
    Updating encoding_rs v0.8.30 -> v0.8.32
    Updating enum-iterator v1.2.0 -> v1.4.0
    Updating enum-iterator-derive v1.1.0 -> v1.2.0
    Updating eyre v0.6.7 -> v0.6.8
    Removing fake-simd v0.1.2
    Updating fastrand v1.7.0 -> v1.9.0
    Updating ff v0.12.0 -> v0.12.1
    Updating fixedbitset v0.4.1 -> v0.4.2
    Updating flate2 v1.0.22 -> v1.0.25
    Updating form_urlencoded v1.0.1 -> v1.1.0
    Removing generic-array v0.12.4
    Removing generic-array v0.14.5
      Adding generic-array v0.14.6
    Updating gimli v0.26.1 -> v0.27.2
    Updating glob v0.3.0 -> v0.3.1
    Updating globset v0.4.8 -> v0.4.10
    Updating h2 v0.3.11 -> v0.3.16
    Updating hashbrown v0.12.1 -> v0.12.3
    Updating hdrhistogram v7.5.0 -> v7.5.2
    Updating heck v0.4.0 -> v0.4.1
    Updating http v0.2.8 -> v0.2.9
    Removing http-range-header v0.3.0
    Updating hyper-rustls v0.23.0 -> v0.23.2
    Updating iana-time-zone v0.1.46 -> v0.1.54
      Adding iana-time-zone-haiku v0.1.1
    Updating idna v0.2.3 -> v0.3.0
    Updating io-lifetimes v1.0.4 -> v1.0.9
    Updating ipnet v2.4.0 -> v2.7.1
    Updating is-terminal v0.4.4 -> v0.4.5
    Updating itoa v1.0.4 -> v1.0.6
    Updating jobserver v0.1.24 -> v0.1.26
    Updating js-sys v0.3.59 -> v0.3.61
    Updating libc v0.2.139 -> v0.2.140
    Updating libloading v0.7.3 -> v0.7.4
    Updating libm v0.2.2 -> v0.2.6
    Updating libz-sys v1.1.4 -> v1.1.8
    Updating link-cplusplus v1.0.7 -> v1.0.8
    Updating lock_api v0.4.6 -> v0.4.9
    Removing maplit v1.0.2
    Removing matches v0.1.9
    Updating matchit v0.5.0 -> v0.7.0
    Updating memoffset v0.6.5 -> v0.8.0
    Updating mime v0.3.16 -> v0.3.17
    Updating miniz_oxide v0.4.4 -> v0.6.2
    Updating minreq v2.6.0 -> v2.7.0
    Updating mio v0.8.4 -> v0.8.6
    Updating net2 v0.2.37 -> v0.2.38
    Updating nom v7.1.0 -> v7.1.3
    Updating num-format v0.4.3 -> v0.4.4
    Updating num-traits v0.2.14 -> v0.2.15
    Updating object v0.27.1 -> v0.30.3
    Removing opaque-debug v0.2.3
    Updating openssl v0.10.38 -> v0.10.48
      Adding openssl-macros v0.1.0
    Updating openssl-sys v0.9.72 -> v0.9.83
    Updating os_info v3.5.1 -> v3.7.0
    Updating os_str_bytes v6.3.0 -> v6.5.0
    Updating parity-scale-codec v3.1.2 -> v3.4.0
    Updating parity-scale-codec-derive v3.1.2 -> v3.1.4
    Updating parking_lot v0.12.0 -> v0.12.1
    Removing parking_lot_core v0.8.5
    Removing parking_lot_core v0.9.1
      Adding parking_lot_core v0.8.6
      Adding parking_lot_core v0.9.7
    Updating pasta_curves v0.4.0 -> v0.4.1
    Updating percent-encoding v2.1.0 -> v2.2.0
    Updating pest v2.1.3 -> v2.5.6
    Updating pest_derive v2.1.0 -> v2.5.6
    Updating pest_generator v2.1.3 -> v2.5.6
    Updating pest_meta v2.1.3 -> v2.5.6
    Updating petgraph v0.6.0 -> v0.6.3
    Updating pkg-config v0.3.24 -> v0.3.26
    Updating plotters v0.3.1 -> v0.3.4
    Updating plotters-backend v0.3.2 -> v0.3.4
    Updating plotters-svg v0.3.1 -> v0.3.3
    Updating portable-atomic v0.3.15 -> v0.3.19
    Updating ppv-lite86 v0.2.16 -> v0.2.17
    Updating prettyplease v0.1.9 -> v0.1.25
    Updating proc-macro-crate v1.1.3 -> v1.3.1
    Updating proc-macro2 v1.0.52 -> v1.0.53
    Updating prost-build v0.11.1 -> v0.11.8
    Updating prost-types v0.11.1 -> v0.11.8
    Updating raw-cpuid v10.2.0 -> v10.7.0
    Updating redox_syscall v0.2.11 -> v0.2.16
    Updating redox_users v0.4.0 -> v0.4.3
    Updating rgb v0.8.32 -> v0.8.36
    Updating rustc-demangle v0.1.21 -> v0.1.22
    Updating rustix v0.36.7 -> v0.36.11
    Updating rustls v0.20.7 -> v0.20.8
    Updating rustls-pemfile v1.0.0 -> v1.0.2
    Updating rustversion v1.0.11 -> v1.0.12
    Updating ryu v1.0.9 -> v1.0.13
    Updating schannel v0.1.19 -> v0.1.21
      Adding scratch v1.0.5
    Updating security-framework v2.6.1 -> v2.8.2
    Updating security-framework-sys v2.6.1 -> v2.8.0
    Removing sha-1 v0.8.2
      Adding sha2 v0.10.6
    Updating signal-hook-registry v1.4.0 -> v1.4.1
    Updating similar v2.1.0 -> v2.2.1
    Updating slab v0.4.5 -> v0.4.8
    Updating socket2 v0.4.7 -> v0.4.9
    Removing syn v1.0.104
    Removing syn v2.0.3
      Adding syn v1.0.109
      Adding syn v2.0.8
    Updating sync_wrapper v0.1.1 -> v0.1.2
    Updating termcolor v1.1.3 -> v1.2.0
    Updating textwrap v0.15.0 -> v0.16.0
    Updating thread_local v1.1.4 -> v1.1.7
    Removing time v0.1.44
    Removing time v0.3.17
      Adding time v0.1.43
      Adding time v0.3.20
    Updating time-macros v0.2.6 -> v0.2.8
    Updating tinyvec_macros v0.1.0 -> v0.1.1
    Updating tokio-macros v1.7.0 -> v1.8.2
    Updating tokio-native-tls v0.3.0 -> v0.3.1
    Updating tokio-rustls v0.23.2 -> v0.23.4
    Updating tokio-util v0.6.9 -> v0.6.10
    Updating toml_edit v0.19.7 -> v0.19.8
    Updating tonic v0.8.2 -> v0.8.3
    Updating tonic-build v0.8.2 -> v0.8.4
    Removing tower-http v0.3.4
    Updating tower-layer v0.3.1 -> v0.3.2
    Updating tower-service v0.3.1 -> v0.3.2
    Updating try-lock v0.2.3 -> v0.2.4
    Updating typenum v1.15.0 -> v1.16.0
    Updating ucd-trie v0.1.3 -> v0.1.5
    Updating unicode-bidi v0.3.7 -> v0.3.13
    Updating unicode-ident v1.0.2 -> v1.0.8
    Updating unicode-normalization v0.1.19 -> v0.1.22
    Updating unicode-segmentation v1.9.0 -> v1.10.1
    Updating unicode-width v0.1.9 -> v0.1.10
    Updating unicode-xid v0.2.2 -> v0.2.4
    Updating ureq v2.5.0 -> v2.6.2
    Updating url v2.2.2 -> v2.3.1
    Updating uuid v1.1.0 -> v1.3.0
    Updating walkdir v2.3.2 -> v2.3.3
    Updating wasi v0.10.0+wasi-snapshot-preview1 -> v0.10.2+wasi-snapshot-preview1
    Updating wasm-bindgen v0.2.82 -> v0.2.84
    Updating wasm-bindgen-backend v0.2.82 -> v0.2.84
    Updating wasm-bindgen-futures v0.4.29 -> v0.4.34
    Updating wasm-bindgen-macro v0.2.82 -> v0.2.84
    Updating wasm-bindgen-macro-support v0.2.82 -> v0.2.84
    Updating wasm-bindgen-shared v0.2.82 -> v0.2.84
    Updating web-sys v0.3.56 -> v0.3.61
    Updating webpki-roots v0.22.5 -> v0.22.6
    Updating which v4.2.4 -> v4.4.0
      Adding windows v0.46.0
    Removing windows-sys v0.32.0
    Removing windows-sys v0.36.1
    Updating windows-targets v0.42.1 -> v0.42.2
    Updating windows_aarch64_gnullvm v0.42.1 -> v0.42.2
    Removing windows_aarch64_msvc v0.32.0
    Removing windows_aarch64_msvc v0.36.1
    Removing windows_aarch64_msvc v0.42.1
      Adding windows_aarch64_msvc v0.42.2
    Removing windows_i686_gnu v0.32.0
    Removing windows_i686_gnu v0.36.1
    Removing windows_i686_gnu v0.42.1
      Adding windows_i686_gnu v0.42.2
    Removing windows_i686_msvc v0.32.0
    Removing windows_i686_msvc v0.36.1
    Removing windows_i686_msvc v0.42.1
      Adding windows_i686_msvc v0.42.2
    Removing windows_x86_64_gnu v0.32.0
    Removing windows_x86_64_gnu v0.36.1
   Removing windows_x86_64_gnu v0.42.1
      Adding windows_x86_64_gnu v0.42.2
    Updating windows_x86_64_gnullvm v0.42.1 -> v0.42.2
    Removing windows_x86_64_msvc v0.32.0
    Removing windows_x86_64_msvc v0.36.1
    Removing windows_x86_64_msvc v0.42.1
      Adding windows_x86_64_msvc v0.42.2
    Updating winnow v0.3.6 -> v0.4.0
    Updating wyz v0.5.0 -> v0.5.1
    Updating zeroize_derive v1.3.2 -> v1.3.3
```

* Update deny.toml
2023-03-26 23:53:17 +00:00
.cargo fix(clippy): Silence future-incompat warnings until we upgrade Abscissa (#6024) 2023-01-24 16:27:56 +00:00
.github change(deps): Update dependencies that only appear in the lock file (#6217) 2023-03-26 23:53:17 +00:00
book v1.0.0-rc.6 release (#6314) 2023-03-24 01:24:29 +00:00
docker feat(release): create Docker hub binary with mining enabled on release (#6228) 2023-03-24 07:10:40 +00:00
grafana change(state): Add block channel metrics, in preparation for block fork metrics (#5327) 2022-10-20 20:02:58 +00:00
tower-batch v1.0.0-rc.6 release (#6314) 2023-03-24 01:24:29 +00:00
tower-fallback v1.0.0-rc.6 release (#6314) 2023-03-24 01:24:29 +00:00
zebra-chain v1.0.0-rc.6 release (#6314) 2023-03-24 01:24:29 +00:00
zebra-client Repoint zebra image links to our new zfnd.org site for now (#3949) 2022-03-27 23:42:47 +00:00
zebra-consensus change(state): Stop re-downloading blocks that are in non-finalized side chains (#6335) 2023-03-24 07:10:07 +00:00
zebra-network Ignore Firo non-Zcash nodes in Zebra's address book (#6398) 2023-03-24 07:08:24 +00:00
zebra-node-services v1.0.0-rc.6 release (#6314) 2023-03-24 01:24:29 +00:00
zebra-rpc v1.0.0-rc.6 release (#6314) 2023-03-24 01:24:29 +00:00
zebra-script v1.0.0-rc.6 release (#6314) 2023-03-24 01:24:29 +00:00
zebra-state change(state): Stop re-downloading blocks that are in non-finalized side chains (#6335) 2023-03-24 07:10:07 +00:00
zebra-test change(deps): Update dependencies that only appear in the lock file (#6217) 2023-03-26 23:53:17 +00:00
zebra-utils v1.0.0-rc.6 release (#6314) 2023-03-24 01:24:29 +00:00
zebrad change(state): Stop re-downloading blocks that are in non-finalized side chains (#6335) 2023-03-24 07:10:07 +00:00
.codespellrc build(deps): Bump `zcash_proofs` to 0.8.0 (#5481) 2022-10-28 06:58:02 +00:00
.dockerignore fix(build): avoid docker cache contamination and invalidation (#4254) 2022-05-03 10:13:28 -04:00
.gitattributes Show `Cargo.lock` files in the github diff view (#6249) 2023-02-28 20:06:32 +00:00
.gitignore fix: improve file and directories to be ignored by git and Docker (#3399) 2022-01-26 06:22:51 +00:00
CHANGELOG.md v1.0.0-rc.6 release (#6314) 2023-03-24 01:24:29 +00:00
CODE_OF_CONDUCT.md CODE_OF_CONDUCT.md (#1097) 2021-03-25 10:54:08 +01:00
CONTRIBUTING.md docs: fix typo (#3877) 2022-03-22 22:01:35 -04:00
Cargo.lock change(deps): Update dependencies that only appear in the lock file (#6217) 2023-03-26 23:53:17 +00:00
Cargo.toml change(deps): upgrade zcash_script and zcash dependencies (#4926) 2022-09-02 07:24:29 +00:00
LICENSE-APACHE Update copyright year in Apache License (#6140) 2023-02-12 22:46:21 +00:00
LICENSE-MIT Update copyright year in MIT License (#6131) 2023-02-12 22:46:11 +00:00
README.md v1.0.0-rc.6 release (#6314) 2023-03-24 01:24:29 +00:00
SECURITY.md Explicitly allow unencrypted disclosures for alpha releases (#2127) 2021-05-11 14:41:33 +02:00
clippy.toml
codecov.yml Re-enable code coverage comments on PRs (#3246) 2021-12-22 00:52:08 +00:00
deny.toml change(deps): Update dependencies that only appear in the lock file (#6217) 2023-03-26 23:53:17 +00:00
firebase.json
katex-header.html
prometheus.yaml

README.md

Zebra logotype


CI Docker CI OSes Continuous Delivery Coverage codecov Build docs Build lightwalletd Build Zcash Params

License

Contents

About

Zebra is the Zcash Foundation's independent, consensus-compatible implementation of a Zcash node, currently under development. It can be used to join the Zcash peer-to-peer network, which helps keeping Zcash working by validating and broadcasting transactions, and maintaining the Zcash blockchain state in a distributed manner.

Zcash is a cryptocurrency designed to preserve the user's privacy. If you just want to send and receive Zcash then you don't need to use Zebra directly. You can download a Zcash wallet application which will handle that for you.

Please join us on Discord if you'd like to find out more or get involved!

Using Zebra

You would want to run Zebra if you want to contribute to the Zcash network: the more nodes are run, the more reliable the network will be in terms of speed and resistance to denial of service attacks, for example.

Zebra aims to be faster, more secure, and more easily extensible than other Zcash implementations.

Release Candidates

Every few weeks, we release a new Zebra version.

Zebra's network stack is interoperable with zcashd, and Zebra implements all the features required to reach Zcash network consensus. Currently, Zebra validates all of the Zcash consensus rules for the NU5 network upgrade.

Zebra validates blocks and transactions, but needs extra software to generate them:

Getting Started

You can run Zebra using our Docker image. This command will run our latest release, and sync it to the tip:

docker run zfnd/zebra:1.0.0-rc.6

For more information, read our Docker documentation.

Building Zebra

Building Zebra requires Rust, libclang, pkg-config, and a C++ compiler.

Zebra is tested with the latest stable Rust version. Earlier versions are not supported or tested. Note that Zebra's code currently uses features introduced in Rust 1.65, or any later stable release.

Below are quick summaries for installing the dependencies on your machine.

General instructions for installing dependencies

  1. Install cargo and rustc.

  2. Install Zebra's build dependencies:

    • libclang is a library that might have different names depending on your package manager. Typical names are libclang, libclang-dev, llvm, or llvm-dev.
    • clang or another C++ compiler: g++ (all platforms) or Xcode (macOS).
    • pkg-config

Dependencies on Arch

sudo pacman -S rust clang pkgconf

Note that the package clang includes libclang as well as the C++ compiler.

Once the dependencies are in place, you can build Zebra

cargo install --locked --git https://github.com/ZcashFoundation/zebra --tag v1.0.0-rc.6 zebrad

You can start Zebra by

zebrad start

See the Running Zebra section in the book for more details.

Optional Features

You can also build Zebra with the following Cargo features:

You can arbitrarily combine the features by listing them as parameters of the --features flag:

cargo install --features="<feature1> <feature2> ..." ...

The features are also described in the API documentation. The debugging and monitoring features are disabled in release builds to increase performance.

Configuring JSON-RPC for lightwalletd

To use zebrad as a lightwalletd backend, give it this ~/.config/zebrad.toml:

[rpc]
# listen for RPC queries on localhost
listen_addr = '127.0.0.1:8232'

# automatically use multiple CPU threads
parallel_cpu_threads = 0

WARNING: This config allows multiple Zebra instances to share the same RPC port. See the RPC config documentation for details.

lightwalletd also requires a zcash.conf file.

It is recommended to use adityapk00/lightwalletd because that is used in testing. Other lightwalletd forks have limited support, see the detailed lightwalletd instructions.

System Requirements

The recommended requirements for compiling and running zebrad are:

  • 4 CPU cores
  • 16 GB RAM
  • 300 GB available disk space for building binaries and storing cached chain state
  • 100 Mbps network connection, with 300 GB of uploads and downloads per month

We continuously test that our builds and tests pass on:

The latest GitHub Runners for:

  • macOS
  • Ubuntu

Docker:

  • Debian Bullseye

Zebra's tests can take over an hour, depending on your machine. We're working on making them faster.

zebrad might build and run fine on smaller and slower systems - we haven't tested its exact limits yet.

For more detailed requirements, refer to the documentation.

Memory Troubleshooting

If Zebra's build runs out of RAM, try setting: export CARGO_BUILD_JOBS=2

If Zebra's tests timeout or run out of RAM, try running: cargo test -- --test-threads=2

(cargo uses all the processor cores on your machine by default.)

macOS Test Troubleshooting

Some of Zebra's tests deliberately cause errors that make Zebra panic. macOS records these panics as crash reports.

If you are seeing "Crash Reporter" dialogs during Zebra tests, you can disable them using this Terminal.app command:

defaults write com.apple.CrashReporter DialogType none

Network Ports and Data Usage

Zebra uses the following inbound and outbound TCP ports:

  • 8233 on Mainnet
  • 18233 on Testnet

Outbound connections are required to sync, inbound connections are optional. Zebra also needs access to the Zcash DNS seeders, via the OS DNS resolver (usually port 53).

Zebra needs some peers which have a round-trip latency of 2 seconds or less. If this is a problem for you, please open a ticket.

zebrad's typical mainnet network usage is:

  • Initial sync: 100 GB download, we expect the initial download to grow to hundreds of gigabytes over time
  • Ongoing updates: 10 MB - 10 GB upload and download per day, depending on user-created transaction size and peer requests

Zebra performs an initial sync every time its internal database version changes, so some version upgrades might require a full download of the whole chain.

For more detailed information, refer to the documentation.

Network Troubleshooting

Some of Zebra's tests download Zcash blocks, so they might be unreliable depending on your network connection. You can set ZEBRA_SKIP_NETWORK_TESTS=1 to skip the network tests.

Zebra may be unreliable on Testnet, and under less-than-perfect network conditions. See our roadmap for details.

Disk Usage

Zebra uses around 200 GB of space for cached mainnet data, and 10 GB of space for cached testnet data. We expect disk usage to grow over time, so we recommend reserving at least 300 GB for mainnet nodes.

Zebra's database cleans up outdated data periodically, and when Zebra is shut down and restarted.

Disk Troubleshooting

Zebra's state commits changes using RocksDB database transactions.

If you forcibly terminate Zebra, or it panics, any incomplete changes will be rolled back the next time it starts.

So Zebra's state should always be valid, unless your OS or disk hardware is corrupting data.

Known Issues

There are a few bugs in Zebra that we're still working on fixing:

  • If Zebra fails downloading the Zcash parameters, use the Zcash parameters download script instead.

  • Block download and verification sometimes times out during Zebra's initial sync #5709. The full sync still finishes reasonably quickly.

  • No Windows support #3801. We used to test with Windows Server 2019, but not any more; see the issue for details.

  • Experimental Tor support is disabled until Zebra upgrades to the latest arti-client. This happened due to a Rust dependency conflict, which could only be resolved by arti upgrading to a version of x25519-dalek with the dependency fix.

  • Orchard proofs fail to verify when Zebra is compiled with Rust 1.69 (nightly Rust). This will be resolved in the next Orchard release after 0.3.0.

  • Output of help, --help flag, and usage of invalid commands or options are inconsistent #5502. See the issue for details.

Future Work

Performance and Reliability:

  • Reliable syncing under poor network conditions
  • Additional batch verification
  • Performance tuning

Currently, the following features are out of scope:

  • Optional Zcash network protocol messages
  • Consensus rules removed before Canopy activation (Zebra checkpoints on Canopy activation)

Documentation

The Zebra website contains user documentation, such as how to run or configure Zebra, set up metrics integrations, etc., as well as developer documentation, such as design documents. We also render API documentation for the external API of our crates, as well as internal documentation for private APIs.

Security

Zebra has a responsible disclosure policy, which we encourage security researchers to follow.

License

Zebra is distributed under the terms of both the MIT license and the Apache License (Version 2.0).

See LICENSE-APACHE and LICENSE-MIT.