diff --git a/CHANGELOG.md b/CHANGELOG.md index 4a45994e6..8457fce49 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,66 @@ 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.3.0](https://github.com/ZcashFoundation/zebra/releases/tag/v1.3.0) - 2023-10-16 + +This release adds RPC methods for the "Spend before Sync" light wallet feature, +and fixes performance issues and bugs in the mining solution rate RPCs. Progress +bars can now be enabled using a config, please help us test them! + +It contains the following updates: + +### User Testing: Progress Bars + +Zebra has progress bars! When progress bars are enabled, you can see Zebra's blocks, +transactions, and peer connections in your terminal. We're asking Zebra users to test this +feature, and give us [feedback on the forums](https://forum.zcashcommunity.com/t/zebra-progress-bars/44485). + +To show progress bars while running Zebra, add these lines to your `zebrad.toml`: +```toml +[tracing] +progress_bar = "summary" +``` + +For more details, including a known issue with time estimates, +read our [progress bars blog post](https://zfnd.org/experimental-zebra-progress-bars/). + +### Security + +- Fix database concurrency bugs that could have led to panics or incorrect history tree data (#7590, #7663) + +### Added + +- Zebra's progress bars can now be enabled using a `zebrad.toml` config (#7615) +- Add missing elasticsearch flag feature to lib docs (#7568) +- Add missing Docker variables and examples (#7552) +- Check database format is valid on startup and shutdown (#7566, #7606). We expect to catch almost all database validity errors in CI (#7602, #7627), so users are unlikely to see them on startup or shutdown. + +#### Spend before Sync Support + +- Add state requests and support code for the `z_getsubtreesbyindex` RPC (#7408, #7734) +- Implement the `z_getsubtreesbyindex` RPC (#7436) +- Test the `z_getsubtreesbyindex` RPC (#7515, #7521, #7566, #7514, #7628) +- Format subtree roots in little-endian order (#7466) +- Add note subtree indexes for new and existing blocks (#7437) +- Upgrade subtrees from the tip backwards, for compatibility with wallet syncing (#7531) +- Handle a subtree comparison edge case correctly (#7587) + +### Changed + +- Return errors instead of panicking in methods for Heights (#7591) +- Update tests for compatibility with the ECC's `lightwalletd` fork (#7349) + +### Fixed + +- Refactor docs for feature flags (#7567) +- Match zcashd's getblockchaininfo capitalisation for NU5 (#7454) +- Fix bugs and performance of `getnetworksolps` & `getnetworkhashps` RPCs (#7647) + +### Contributors + +Thank you to everyone who contributed to this release, we couldn't make Zebra without you: +@arya2, @gustavovalverde, @oxarbitrage, @rex4539, @teor2345 and @upbqdn. + ## [Zebra 1.2.0](https://github.com/ZcashFoundation/zebra/releases/tag/v1.2.0) - 2023-09-01 ### Highlights diff --git a/Cargo.lock b/Cargo.lock index 4c8629e1c..23b663a7c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4571,7 +4571,7 @@ dependencies = [ [[package]] name = "tower-batch-control" -version = "0.2.41-beta.5" +version = "0.2.41-beta.6" dependencies = [ "color-eyre", "ed25519-zebra", @@ -4595,7 +4595,7 @@ dependencies = [ [[package]] name = "tower-fallback" -version = "0.2.41-beta.5" +version = "0.2.41-beta.6" dependencies = [ "futures-core", "pin-project", @@ -5492,7 +5492,7 @@ dependencies = [ [[package]] name = "zebra-chain" -version = "1.0.0-beta.29" +version = "1.0.0-beta.30" dependencies = [ "bitflags 2.4.0", "bitflags-serde-legacy", @@ -5553,7 +5553,7 @@ dependencies = [ [[package]] name = "zebra-consensus" -version = "1.0.0-beta.29" +version = "1.0.0-beta.30" dependencies = [ "bellman", "blake2b_simd", @@ -5598,7 +5598,7 @@ dependencies = [ [[package]] name = "zebra-network" -version = "1.0.0-beta.29" +version = "1.0.0-beta.30" dependencies = [ "bitflags 2.4.0", "byteorder", @@ -5639,7 +5639,7 @@ dependencies = [ [[package]] name = "zebra-node-services" -version = "1.0.0-beta.29" +version = "1.0.0-beta.30" dependencies = [ "color-eyre", "jsonrpc-core", @@ -5651,7 +5651,7 @@ dependencies = [ [[package]] name = "zebra-rpc" -version = "1.0.0-beta.29" +version = "1.0.0-beta.30" dependencies = [ "chrono", "futures", @@ -5683,7 +5683,7 @@ dependencies = [ [[package]] name = "zebra-script" -version = "1.0.0-beta.29" +version = "1.0.0-beta.30" dependencies = [ "displaydoc", "hex", @@ -5696,7 +5696,7 @@ dependencies = [ [[package]] name = "zebra-state" -version = "1.0.0-beta.29" +version = "1.0.0-beta.30" dependencies = [ "bincode", "chrono", @@ -5740,7 +5740,7 @@ dependencies = [ [[package]] name = "zebra-test" -version = "1.0.0-beta.29" +version = "1.0.0-beta.30" dependencies = [ "color-eyre", "futures", @@ -5768,7 +5768,7 @@ dependencies = [ [[package]] name = "zebra-utils" -version = "1.0.0-beta.29" +version = "1.0.0-beta.30" dependencies = [ "color-eyre", "hex", @@ -5789,7 +5789,7 @@ dependencies = [ [[package]] name = "zebrad" -version = "1.2.0" +version = "1.3.0" dependencies = [ "abscissa_core", "atty", diff --git a/README.md b/README.md index 52cec8703..853b4c47f 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ - [Getting Started](#getting-started) - [Docker](#docker) - [Building Zebra](#building-zebra) - - [Optional Configs & Features](#optional-features) + - [Optional Configs & Features](#optional-configs--features) - [Known Issues](#known-issues) - [Future Work](#future-work) - [Documentation](#documentation) diff --git a/book/src/user/docker.md b/book/src/user/docker.md index 5119017de..439cefd27 100644 --- a/book/src/user/docker.md +++ b/book/src/user/docker.md @@ -17,7 +17,7 @@ docker run --detach zfnd/zebra:latest ### Build it locally ```shell -git clone --depth 1 --branch v1.2.0 https://github.com/ZcashFoundation/zebra.git +git clone --depth 1 --branch v1.3.0 https://github.com/ZcashFoundation/zebra.git docker build --file docker/Dockerfile --target runtime --tag zebra:local . docker run --detach zebra:local ``` diff --git a/book/src/user/install.md b/book/src/user/install.md index 28e7fc1ba..2a03398d6 100644 --- a/book/src/user/install.md +++ b/book/src/user/install.md @@ -20,7 +20,7 @@ To compile Zebra directly from GitHub, or from a GitHub release source archive: ```sh git clone https://github.com/ZcashFoundation/zebra.git cd zebra -git checkout v1.2.0 +git checkout v1.3.0 ``` 3. Build and Run `zebrad` @@ -33,7 +33,7 @@ target/release/zebrad start ### Compiling from git using cargo install ```sh -cargo install --git https://github.com/ZcashFoundation/zebra --tag v1.2.0 zebrad +cargo install --git https://github.com/ZcashFoundation/zebra --tag v1.3.0 zebrad ``` ### Compiling on ARM diff --git a/tower-batch-control/Cargo.toml b/tower-batch-control/Cargo.toml index 8cf593591..7b63bc9e0 100644 --- a/tower-batch-control/Cargo.toml +++ b/tower-batch-control/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tower-batch-control" -version = "0.2.41-beta.5" +version = "0.2.41-beta.6" authors = ["Zcash Foundation ", "Tower Maintainers "] description = "Tower middleware for batch request processing" # # Legal diff --git a/tower-fallback/Cargo.toml b/tower-fallback/Cargo.toml index e9fa523c6..4aa8a698d 100644 --- a/tower-fallback/Cargo.toml +++ b/tower-fallback/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tower-fallback" -version = "0.2.41-beta.5" +version = "0.2.41-beta.6" authors = ["Zcash Foundation "] description = "A Tower service combinator that sends requests to a first service, then retries processing on a second fallback service if the first service errors." license = "MIT OR Apache-2.0" diff --git a/zebra-chain/Cargo.toml b/zebra-chain/Cargo.toml index 10831fd38..2a5e75eb6 100644 --- a/zebra-chain/Cargo.toml +++ b/zebra-chain/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "zebra-chain" -version = "1.0.0-beta.29" +version = "1.0.0-beta.30" authors = ["Zcash Foundation "] description = "Core Zcash data structures" license = "MIT OR Apache-2.0" @@ -126,7 +126,7 @@ proptest-derive = { version = "0.4.0", optional = true } rand = { version = "0.8.5", optional = true } rand_chacha = { version = "0.3.1", optional = true } -zebra-test = { path = "../zebra-test/", version = "1.0.0-beta.29", optional = true } +zebra-test = { path = "../zebra-test/", version = "1.0.0-beta.30", optional = true } [dev-dependencies] # Benchmarks diff --git a/zebra-consensus/Cargo.toml b/zebra-consensus/Cargo.toml index dd96d7da5..3a25c105d 100644 --- a/zebra-consensus/Cargo.toml +++ b/zebra-consensus/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "zebra-consensus" -version = "1.0.0-beta.29" +version = "1.0.0-beta.30" authors = ["Zcash Foundation "] description = "Implementation of Zcash consensus checks" license = "MIT OR Apache-2.0" @@ -62,13 +62,13 @@ orchard = "0.5.0" zcash_proofs = { version = "0.12.1", features = ["local-prover", "multicore", "download-params"] } -tower-fallback = { path = "../tower-fallback/", version = "0.2.41-beta.5" } -tower-batch-control = { path = "../tower-batch-control/", version = "0.2.41-beta.5" } +tower-fallback = { path = "../tower-fallback/", version = "0.2.41-beta.6" } +tower-batch-control = { path = "../tower-batch-control/", version = "0.2.41-beta.6" } -zebra-script = { path = "../zebra-script", version = "1.0.0-beta.29" } -zebra-state = { path = "../zebra-state", version = "1.0.0-beta.29" } -zebra-node-services = { path = "../zebra-node-services", version = "1.0.0-beta.29" } -zebra-chain = { path = "../zebra-chain", version = "1.0.0-beta.29" } +zebra-script = { path = "../zebra-script", version = "1.0.0-beta.30" } +zebra-state = { path = "../zebra-state", version = "1.0.0-beta.30" } +zebra-node-services = { path = "../zebra-node-services", version = "1.0.0-beta.30" } +zebra-chain = { path = "../zebra-chain", version = "1.0.0-beta.30" } # prod feature progress-bar howudoin = { version = "0.1.2", optional = true } diff --git a/zebra-network/Cargo.toml b/zebra-network/Cargo.toml index faed08811..3dfdd1d81 100644 --- a/zebra-network/Cargo.toml +++ b/zebra-network/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "zebra-network" -version = "1.0.0-beta.29" +version = "1.0.0-beta.30" authors = ["Zcash Foundation ", "Tower Maintainers "] description = "Networking code for Zebra" # # Legal @@ -83,7 +83,7 @@ howudoin = { version = "0.1.2", optional = true } proptest = { version = "1.3.1", optional = true } proptest-derive = { version = "0.4.0", optional = true } -zebra-chain = { path = "../zebra-chain", version = "1.0.0-beta.29", features = ["async-error"] } +zebra-chain = { path = "../zebra-chain", version = "1.0.0-beta.30", features = ["async-error"] } [dev-dependencies] proptest = "1.3.1" diff --git a/zebra-node-services/Cargo.toml b/zebra-node-services/Cargo.toml index 52170430f..dd43c4df7 100644 --- a/zebra-node-services/Cargo.toml +++ b/zebra-node-services/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "zebra-node-services" -version = "1.0.0-beta.29" +version = "1.0.0-beta.30" authors = ["Zcash Foundation "] description = "The interfaces of some Zebra node services" license = "MIT OR Apache-2.0" @@ -35,7 +35,7 @@ rpc-client = [ ] [dependencies] -zebra-chain = { path = "../zebra-chain" , version = "1.0.0-beta.29" } +zebra-chain = { path = "../zebra-chain" , version = "1.0.0-beta.30" } # Optional dependencies diff --git a/zebra-rpc/Cargo.toml b/zebra-rpc/Cargo.toml index 617cb001e..6b214c5d6 100644 --- a/zebra-rpc/Cargo.toml +++ b/zebra-rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "zebra-rpc" -version = "1.0.0-beta.29" +version = "1.0.0-beta.30" authors = ["Zcash Foundation "] description = "A Zebra JSON Remote Procedure Call (JSON-RPC) interface" license = "MIT OR Apache-2.0" @@ -70,12 +70,12 @@ zcash_address = { version = "0.3.0", optional = true } # Test-only feature proptest-impl proptest = { version = "1.3.1", optional = true } -zebra-chain = { path = "../zebra-chain", version = "1.0.0-beta.29", features = ["json-conversion"] } -zebra-consensus = { path = "../zebra-consensus", version = "1.0.0-beta.29" } -zebra-network = { path = "../zebra-network", version = "1.0.0-beta.29" } -zebra-node-services = { path = "../zebra-node-services", version = "1.0.0-beta.29" } -zebra-script = { path = "../zebra-script", version = "1.0.0-beta.29" } -zebra-state = { path = "../zebra-state", version = "1.0.0-beta.29" } +zebra-chain = { path = "../zebra-chain", version = "1.0.0-beta.30", features = ["json-conversion"] } +zebra-consensus = { path = "../zebra-consensus", version = "1.0.0-beta.30" } +zebra-network = { path = "../zebra-network", version = "1.0.0-beta.30" } +zebra-node-services = { path = "../zebra-node-services", version = "1.0.0-beta.30" } +zebra-script = { path = "../zebra-script", version = "1.0.0-beta.30" } +zebra-state = { path = "../zebra-state", version = "1.0.0-beta.30" } [dev-dependencies] insta = { version = "1.33.0", features = ["redactions", "json", "ron"] } diff --git a/zebra-script/Cargo.toml b/zebra-script/Cargo.toml index 1acb80484..da3901129 100644 --- a/zebra-script/Cargo.toml +++ b/zebra-script/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "zebra-script" -version = "1.0.0-beta.29" +version = "1.0.0-beta.30" authors = ["Zcash Foundation "] description = "Zebra script verification wrapping zcashd's zcash_script library" license = "MIT OR Apache-2.0" @@ -17,7 +17,7 @@ categories = ["api-bindings", "cryptography::cryptocurrencies"] [dependencies] zcash_script = "0.1.13" -zebra-chain = { path = "../zebra-chain", version = "1.0.0-beta.29" } +zebra-chain = { path = "../zebra-chain", version = "1.0.0-beta.30" } thiserror = "1.0.48" displaydoc = "0.2.4" diff --git a/zebra-state/Cargo.toml b/zebra-state/Cargo.toml index b7d6a6365..30c17c005 100644 --- a/zebra-state/Cargo.toml +++ b/zebra-state/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "zebra-state" -version = "1.0.0-beta.29" +version = "1.0.0-beta.30" authors = ["Zcash Foundation "] description = "State contextual verification and storage code for Zebra" license = "MIT OR Apache-2.0" @@ -73,13 +73,13 @@ tracing = "0.1.39" elasticsearch = { version = "8.5.0-alpha.1", default-features = false, features = ["rustls-tls"], optional = true } serde_json = { version = "1.0.107", package = "serde_json", optional = true } -zebra-chain = { path = "../zebra-chain", version = "1.0.0-beta.29", features = ["async-error"] } +zebra-chain = { path = "../zebra-chain", version = "1.0.0-beta.30", features = ["async-error"] } # prod feature progress-bar howudoin = { version = "0.1.2", optional = true } # test feature proptest-impl -zebra-test = { path = "../zebra-test/", version = "1.0.0-beta.29", optional = true } +zebra-test = { path = "../zebra-test/", version = "1.0.0-beta.30", optional = true } proptest = { version = "1.3.1", optional = true } proptest-derive = { version = "0.4.0", optional = true } diff --git a/zebra-test/Cargo.toml b/zebra-test/Cargo.toml index c3c7381e6..6cc4c5bdd 100644 --- a/zebra-test/Cargo.toml +++ b/zebra-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "zebra-test" -version = "1.0.0-beta.29" +version = "1.0.0-beta.30" authors = ["Zcash Foundation "] description = "Test harnesses and test vectors for Zebra" license = "MIT OR Apache-2.0" diff --git a/zebra-utils/Cargo.toml b/zebra-utils/Cargo.toml index 756417a2c..10da1450b 100644 --- a/zebra-utils/Cargo.toml +++ b/zebra-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "zebra-utils" -version = "1.0.0-beta.29" +version = "1.0.0-beta.30" authors = ["Zcash Foundation "] description = "Developer tools for Zebra maintenance and testing" license = "MIT OR Apache-2.0" @@ -74,11 +74,11 @@ tracing-error = "0.2.0" tracing-subscriber = "0.3.17" thiserror = "1.0.48" -zebra-node-services = { path = "../zebra-node-services", version = "1.0.0-beta.29" } -zebra-chain = { path = "../zebra-chain", version = "1.0.0-beta.29" } +zebra-node-services = { path = "../zebra-node-services", version = "1.0.0-beta.30" } +zebra-chain = { path = "../zebra-chain", version = "1.0.0-beta.30" } # These crates are needed for the block-template-to-proposal binary -zebra-rpc = { path = "../zebra-rpc", version = "1.0.0-beta.29", optional = true } +zebra-rpc = { path = "../zebra-rpc", version = "1.0.0-beta.30", optional = true } # These crates are needed for the zebra-checkpoints binary itertools = { version = "0.11.0", optional = true } diff --git a/zebrad/Cargo.toml b/zebrad/Cargo.toml index 9f450d238..715eccc38 100644 --- a/zebrad/Cargo.toml +++ b/zebrad/Cargo.toml @@ -1,7 +1,7 @@ [package] # Crate metadata name = "zebrad" -version = "1.2.0" +version = "1.3.0" authors = ["Zcash Foundation "] description = "The Zcash Foundation's independent, consensus-compatible implementation of a Zcash node" license = "MIT OR Apache-2.0" @@ -142,15 +142,15 @@ test_sync_past_mandatory_checkpoint_mainnet = [] test_sync_past_mandatory_checkpoint_testnet = [] [dependencies] -zebra-chain = { path = "../zebra-chain", version = "1.0.0-beta.29" } -zebra-consensus = { path = "../zebra-consensus", version = "1.0.0-beta.29" } -zebra-network = { path = "../zebra-network", version = "1.0.0-beta.29" } -zebra-node-services = { path = "../zebra-node-services", version = "1.0.0-beta.29" } -zebra-rpc = { path = "../zebra-rpc", version = "1.0.0-beta.29" } -zebra-state = { path = "../zebra-state", version = "1.0.0-beta.29" } +zebra-chain = { path = "../zebra-chain", version = "1.0.0-beta.30" } +zebra-consensus = { path = "../zebra-consensus", version = "1.0.0-beta.30" } +zebra-network = { path = "../zebra-network", version = "1.0.0-beta.30" } +zebra-node-services = { path = "../zebra-node-services", version = "1.0.0-beta.30" } +zebra-rpc = { path = "../zebra-rpc", version = "1.0.0-beta.30" } +zebra-state = { path = "../zebra-state", version = "1.0.0-beta.30" } # Required for crates.io publishing, but it's only used in tests -zebra-utils = { path = "../zebra-utils", version = "1.0.0-beta.29", optional = true } +zebra-utils = { path = "../zebra-utils", version = "1.0.0-beta.30", optional = true } abscissa_core = "0.7.0" clap = { version = "4.4.6", features = ["cargo"] } diff --git a/zebrad/src/components/sync/end_of_support.rs b/zebrad/src/components/sync/end_of_support.rs index a4582ff38..f7ca757d2 100644 --- a/zebrad/src/components/sync/end_of_support.rs +++ b/zebrad/src/components/sync/end_of_support.rs @@ -13,7 +13,7 @@ use zebra_chain::{ use crate::application::release_version; /// The estimated height that this release will be published. -pub const ESTIMATED_RELEASE_HEIGHT: u32 = 2_212_380; +pub const ESTIMATED_RELEASE_HEIGHT: u32 = 2_264_000; /// The maximum number of days after `ESTIMATED_RELEASE_HEIGHT` where a Zebra server will run /// without halting.