diff --git a/CHANGELOG.md b/CHANGELOG.md index efb264110..89e1c01b0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,104 @@ All notable changes to Zebra are documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org). +## [Zebra 1.0.0-beta.14](https://github.com/ZcashFoundation/zebra/releases/tag/v1.0.0-beta.13) - 2022-08-30 + +This release contains a variety of CI fixes, test fixes and dependency updates. +It contains two breaking changes: + +- the recommended disk capacity for Zebra is now 300 GB, and the recommended network bandwidth is 100 GB per month, and +- when no command is provided on the command line, `zebrad` automatically starts syncing (like `zcashd`). + +The sync performance of `lightwalletd` is also improved. + +### Added + +- Store history trees by height in the non-finalized state (#4928) +- Breaking: Add `start` as default subcommand for `zebrad` (#4957) + +### Changed + +- Fix a performance regression when serving blocks via the Zcash network protocol and RPCs (#4933) +- Update block hash checkpoints for mainnet (#4919, #4972) +- Enable a `tinyvec` feature to speed up compilation (#4796) +- Split the `zebra_state::service::read` module (#4827) +- Disallow Orchard `ivk = 0` on `IncomingViewingKey::from` & `SpendingKey` generation (#3962) + +#### Docs + +- Increase disk and network requirements for long-term deployment (#4948, #4963) +- Update supported Rust versions in `README.md` (#4938) +- Document edge cases in sync workflows (#4973) +- Add missing status badges & sections (#4817) + +#### Rust Dependencies + +- Bump `serde` from 1.0.137 to 1.0.144 (#4865, #4876, #4925) +- Bump `serde_json` from 1.0.81 to 1.0.83 (#4727, #4877) +- Bump `serde_with` from 1.14.0 to 2.0.0 (#4785) +- Bump `futures` from 0.3.21 to 0.3.23 (#4913) +- Bump `futures-core` from 0.3.21 to 0.3.23 (#4915) +- Bump `chrono` from 0.4.19 to 0.4.20 (#4898) +- Bump `criterion` from 0.3.5 to 0.3.6 (#4761) +- Bump `thiserror` from 1.0.31 to 1.0.32 (#4878) +- Bump `vergen` from 7.2.1 to 7.3.2 (#4890) +- Bump `tinyvec` from 1.5.1 to 1.6.0 (#4888) +- Bump `insta` from 1.15.0 to 1.17.1 (#4884) +- Bump `semver` from 1.0.12 to 1.0.13 (#4879) +- Bump `bytes` from 1.1.0 to 1.2.1 (#4843) +- Bump `tokio` from 1.20.0 to 1.20.1 (#4864) +- Bump `hyper` from 0.14.19 to 0.14.20 (#4764) +- Bump `once_cell` from 1.12.0 to 1.13.0 (#4749) +- Bump `regex` from 1.5.6 to 1.6.0 (#4755) +- Bump `inferno` from 0.11.6 to 0.11.7 (#4829) + +#### CI Dependencies + +- Bump `actions/github-script` from 6.1.0 to 6.2.0 (#4986) +- Bump `reviewdog/action-actionlint` from 1.27.0 to 1.29.0 (#4923, #4987) +- Bump `tj-actions/changed-files` from 24 to 29.0.2 (#4936, #4959, #4985) +- Bump `w9jds/firebase-action` from 2.2.2 to 11.5.0 (#4905) +- Bump `docker/build-push-action` from 3.0.0 to 3.1.1 (#4797, #4895) + +### Fixed + +- Increase the number of blocks checked for legacy transactions (#4804) + +#### CI + +- Split a long full sync job (#5001) +- Stop cancelling manual full syncs (#5000) +- Run a single CI workflow as required (#4981) +- Fix some clippy warnings (#4927, #4931) +- Improve Zebra acceptance test diagnostics (#4958) +- Expand cached state disks before running tests (#4962) +- Increase full sync timeouts for longer syncs (#4961) +- Fix a regular expression typo in a full sync job (#4950) +- Write cached state images after update syncs, and use the latest image from any commit (#4949) +- Increase CI disk size to 200GB (#4945) +- Make sure Rust tests actually run in `deploy-gcp-tests.yml` (#4710) +- Copy lightwalletd from the correct path during Docker builds (#4886) +- Use FHS for deployments and artifacts (#4786) +- Retry gcloud authentication if it fails (#4940) +- Disable beta Rust tests and add parameter download logging (#4930) +- Do not run versioning job when pushing to main (#4970) +- Deploy long running node instances on release (#4939) +- Run build and test jobs on cargo and clippy config changes (#4941) +- Increase Mergify batch sizes (#4947) + +#### Networking + +- Send height to peers (#4904) +- Fix handshake timing and error handling (#4772) + +#### Tests + +- Show full Zebra test panic details in CI logs (#4942) +- Update timeout for Zebra sync tests (#4918) +- Improve test reliability and performance (#4869) +- Use `FuturesOrdered` in `fallback_verification` test (#4867) +- Skip some RPC tests when `ZEBRA_SKIP_NETWORK_TESTS` is set (#4849) +- Truncate the number of transactions in send transaction test (#4848) ## [Zebra 1.0.0-beta.13](https://github.com/ZcashFoundation/zebra/releases/tag/v1.0.0-beta.13) - 2022-07-29 diff --git a/Cargo.lock b/Cargo.lock index 72d36cf7d..bcceb62b6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5453,7 +5453,7 @@ dependencies = [ [[package]] name = "tower-batch" -version = "0.2.28" +version = "0.2.29" dependencies = [ "color-eyre", "ed25519-zebra", @@ -5477,7 +5477,7 @@ dependencies = [ [[package]] name = "tower-fallback" -version = "0.2.28" +version = "0.2.29" dependencies = [ "futures-core", "pin-project 0.4.29", @@ -6307,7 +6307,7 @@ dependencies = [ [[package]] name = "zebra-chain" -version = "1.0.0-beta.13" +version = "1.0.0-beta.14" dependencies = [ "aes", "bech32", @@ -6371,7 +6371,7 @@ version = "1.0.0-beta.0" [[package]] name = "zebra-consensus" -version = "1.0.0-beta.13" +version = "1.0.0-beta.14" dependencies = [ "bellman", "blake2b_simd 1.0.0", @@ -6415,7 +6415,7 @@ dependencies = [ [[package]] name = "zebra-network" -version = "1.0.0-beta.13" +version = "1.0.0-beta.14" dependencies = [ "arti-client", "bitflags", @@ -6453,14 +6453,14 @@ dependencies = [ [[package]] name = "zebra-node-services" -version = "1.0.0-beta.13" +version = "1.0.0-beta.14" dependencies = [ "zebra-chain", ] [[package]] name = "zebra-rpc" -version = "1.0.0-beta.13" +version = "1.0.0-beta.14" dependencies = [ "chrono", "futures", @@ -6489,7 +6489,7 @@ dependencies = [ [[package]] name = "zebra-script" -version = "1.0.0-beta.13" +version = "1.0.0-beta.14" dependencies = [ "displaydoc", "hex", @@ -6502,7 +6502,7 @@ dependencies = [ [[package]] name = "zebra-state" -version = "1.0.0-beta.13" +version = "1.0.0-beta.14" dependencies = [ "bincode", "chrono", @@ -6539,7 +6539,7 @@ dependencies = [ [[package]] name = "zebra-test" -version = "1.0.0-beta.13" +version = "1.0.0-beta.14" dependencies = [ "color-eyre", "futures", @@ -6566,7 +6566,7 @@ dependencies = [ [[package]] name = "zebra-utils" -version = "1.0.0-beta.13" +version = "1.0.0-beta.14" dependencies = [ "color-eyre", "hex", @@ -6582,7 +6582,7 @@ dependencies = [ [[package]] name = "zebrad" -version = "1.0.0-beta.13" +version = "1.0.0-beta.14" dependencies = [ "abscissa_core", "atty", diff --git a/README.md b/README.md index fe669b66f..85470f0a7 100644 --- a/README.md +++ b/README.md @@ -79,14 +79,14 @@ install mechanism. To run `zebrad`, follow the instructions to compile `zebrad` for your platform: 1. Install [`cargo` and `rustc`](https://www.rust-lang.org/tools/install). - - Zebra is tested with the latest `stable` Rust version. - Earlier versions are not supported or tested. - Any Zebra release can remove support for older Rust versions, without any notice. - (Rust 1.59 and earlier are definitely not supported, due to missing features.) + - Zebra is tested with the latest `stable` Rust version. + Earlier versions are not supported or tested. + Any Zebra release can remove support for older Rust versions, without any notice. + (Rust 1.59 and earlier are definitely not supported, due to missing features.) 2. Install Zebra's build dependencies: - - **libclang:** the `libclang`, `libclang-dev`, `llvm`, or `llvm-dev` packages, depending on your package manager - - **clang** or another C++ compiler: `g++`, `Xcode`, or `MSVC` -3. Run `cargo install --locked --git https://github.com/ZcashFoundation/zebra --tag v1.0.0-beta.13 zebrad` + - **libclang:** the `libclang`, `libclang-dev`, `llvm`, or `llvm-dev` packages, depending on your package manager + - **clang** or another C++ compiler: `g++`, `Xcode`, or `MSVC` +3. Run `cargo install --locked --git https://github.com/ZcashFoundation/zebra --tag v1.0.0-beta.14 zebrad` 4. Run `zebrad start` (see [Running Zebra](https://zebra.zfnd.org/user/run.html) for more information) For more detailed instructions, refer to the [documentation](https://zebra.zfnd.org/user/install.html). @@ -96,6 +96,7 @@ For more detailed instructions, refer to the [documentation](https://zebra.zfnd. For performance reasons, some debugging and monitoring features are disabled in release builds. You can [enable these features](https://doc.zebra.zfnd.org/zebrad/index.html#zebra-feature-flags) using: + ```sh cargo install --features= ... ``` @@ -103,18 +104,21 @@ cargo install --features= ... ### 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 +- 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](https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources) for: +The _latest_ [GitHub Runners](https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources) for: + - macOS - Ubuntu Docker: + - Debian Bullseye Zebra's tests can take over an hour, depending on your machine. @@ -142,6 +146,7 @@ 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: + ```sh defaults write com.apple.CrashReporter DialogType none ``` @@ -149,6 +154,7 @@ defaults write com.apple.CrashReporter DialogType none ### Network Ports and Data Usage By default, Zebra uses the following inbound TCP listener ports: + - 8233 on Mainnet - 18233 on Testnet @@ -157,6 +163,7 @@ If this is a problem for you, please [open a ticket.](https://github.com/ZcashFoundation/zebra/issues/new/choose) `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 @@ -192,37 +199,24 @@ So Zebra's state should always be valid, unless your OS or disk hardware is corr ## Known Issues There are a few bugs in Zebra that we're still working on fixing: + - No Windows support [#3801](https://github.com/ZcashFoundation/zebra/issues/3801) - We used to test with Windows Server 2019, but not anymore; see issue for details ### Performance -We are working on improving Zebra performance, the following are known issues: -- Send note commitment and history trees from the non-finalized state to the finalized state [#4824](https://github.com/ZcashFoundation/zebra/issues/4824) -- Speed up opening the database [#4822](https://github.com/ZcashFoundation/zebra/issues/4822) -- Revert note commitment and history trees when forking non-finalized chains [#4794](https://github.com/ZcashFoundation/zebra/issues/4794) -- Store only the first tree state in each identical series of tree states [#4784](https://github.com/ZcashFoundation/zebra/issues/4784) - -RPCs might also be slower than they used to be, we need to check: - Revert deserializing state transactions in rayon threads [#4831](https://github.com/ZcashFoundation/zebra/issues/4831) -Ongoing investigations: -- Find out which parts of CommitBlock/CommitFinalizedBlock are slow [#4823](https://github.com/ZcashFoundation/zebra/issues/4823) -- Mini-Epic: Stop tokio tasks running for a long time and blocking other tasks [#4747](https://github.com/ZcashFoundation/zebra/issues/4747) -- Investigate busiest tasks per tokio-console [#4583](https://github.com/ZcashFoundation/zebra/issues/4583) - ## Future Work -Features: -- Wallet functionality - Performance and Reliability: + - Reliable syncing under poor network conditions - Additional batch verification - Performance tuning Currently, the following features are out of scope: -- Mining support + - Optional Zcash network protocol messages - Consensus rules removed before Canopy activation (Zebra checkpoints on Canopy activation) @@ -230,7 +224,7 @@ Currently, the following features are out of scope: The [Zebra website](https://zebra.zfnd.org/) 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 +developer documentation, such as design documents. We also render [API documentation](https://doc.zebra.zfnd.org) for the external API of our crates, as well as [internal documentation](https://doc-internal.zebra.zfnd.org) for private APIs. diff --git a/book/src/user/install.md b/book/src/user/install.md index 7ce8fafbb..c72dd01bf 100644 --- a/book/src/user/install.md +++ b/book/src/user/install.md @@ -5,11 +5,11 @@ install mechanism. To run `zebrad`, follow the instructions to compile `zebrad` for your platform: 1. Install [`cargo` and `rustc`](https://www.rust-lang.org/tools/install). - - Using `rustup` installs the stable Rust toolchain, which `zebrad` targets. + - Using `rustup` installs the stable Rust toolchain, which `zebrad` targets. 2. Install Zebra's build dependencies: - - **libclang:** the `libclang`, `libclang-dev`, `llvm`, or `llvm-dev` packages, depending on your package manager - - **clang** or another C++ compiler: `g++`, `Xcode`, or `MSVC` -3. Run `cargo install --locked --git https://github.com/ZcashFoundation/zebra --tag v1.0.0-beta.13 zebrad` + - **libclang:** the `libclang`, `libclang-dev`, `llvm`, or `llvm-dev` packages, depending on your package manager + - **clang** or another C++ compiler: `g++`, `Xcode`, or `MSVC` +3. Run `cargo install --locked --git https://github.com/ZcashFoundation/zebra --tag v1.0.0-beta.14 zebrad` 4. Run `zebrad start` (see [Running Zebra](run.md) for more information) If you're interested in testing out `zebrad` please feel free, but keep in mind @@ -20,27 +20,30 @@ that there is a lot of key functionality still missing. If you're having trouble with: Dependencies: + - use `cargo install` without `--locked` to build with the latest versions of each dependency - **sqlite linker errors:** libsqlite3 is an optional dependency of the `zebra-network/tor` feature. If you don't have it installed, you might see errors like `note: /usr/bin/ld: cannot find -lsqlite3`. [Follow the arti instructions](https://gitlab.torproject.org/tpo/core/arti/-/blob/main/CONTRIBUTING.md#setting-up-your-development-environment) to install libsqlite3, or use one of these commands instead: + ```sh cargo build cargo build -p zebrad --all-features ``` Compilers: + - **clang:** install both `libclang` and `clang` - they are usually different packages - **libclang:** check out the [clang-sys documentation](https://github.com/KyleMayes/clang-sys#dependencies) - **g++ or MSVC++:** try using clang or Xcode instead - **rustc:** use rustc 1.58 or later - Zebra does not have a minimum supported Rust version (MSRV) policy yet - ### Dependencies Zebra primarily depends on pure Rust crates, and some Rust/C++ crates: + - [rocksdb](https://crates.io/crates/rocksdb) - [zcash_script](https://crates.io/crates/zcash_script) diff --git a/tower-batch/Cargo.toml b/tower-batch/Cargo.toml index 47c2b4ec2..84bda2af5 100644 --- a/tower-batch/Cargo.toml +++ b/tower-batch/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tower-batch" -version = "0.2.28" +version = "0.2.29" authors = ["Zcash Foundation "] license = "MIT" edition = "2021" diff --git a/tower-fallback/Cargo.toml b/tower-fallback/Cargo.toml index d3c9e4919..c4bf9621e 100644 --- a/tower-fallback/Cargo.toml +++ b/tower-fallback/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tower-fallback" -version = "0.2.28" +version = "0.2.29" authors = ["Zcash Foundation "] license = "MIT" edition = "2021" diff --git a/zebra-chain/Cargo.toml b/zebra-chain/Cargo.toml index 7870d095e..290dfaaf8 100644 --- a/zebra-chain/Cargo.toml +++ b/zebra-chain/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "zebra-chain" -version = "1.0.0-beta.13" +version = "1.0.0-beta.14" authors = ["Zcash Foundation "] license = "MIT OR Apache-2.0" edition = "2021" diff --git a/zebra-consensus/Cargo.toml b/zebra-consensus/Cargo.toml index 5800a84cb..65a103098 100644 --- a/zebra-consensus/Cargo.toml +++ b/zebra-consensus/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "zebra-consensus" -version = "1.0.0-beta.13" +version = "1.0.0-beta.14" authors = ["Zcash Foundation "] license = "MIT OR Apache-2.0" edition = "2021" diff --git a/zebra-network/Cargo.toml b/zebra-network/Cargo.toml index 5f3776e94..df8ac85c8 100644 --- a/zebra-network/Cargo.toml +++ b/zebra-network/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "zebra-network" -version = "1.0.0-beta.13" +version = "1.0.0-beta.14" authors = ["Zcash Foundation "] license = "MIT OR Apache-2.0" edition = "2021" diff --git a/zebra-network/src/constants.rs b/zebra-network/src/constants.rs index 6e119c247..a3b1fadb8 100644 --- a/zebra-network/src/constants.rs +++ b/zebra-network/src/constants.rs @@ -242,7 +242,7 @@ pub const TIMESTAMP_TRUNCATION_SECONDS: u32 = 30 * 60; /// [BIP 14]: https://github.com/bitcoin/bips/blob/master/bip-0014.mediawiki // // TODO: generate this from crate metadata (#2375) -pub const USER_AGENT: &str = "/Zebra:1.0.0-beta.13/"; +pub const USER_AGENT: &str = "/Zebra:1.0.0-beta.14/"; /// The Zcash network protocol version implemented by this crate, and advertised /// during connection setup. diff --git a/zebra-node-services/Cargo.toml b/zebra-node-services/Cargo.toml index 65bed6466..7e5a52f4c 100644 --- a/zebra-node-services/Cargo.toml +++ b/zebra-node-services/Cargo.toml @@ -2,7 +2,7 @@ name = "zebra-node-services" authors = ["Zcash Foundation "] license = "MIT OR Apache-2.0" -version = "1.0.0-beta.13" +version = "1.0.0-beta.14" edition = "2021" repository = "https://github.com/ZcashFoundation/zebra" diff --git a/zebra-rpc/Cargo.toml b/zebra-rpc/Cargo.toml index b2203e819..303d5b270 100644 --- a/zebra-rpc/Cargo.toml +++ b/zebra-rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "zebra-rpc" -version = "1.0.0-beta.13" +version = "1.0.0-beta.14" authors = ["Zcash Foundation "] license = "MIT OR Apache-2.0" edition = "2021" diff --git a/zebra-script/Cargo.toml b/zebra-script/Cargo.toml index 4490448f8..5c97afa50 100644 --- a/zebra-script/Cargo.toml +++ b/zebra-script/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "zebra-script" -version = "1.0.0-beta.13" +version = "1.0.0-beta.14" authors = ["Zcash Foundation "] license = "MIT OR Apache-2.0" edition = "2021" diff --git a/zebra-state/Cargo.toml b/zebra-state/Cargo.toml index 44557e2fd..9c0ab8a1b 100644 --- a/zebra-state/Cargo.toml +++ b/zebra-state/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "zebra-state" -version = "1.0.0-beta.13" +version = "1.0.0-beta.14" authors = ["Zcash Foundation "] license = "MIT OR Apache-2.0" edition = "2021" diff --git a/zebra-test/Cargo.toml b/zebra-test/Cargo.toml index 3d1d93847..3300e8fc4 100644 --- a/zebra-test/Cargo.toml +++ b/zebra-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "zebra-test" -version = "1.0.0-beta.13" +version = "1.0.0-beta.14" authors = ["Zcash Foundation "] license = "MIT OR Apache-2.0" edition = "2021" diff --git a/zebra-utils/Cargo.toml b/zebra-utils/Cargo.toml index 448558682..781b29066 100644 --- a/zebra-utils/Cargo.toml +++ b/zebra-utils/Cargo.toml @@ -2,7 +2,7 @@ name = "zebra-utils" authors = ["Zcash Foundation "] license = "MIT OR Apache-2.0" -version = "1.0.0-beta.13" +version = "1.0.0-beta.14" edition = "2021" # Prevent accidental publication of this utility crate. publish = false diff --git a/zebrad/Cargo.toml b/zebrad/Cargo.toml index 5fc2ccb8f..96b112a8c 100644 --- a/zebrad/Cargo.toml +++ b/zebrad/Cargo.toml @@ -2,7 +2,7 @@ name = "zebrad" authors = ["Zcash Foundation "] license = "MIT OR Apache-2.0" -version = "1.0.0-beta.13" +version = "1.0.0-beta.14" edition = "2021" # Zebra is only supported on the latest stable Rust version. Some earlier versions might work. # Zebra uses features introduced in Rust 1.58.