Zcash Foundation Engineering Update (Nov 3rd - Nov 16th)

Happy November! Here are the things our Zebra and DevOps team have been working on over the last couple of weeks.

We resolved an issue where Zebra would panic when a transaction was unexpectedly missing in the mempool. Now we log a warning instead of panicking when a transaction that should be removed from the mempool is missing in the mempool’s verified set, and avoid calling remove() with tx ids that are not in the mempool. We have fixed a bug where mined transactions were not being removed as transaction dependencies from the mempool. Also, the implementation of ZIP-233 is now gated behind the zcash_unstable="nu7" compilation flag.

Zebra’s infrastructure and build processes received significant improvements to make the software more accessible and cost-effective to run. The team added support for ARM64 architecture, meaning Zebra’s Docker images now run natively on Apple Silicon Macs (M1/M2/M3) and other ARM-based devices like Raspberry Pi, without needing slow emulation. This was made possible by using GitHub’s free ARM64 runners, and users can simply pull the Docker image and automatically get the right version for their platform. Alongside this, the team fixed several Docker-related issues to ensure builds work correctly across different architectures and added the ability to customize builds with specific features. Security was also strengthened re-enabling provenance attestations and SBOM (Software Bill of Materials), which help verify where Docker images come from and what they contain.

On the infrastructure side, Zebra’s cloud deployment received a major upgrade that brings both cost savings and reliability improvements. Instead of running a single instance per network, the system now runs multiple instances across different zones, which means if one fails, others can keep running. By switching to Spot VMs (which are much cheaper but can be stopped by the cloud provider), the deployment now costs 60-91% less while still maintaining high availability. The update also fixes a problem where deployments would create new storage each time, forcing the node to re-download the entire blockchain (taking 1-2 hours)—now the system reuses existing storage, making updates much faster. Additional improvements include fixing broken links in the release checklist after earlier changes, updating checkpoints for the upcoming v3.0.0 release, and making tests more reliable by fixing issues that would cause them to fail randomly. The testing framework also received cleanup work to better track changes from the original Zcash codebase, and updates to the Zallet testing tool to work with newer versions.

Other things we worked on included, some small tweaks to our tests, documentation updates, making response::NonFinalizedBlocksListener publicly accessible, and finishing work in preparation for Zebra release v3.0.0. The wallet no longer keeps running in the background once tests are complete, and tests will not fail when there’s an end-of-support warning. Finally, we’ve added documentation for migrating from the original Zcash test framework to the new Z3 framework.

In other news, we released v4.2.0 for ed25519-zebra and have been reviewing work on zcash-test-vectors.

Thanks to our external contributors for all their work. In particular to @syszery for help on some cleanup tasks, including removing unused groth16 code, and defining supertraits to improve readability.

Thanks for reading!

14 Likes

We’re very excited for official ARM support! Hopefully we see official ARM builds across the other Zs in the Z3 stack also to speed up deployments for Raspberry/Apple/Graviton users.

1 Like