ZF Engineering Update: 6 - 19 October 2026

Over the past two weeks most of our work went into getting NU7 ready for Mainnet. The biggest piece is a set of fixes for nodes that stop syncing near the top of the chain, which some Testnet operators reported after 7.0.0-rc.0; those fixes are now merged and are lined up for the next release, likely Zebra 7.0.0, the stable NU7 release. We also published a guide for anyone moving from zcashd’s RPC interface to Zebra’s, and made our test suite faster and less dependent on the live network. Everything below was merged into Zebra’s development branch and is not yet part of a published release. The decision on NU7’s Mainnet activation height is due on 20 October, as set out in the NU7 timeline.

CI / DevOps

We fixed a problem where Docker images could pick up code built from another branch through a shared build cache, so every image is now built from its own source. About twenty tests that only need a running node no longer connect to live Mainnet peers, and the sync tests now download their first block from a local node, which removes a common cause of slow and flaky test runs. The cross-project tests with Zaino and Zallet now run weekly instead of on every change. For releases, we replaced the public API check with one that builds from the project’s own locked dependencies, post the API changes on each release PR so reviewers can check version numbers at a glance, catch broken changelog entries before they reach the main branch, and wrote down how to withdraw a bad release, based on what we learned from 6.4.0 and 6.4.1.

Other Zebra work

Since the 7.0.0-rc.0 release, some Testnet operators have reported nodes that stop near the top of the chain, and we confirmed the same cause on a Mainnet node. Zebra now waits for a busy peer that can serve the next block instead of giving up on it, spreads its searches for new blocks across peers that serve them, stops sending a block request to a peer that already failed to deliver it, and keeps the second copy of a download going when the first one fails. The full set is tracked in this issue.

Zebra now logs why it banned a peer, so operators can see what happened. RPC clients that use Zebra’s RPC types can now read every ZEC amount Zebra reports. Before this, about one in six amounts, such as some pool balances, failed to parse. We also published a guide to moving from zcashd’s RPC interface to Zebra’s in the Zebra book, for exchanges, wallets and other services planning that switch.

For NU7, we moved Zebra onto the latest pre-releases of the shared Zcash libraries, which lets other projects that build on Zebra, such as Zallet, continue their own NU7 work.

Work in progress

The next step is likely Zebra 7.0.0, the stable NU7 release, which brings the sync fixes above to everyone running Zebra. We are also reviewing a fix that keeps a Testnet node from following a losing branch. As a reminder from our last update, Zebra 6.4.x stops itself around 2 November, so Mainnet operators will need to install the NU7 release before then.

Work on other repositories

FROST. In frost-tools, the command line client can now sign several messages in one signing session, and we reorganised it so other programs can use it as a library. The same change lets zcash-sign, our tool for signing Zcash transactions with FROST, sign partially created Zcash transactions (PCZTs).

Zeeder. Our DNS seeder now also publishes its container image as zfnd/zeeder, the first step in moving to its new name. The existing zfnd/dnsseeder image keeps working.

Thanks to external contributors

Thanks to @nuttycom for moving Zebra to the first round of NU7 library pre-releases, which unblocked Zallet’s NU7 work.

And also thanks to @DrVelvetFog, @jiehuo100net, @zmanian, @idky137, @vbar, and @robustfengbin for their contributions.

7 Likes