Releases: ZcashFoundation/zebra
Release list
Zebra 2.3.0
Zebra 2.3.0 - 2025-05-06
Breaking Changes
- The RPC endpoint is no longer enabled by default in Docker. To enable it,
follow the docs here. - We will no longer be publishing Docker images tagged with the
sha-orv
prefixes. If you use tags starting with thevprefix, please update to
images taggedN.N.N. For example, use2.3.0instead ofv2.3.0. If you
need a specific hash, each tag has a digest that you can use instead. - All functionality that used to be guarded by the
getblocktemplate-rpcsCargo
feature was moved out, and the feature is no longer present in the codebase.
Note that all release builds following Zebra 1.3.0 had this feature enabled by
default.
Added
- Track misbehaving peer connections and ban them past a threshold (#9201)
- Restore internal miner (#9311)
- Add
reconsider_blockmethod (#9260) - Add NU7 constants (#9256)
- Add
invalidate_block_methodandinvalidated_blocksfield to non-finalized state (#9167) - Add
Transaction::V6variants only (#9339)
Changed
- Downgrade verbose info message (#9448)
- Use read-only db instance when running
tip-heightorcopy-statecommands (#9359) - Refactor format upgrades into trait (#9263)
- Remove the
getblocktemplate-rpcsCargo feature (#9401) - Improve cache dir and database startup panics (#9441)
Fixed
- Remove a redundant startup warning (#9397)
- Advertise mined blocks (#9176)
- Ensure secondary rocksdb instance has caught up to the primary instance (#9346)
- Use network kind of
TestnetKindin transparent addresses on Regtest (#9175) - Fix redundant attributes on enum variants (#9309)
RPCs
- Add
timeandsizefields toTransactionObject(#9458) - Add inbound peers to
getpeerinforesponse (#9214) - Extend
getinfo(#9261) - Add fields to
getblockchaininfoRPC output (#9215) - Add some missing fields to transaction object (#9329)
- Support negative heights in
HashOrHeight(#9316) - Add verbose support to getrawmempool (#9249)
- Fill size field in getblock with verbosity=2 (#9327)
- Add
blockcommitmentsfield togetblockoutput (#9217) - Accept an unused second param in
sendrawtransactionRPC (#9242) - Make start and end fields optional and apply range rules to match zcashd (#9408)
- Return only the history tree root in
GetBlockTemplateChainInforesponse (#9444) - Correctly map JSON-RPC to/from 2.0 (#9216)
- Permit JSON-RPC IDs to be non-strings (#9341)
- Match coinbase outputs order in
Getblocktemplate(#9272)
Docker
- Refactor Dockerfile and entrypoint (#8923)
- Enhance Zebra configuration options and entrypoint logic (#9344)
- Better permission and cache dirs handling in Docker (#9323)
- Allow r/w access in mounted volumes (#9281)
Documentation
- Update examples for running Zebra in Docker (#9269)
- Add architectural decision records structure (#9310)
- Add Mempool Specification to Zebra Book (#9336)
- Complete the Treestate RFC documentation (#9340)
Contributors
@AloeareV, @Metalcape, @PaulLaux, @VolodymyrBg, @aphelionz, @arya2, @conradoplg,
@crStiv, @elijahhampton, @gustavovalverde, @mdqst, @natalieesk, @nuttycom,
@oxarbitrage, @podZzzzz, @sellout, @str4d, @upbqdn and @zeroprooff.
Zebra 2.2.0
Zebra 2.2.0 - 2025-02-05
In this release, Zebra introduced an additional consensus check on the branch ID of Nu6 transactions
(which is currently also checked elsewhere; but we believe it's important to check on its own to protect
against future code changes), along with important refactors and improvements.
Added
- An index to track spending transaction ids by spent outpoints and revealed nullifiers (#8895)
- Accessor methods to zebra-rpc request/response types (#9113)
- getblock RPC method now can return transaction details with verbosity=2 (#9083)
- Serialized NU5 blocks to test vectors (#9098)
Changed
- Migrated from deprecated jsonrpc_* crates to jsonrpsee (#9059, #9151)
- Optimized checks for coinbase transactions (#9126)
- Avoid re-verifying transactions in blocks if those transactions are in the mempool (#8951, #9118)
- Allow transactions spending coinbase outputs to have transparent outputs on Regtest (#9085)
Fixed
- Respond to getblockchaininfo with genesis block when empty state (#9138)
- Verify consensus branch ID in SIGHASH precomputation (#9139)
- More closely match zcashd RPC errors and getrawtransaction RPC behaviour (#9049)
- Fixes bugs in the lightwalletd integration tests (#9052)
Contributors
Thank you to everyone who contributed to this release, we couldn't make Zebra without you:
@Fallengirl, @arya2, @conradoplg, @elijahhampton, @futreall, @gustavovalverde, @idky137, @mpguerra, @oxarbitrage, @rex4539, @rootdiae, @sandakersmann and @upbqdn
Zebra 2.1.0
This release adds a check to verify that V5 transactions in the mempool have the correct consensus branch ID;
Zebra would previously accept those and return a transaction ID (indicating success) even though they would
be eventually rejected by the block consensus checks. Similarly, Zebra also now returns an error when trying
to submit transactions that would eventually fail some consensus checks (e.g. double spends) but would also
return a transaction ID indicating success. The release also bumps
Zebra's initial minimum protocol version such that this release of Zebra will always reject connections with peers advertising
a network protocol version below 170,120 on Mainnet and 170,110 on Testnet instead of accepting those connections until Zebra's
chain state reaches the NU6 activation height.
The getblock RPC method has been updated and now returns some additional information
such as the block height (even if you provide a block hash) and other fields as supported
by the getblockheader RPC call.
Breaking Changes
- Upgrade minimum protocol versions for all Zcash networks (#9058)
Added
Changed
- Updated
getblockRPC to more closely match zcashd (#9006) - Updated error messages to include inner error types (notably for the transaction verifier) (#9066)
Fixed
- Validate consensus branch ids of mempool transactions (#9063)
- Verify mempool transactions with unmined inputs if those inputs are in the mempool to support TEX transactions (#8857)
- Wait until transactions have been added to the mempool before returning success response from
sendrawtransactionRPC (#9067)
Contributors
Thank you to everyone who contributed to this release, we couldn't make Zebra without you:
@arya2, @conradoplg, @cypherpepe, @gustavovalverde, @idky137, @oxarbitrage, @pinglanlu and @upbqdn
Zebra 2.0.1
Zebra 2.0.1 - 2024-10-30
- Zebra now supports NU6 on Mainnet. This patch release updates dependencies required for NU6. The 2.0.0 release was pointing to the incorrect dependencies and would panic on NU6 activation.
Breaking Changes
- The JSON RPC endpoint has cookie-based authentication enabled by default. If you rely on Zebra RPC, wou will need to adjust your config. The simplest change is to disable authentication by adding
enable_cookie_auth = falseto the[rpc]section of the Zebra config file; refer to the docs. (This was added in 2.0.0 but we include here again for clarity)
Changed
- Use ECC deps with activation height for NU6 (#8960)
Zebra 2.0.0 - 2024-10-25 - [YANKED]
This release was intended to support NU6 but was pointing to the wrong version of dependencies which would make Zebra panic at NU6 activation. Use 2.0.1 instead.
Breaking Changes
- The JSON RPC endpoint has cookie-based authentication enabled by default. If you rely on Zebra RPC, wou will need to adjust your config. The simplest change is to disable authentication by adding
enable_cookie_auth = falseto the[rpc]section of the Zebra config file; refer to the docs. (This was added in 2.0.0 but we included here again for clarity)
Added
- NU6-related documentation (#8949)
- A cookie-based authentication system for the JSON RPC endpoint (#8900, #8965)
Changed
- Set the activation height of NU6 for Mainnet and bump Zebra's current network protocol version (#8960)
Contributors
Thank you to everyone who contributed to this release, we couldn't make Zebra without you:
@arya2, @gustavovalverde, @oxarbitrage and @upbqdn.
Zebra 2.0.0-rc.0
Zebra 2.0.0-rc.0 - 2024-10-11
This version is a release candidate for the Zcash NU6 network upgrade on the Mainnet. While this version does not yet include the NU6 Mainnet activation height or current protocol version, all required functionality and tests are in place.
Please note that support for this release candidate is expected to conclude prior to the NU6 activation heights.
Security
- Added Docker Scout vulnerabilities scanning (#8871)
Added
- Added Regtest-only
generateandstopRPC methods (#8849, #8839, #8863) - Added fields to
getmininginfoRPC method response (#8860) - Copied the Python RPC test framework from zcashd into Zebra (#8866)
Changed
- Regtest halving interval to match zcashd and added a configurable halving interval for custom testnets (#8888, #8928)
- Updates post-NU6 Major Grants funding stream address on Mainnet (#8914)
Fixed
- Remove debugging output by default in Docker image (#8870)
- Fixes a typo in configuration file path of the docker-compose file (#8893)
- Return verification errors from
sendrawtransactionRPC method (#8788) - Respond to getheaders requests with a maximum of 160 block headers (#8913)
- Avoids panicking during contextual validation when a parent block is missing (#8883)
- Write database format version to disk atomically to avoid a rare panic (#8795)
Contributors
Thank you to everyone who contributed to this release, we couldn't make Zebra without you:
@arya2, @dismad, @gustavovalverde, @oxarbitrage, @skyl and @upbqdn
Zebra 1.9.0
This release includes deployment of NU6 on Testnet, configurable funding streams on custom Testnets, and updates Zebra's end-of-support (EoS) from 16 weeks to 10 weeks so that it will panic before the expected activation height of NU6 on Mainnet.
It also replaces the shielded-scan compilation feature with a new zebra-scanner binary, adds a TrustedChainSync module for replicating Zebra's best chain state, and a gRPC server in zebra-rpc as steps towards zcashd deprecation.
Recovering after finalizing a block from a chain fork
Zebra doesn't enforce an end-of-support height on Testnet, and previous versions of Zebra could mine or follow a chain fork that does not
activate NU6 on Testnet at height 2976000. Once a block from a fork is finalized in Zebra's state cache, updating to a version of Zebra that
does expect NU6 activation at that height will result in Zebra getting stuck, as it cannot rollback its finalized state. This can be resolved
by syncing Zebra from scratch, or by using the copy-state command to create a new state cache up to height 2975999. To use the copy-state
command, first make a copy Zebra's Testnet configuration with a different cache directory path, for example, if Zebra's configuration is at the
default path, by running cp ~/.config/zebrad.toml ./zebrad-copy-target.toml, then opening the new configuration file and editing the
cache_dir path in the state section. Once there's a copy of Zebra's configuration with the new state cache directory path, run:
zebrad copy-state --target-config-path "./zebrad-copy-target.toml" --max-source-height "2975999", and then update the original
Zebra configuration to use the new state cache directory.
Added
- A
zebra-scannerbinary replacing theshielded-scancompilation feature inzebrad(#8608) - Adds a
TrustedChainSyncmodule for keeping up with Zebra's non-finalized best chain from a separate process (#8596) - Add a tonic server in zebra-rpc with a
chain_tip_change()method that notifies clients when Zebra's best chain tip changes (#8674) - NU6 network upgrade variant, minimum protocol version, and Testnet activation height (#8693, 8733, #8804)
- Configurable NU6 activation height on Regtest (#8700)
- Configurable Testnet funding streams (#8718)
- Post-NU6 funding streams, including a lockbox funding stream (#8694)
- Add value pool balances to
getblockchaininfoRPC method response (#8769) - Add NU6 lockbox funding stream information to
getblocksubsidyRPC method response (#8742)
Changed
- Reduce the end-of-support halt time from 16 weeks to 10 weeks (#8734)
- Bump the current protocol version from 170100 to 170110 (#8804)
- Track the balance of the deferred chain value pool (#8732, #8729)
- Require that coinbase transactions balance exactly after NU6 activation (#8727)
- Support in-place disk format upgrades for major database version bumps (#8748)
Fixed
- Return full network upgrade activation list in
getblockchaininfomethod (#8699) - Update documentation for the new
zebra-scannerbinary (#8675) - Update documentation for using Zebra with lightwalletd (#8714)
- Reduce debug output for Network on Regtest and default Testnet (#8760)
Contributors
Thank you to everyone who contributed to this release, we couldn't make Zebra without you:
@arya2, @conradoplg, @oxarbitrage, @therealyingtong and @upbqdn
Zebra 1.8.0
Zebra 1.8.0 - 2024-07-02
- Zebra now uses a default unpaid actions limit of 0, dropping transactions with
any unpaid actions from the mempool and excluding them when selecting
transactions from the mempool during block template construction. - The
zebradbinary no longer contains the scanner of shielded transactions.
This meanszebradno longer contains users' viewing keys. - Support for custom Testnets and Regtest is greatly enhanced.
- Windows is now back in the second tier of supported platforms.
- The end-of-support time interval is set to match
zcashd's 16 weeks. - The RPC serialization of empty treestates matches
zcashd.
Added
- Add an init function for a standalone
ReadStateService(#8595) - Allow configuring more parameters on custom Testnets and an NU5 activation height on Regtest (#8477, #8518, #8524, #8528, #8636)
- Add default constructions for several RPC method responses (#8616, #8505)
- Support constructing Canopy proposal blocks from block templates (#8505)
Docs
- Document custom Testnets, Regtest and how they compare to Mainnet and the default Testnet in the Zebra book (#8526, #8636)
Changed
- Use a default unpaid action limit of 0 so that transactions with unpaid actions are excluded from the mempool and block templates by default (#8638)
- Lower the mandatory checkpoint height from immediately above the ZIP-212 grace period to immediately below Canopy activation (#8629)
- Use the new
zcash_scriptcallback API inzebra-script, allowing Zebra's ECC dependencies to be upgraded independently ofzcash_scriptandzcashd(#8566) - Put Windows in Tier 2 of supported platforms (#8637)
- Remove experimental support for starting the
zebra-scanin thezebradprocess as a step towards moving the scanner to its own process (#8594) - Reduce the end of support time from 20 weeks to 16 weeks (#8530)
- Restore parts of the experimental
internal-minerfeature for use on Regtest (#8506)
Fixed
- Allow square brackets in network config listen addr and external addr without explicitly configuring a port in the listen addr (#8504)
- Fix general conditional compilation attributes (#8602)
- Update
median_timespan()method to align with zcashd implementation (#8491)
upbqdn marked this conversation as resolved. - Allow custom Testnets to make peer connections (#8528)
- Refactor and simplify the serialization of empty treestates to fix an incorrect serialization of empty note commitment trees for RPCs (#8533)
- Fix port conflict issue in some tests and re-enable those tests on Windows where those issues were especially problematic (#8624)
- Fix a bug with trailing characters in the OpenAPI spec method descriptions (#8597)
Contributors
Thank you to everyone who contributed to this release, we couldn't make Zebra without you:
@arya2, @conradoplg, @gustavovalverde, @oxarbitrage and @upbqdn
Zebra 1.7.0
Zebra 1.7.0 - 2024-05-07
In this release we introduce Regtest functionality to Zebra and restored Windows support. Also adjusted our Zebra release interval from 2 weeks to 6 weeks approximately.
Added
- Preparing for upstream
zcash_client_backendAPI changes (#8425) - Regtest support (#8383, #8421, #8368, #8413, #8474, #8475)
- Allow Zebra users to contribute to the P2P network even if behind NAT or firewall (#8488)
Changed
- Adjust estimated release interval to once every 6 weeks and the end of support from 16 to 20 weeks (#8429)
Fixed
- Bump zcash script v0.1.15 and restore Windows support (#8393)
- Avoid possibly returning data from different blocks in
z_get_treestateRPC method (#8460) - Zebra panics with all features and no elasticsearch server available (#8409)
Contributors
Thank you to everyone who contributed to this release, we couldn't make Zebra without you:
@arya2, @oxarbitrage and @upbqdn
Zebra 1.6.1
This release adds an OpenAPI specification for Zebra's RPC methods and startup logs about Zebra's storage usage and other database information.
It also includes:
- Bug fixes and improved error messages for some zebra-scan gRPC methods
- A performance improvement in Zebra's
getblockRPC method
Added
- Log database information such as storage usage on startup and shutdown (#8336, #8389)
- OpenAPI specification for Zebra's RPC methods (#8342)
- Add block times to output of getblock RPC method when called with
verbosity = 2(#8384)
Changed
- Removed
Copytrait impl forNetwork(#8354) - Refactored code for network consensus parameters to
Networkmethods (#8340)
Fixed
- Improve zebra-scan gRPC method errors and add timeout to scan service to avoid hanging (#8318)
- Await state service requests in
getblockmethod in parallel (#8376)
Contributors
Thank you to everyone who contributed to this release, we couldn't make Zebra without you:
@arya2, @elijahhampton, @gustavovalverde, @idky137, @mpguerra, @oxarbitrage, @upbqdn and @zancas
Zebra 1.6.0
This release exposes the shielded scanning functionality through an initial version of a gRPC server, documented in the Zebra Book.
Note
Building Zebra now depends on protoc. See the Build Instructions for more details.
Added
- Add
docker-composefile to run CI locally (#8209) - Allow users to use Zebra + LWD with persistent states (#8215)
Scanner
- Add a new
zebra-grpccrate (#8167) - Start scanner gRPC server with
zebrad(#8241) - Add gRPC server reflection and document how to use the gRPC server (#8288)
- Add the
GetInfogRPC method (#8178) - Add the
GetResultsgRPC method (#8255) - Add the
ScangRPC method (#8268, #8303) - Add the
RegisterKeysgRPC method (#8266) - Add the
ClearResultsandDeleteKeysgRPC methods (#8237) - Add snapshot tests for new gRPCs (#8277)
- Add unit tests for new gRPCs (#8293)
- Create a tower Service in
zebra-scan(#8185) - Implement the
SubscribeResultsscan service request (#8253) - Implement the
ClearResultsscan service request (#8219) - Implement the
DeleteKeysscan service request (#8217) - Implement the
RegisterKeysscan service request (#8251) - Implement the
Resultsscan service request (#8224) - Test the
RegisterKeysscan service request (#8281) - Add
ViewingKeytype inzebra-chain(#8198) - Handle
RegisterKeysmessages in scan task (#8222)
Changed
- Remove
rfc.mdfile (#8228) - Update Debian from Bullseye to Bookworm in Docker (#8273)
- Remove Zebra RFCs from
CONTRIBUTING.md(#8304) - Publish fewer tags in Docker Hub (#8300)
- Add Zebra crate versions to dev-dependencies and remove circular dev-dependencies (#8171)
- Update docs for building Zebra (#8315)
Fixed
- Set log rotation to avoid docker bugs (#8269)
- Improve error message in
non_blocking_loggertest (#8276)
Contributors
Thank you to everyone who contributed to this release, we couldn't make Zebra without you:
@arya2, @bishopcheckmate, @chairulakmal, @gustavovalverde, @mpguerra, @oxarbitrage and @upbqdn.