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 theZEBRA_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
. LegacyZEBRA_*
test/path variables andZEBRA_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, setCONFIG_FILE_PATH
(the entrypoint forwards it via--config
). Otherwise, configure viaZEBRA_*
variables.ZEBRA_CONF_PATH
has been removed in favor ofCONFIG_FILE_PATH
. Docker setups that used variables likeZEBRA_RPC_PORT
,ZEBRA_COOKIE_DIR
,NETWORK
,ENABLE_COOKIE_AUTH
, orMINER_ADDRESS
must switch to the config-rs equivalents shown above (#9768). - Fully removed the
getblocktemplate-rpcs
feature flag fromzebrad/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:
(#9964)cargo build --features getblocktemplate-rpcs
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
andZEBRA_*
environment variable usage; removed references toZEBRA_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 withoutprotoc
(#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
fromgetblockchaininfo
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 togetrawtransaction
(#9805)- Use specific error code for
addnode
; reuse message in response filter (#9931) - Support for the
chainInfo
field ingetaddressutxos
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 byCommitSemanticallyVerifiedBlock
requests (#9923)- Useful standard trait implementations to ease downstream use (#9926)
- Added
ZFuture
variant toNetworkUpgrade
(#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