github ZcashFoundation/zebra v3.0.0-rc.0
Zebra 3.0.0-rc.0

2 days ago

Zebra 3.0.0-rc.0 - 2025-10-15

In this release, we add the Mainnet activation height for Network Upgrade 6.1 (NU6.1), which will activate at block 3,146,400.

This is a release candidate. Its support is set to expire before the activation height. If no issues are found, this candidate will become the final release for NU6.1.

This release also includes significant updates to Zebra's CI and Docker setup, as well as performance optimizations.

Breaking Changes

  • Migrate zebrad to a layered configuration using config-rs. Environment variables must use the ZEBRA_SECTION__KEY format (double underscore for nesting), for example: ZEBRA_NETWORK__NETWORK, ZEBRA_RPC__LISTEN_ADDR, ZEBRA_RPC__ENABLE_COOKIE_AUTH, ZEBRA_RPC__COOKIE_DIR ZEBRA_TRACING__FILTER ZEBRA_STATE__CACHE_DIR, ZEBRA_MINING__MINER_ADDRESS. Legacy ZEBRA_* test/path variables and ZEBRA_RUST_LOG are no longer honored. Update any scripts, Docker configs, or systemd units that relied on the old names (#9768).
  • Docker entrypoint simplified: it no longer generates a zebrad.toml or translates legacy Docker environment variables. To use a file, set CONFIG_FILE_PATH (the entrypoint forwards it via --config). Otherwise, configure via ZEBRA_* variables. ZEBRA_CONF_PATH has been removed in favor of CONFIG_FILE_PATH. Docker setups that used variables like ZEBRA_RPC_PORT, ZEBRA_COOKIE_DIR, NETWORK, ENABLE_COOKIE_AUTH, or MINER_ADDRESS must switch to the config-rs equivalents shown above (#9768).
  • Fully removed the getblocktemplate-rpcs feature flag from zebrad/Cargo.toml. All functionality previously guarded by this flag has already been made the default. As a result, the following build command is no longer supported:
    cargo build --features getblocktemplate-rpcs
    
    (#9964)

Changed

  • zebrad now loads configuration from defaults, an optional TOML file, and environment variables, with precedence: Env > TOML > Defaults (#9768).
  • Docker and book documentation updated to describe CONFIG_FILE_PATH and ZEBRA_* environment variable usage; removed references to ZEBRA_CONF_PATH and legacy Docker variables (#9768).
  • Implemented nextest and optimized Docker test builds (#9435)
  • Replaced light wallet .proto files with canonical versions obtained from https://github.com/zcash/lightwallet-protocol (#9783)
  • Allow zebra-rpc to be compiled without protoc (#9819)
  • Switched Sapling verifier (#9737)
  • Refactor Sapling parameters loading (#9678)
  • Adopt upstream types for sapling commitments where possible (#9828)
  • Updated transaction verifier to use orchard::bundle::BatchValidator (#9308)
  • Improved error propagations (#9921, #9919, #9848)
  • Broadcast block submissions to all peers in the peer set (#9907)
  • Removed outdated seeders (#9932)
  • Apply suggestions for code cleanup from NU6.1 audit. (#9952)
  • Always return 1.0 from getblockchaininfo as the verification progress on Regtest (#9908)
  • Corrected number of addresses for the FPF funding stream extension on Testnet (#9786)
  • Simplified a test to use regtest instead of fake activation heights (#9792)
  • Re-enable and update disconnects_from_misbehaving_peers test (#9735)
  • Improve connection times in regtest framework (#9917)
  • Always wait for RPC port to open in cached state tests (#9903)
  • Allow configuration of funding streams on Regtest (#9710)
  • Implemented draft ZIP 2003 for NU7 and use Testnet network protocol versions on Regtest (#9787)

Added

  • NU6.1 activation height, funding streams, lockbox disbursments, and current network protocol version (#9987)
  • Backup non-finalized blocks in state cache directory (#9809)
  • Complete z_gettreestate (#9798)
  • getmempoolinfo RPC method (#9870)
  • getnetworkinfo RPC method (#9887)
  • Support side chains in getrawtransaction (#9884)
  • Support single-string or object params in getaddresstxids (#9854)
  • Exposed z_validateaddress logic for library consumers (#9859)
  • Missing Orchard fields to getrawtransaction (#9808)
  • vjoinsplit field to getrawtransaction (#9805)
  • Use specific error code for addnode; reuse message in response filter (#9931)
  • Support for the chainInfo field in getaddressutxos RPC method (#9875)
  • Allow for cycling through configured funding stream addresses (#9989)
  • Introduce BytesInDisplayOrder trait to standardize byte-reversed encoding in RPC (#9810)
  • MappedRequest helper trait and refactors error types used by CommitSemanticallyVerifiedBlock requests (#9923)
  • Useful standard trait implementations to ease downstream use (#9926)
  • Added ZFuture variant to NetworkUpgrade (#9814)
  • Allow configuration of checkpoints on test networks (#9888)
  • Added HTTP /healthy and /ready endpoints (#9895, #9886)
  • New book page on profiling Zebra (#9983)
  • Deserialization logic to call extend_funding_streams() when the flag is true for both configured Testnets and Regtest (#9989)

Fixed

  • Restore initial sync performance by avoiding RocksDB merge operations when the on-disk database format is up-to-date (#9973)
  • Use STANDARD Base64 for RPC auth encoding/decoding (#9968)
  • Expects the block commitment bytes of Heartwood activation blocks to be the hashBlockCommitments after NU5 activation (#9982)
  • Fixed UTXO selection loop to iterate over entries instead of repeating first (#9826)
  • Improve extra argument passing to zebra in qa framework(#9858)
  • Avoid heap allocations in expand_zero_be_bytes() (#9951)
  • Fixed sanitize_avoids_leaks test to validate sanitized MetaAddr (#9867)
  • Corrected at_least_one! count-form and add unit test (#9871)

Contributors

Thank you to everyone who contributed to this release, we couldn't make Zebra without you:
@Fibonacci747, @Galoretka, @GarmashAlex, @JacksonEi, @MozirDmitriy, @Olexandr88, @arya2, @conradoplg, @gap-editor, @gustavovalverde, @natalieesk, @nuttycom, @oxarbitrage, @radik878, @sashass1315, @str4d, @syszery, @upbqdn and @zancas

Don't miss a new zebra release

NewReleases is sending notifications on new releases.