Over the past two weeks, we worked on reducing delays for miners, improving Zebra’s handling of competing blocks, and supporting lower transaction fees. We also restored documentation updates, improved our testing and monitoring, and addressed security reports. The node changes below were merged into Zebra’s development branch during this period and are not yet part of a published Zebra release. The missing transaction checks described below affected development code only.
Faster mining and more reliable nodes
We merged a change that prepares block templates in the background, reducing the time miners wait for their next set of work.
We also corrected how Zebra chooses between competing blocks. When two blocks have the same height and accumulated work, Zebra now keeps the one it received first. This avoids unnecessary switches between competing versions of the chain.
For operators using the bundled zcashd compatibility helper for wallet support, we updated the helper so it can follow deep chain rollbacks alongside Zebra without shutting down.
We fixed a development-only regression in proof data returned by detailed lookups of older shielded transactions. Published releases were unaffected. A separate fix prevents a transparent address’s “total ever received” counter from wrapping around after exceptionally large cumulative payments. This corrects the reported total; it does not change the address’s funds.
Support for lower fees
@aphelionz added support for a lower conventional transaction fee: 1,000 zatoshis per logical action, down from 5,000. For a minimal transaction, that means 2,000 zatoshis instead of 10,000. The change also adjusts how miners prioritise transactions by fee.
The fee proposal remains a draft. It recommends that wallets switch at Mainnet block 3,590,000, after nodes have shipped support for relaying transactions at the lower fee. This is a wallet and relay-policy change, not a change to consensus rules.
@str4d also added shielded-pool balance metrics using the same names as zcashd, helping existing monitoring dashboards work with Zebra.
Security checks restored before release
Security reviews found that moving transaction parsing into shared Zcash libraries had left out several validation checks on Zebra’s development branch. Every published Zebra version retains these checks.
We restored checks covering mining-reward inputs and transaction expiry, value leaving the older Sprout shielded pool, and an input format reserved for mining rewards. Each now has regression tests to catch future omissions. Thanks to the Zakura security team and @ouicate for reporting these issues.
Separately, @jiehuo100net improved how Zebra penalises peers that send blocks containing duplicate transactions, making peer scoring during sync more consistent. Zebra already rejected these blocks; the change concerns the penalty applied to the peer.
Documentation, testing, and monitoring
The Zebra book is updating again after a build failure stopped publication on 8 September. We fixed the build, and readers can now ask a documentation assistant questions from any page. The assistant loads only after a reader opts in, and the browser remembers that choice.
Behind the scenes, we made testing more reliable and reduced its resource use:
-
Moving tests for the older Go lightwalletd to a weekly schedule, with additional runs on selected PRs and on demand, removes an estimated 12 machine-hours of routine per-merge testing each week. These tests remain supported; they have not been removed.
-
Automated test runs no longer compete for the same machines and disks, and cleanup jobs retain long-test machines beyond their five-day test timeout.
-
We repaired the check for public API changes between versions.
We added monitoring to check that fresh nightly Mainnet snapshots actually reach the download site. We also upgraded the monitoring service.
Work in progress
We are improving how Zebra turns pending transactions into candidate blocks. This brings block-template creation and validation together and checks transactions alongside the earlier transactions they depend on. Preparing templates in advance was the first step; the remaining work is under review.
@judah-caruso opened an early implementation of a halving-preserving issuance rule proposed for NU7, the next network upgrade. It requires explicit build-time enablement and has no activation height set. It does not change the rules used by nodes today.
Thank you to our contributors
Thanks to @aphelionz, @str4d, and @jiehuo100net for the improvements highlighted above, and to @john-lawniczak for restoring the build for our automated random-input tests.
Thanks also to @ouicate, the Zakura security team, and @zmanian for their reports, and to @judah-caruso for the early NU7 work.