ZF Engineering Update — June 1–14, 2026

This was a busy two weeks. A soundness bug in the Orchard circuit was discovered and resolved through a coordinated network upgrade. Alongside that, we landed a fix for a sync stall affecting initial block download, shipped two more Zebra releases to prepare for NU7, and extended the getpeerinfo RPC. The latest Zebra Release is v5.1.1.

Security

A soundness bug in the Orchard zero-knowledge proof circuit was discovered by independent researcher Taylor Hornby and responsibly disclosed. We responded with two coordinated releases: Zebra v4.5.3 temporarily disabled Orchard actions via a soft fork while a fix was prepared, and Zebra v5.0.0 activated NU6.2, re-enabling Orchard with the corrected circuit. User privacy was not affected, and Sapling and transparent transactions continued normally. Full details are in our blog post.

Everyone should upgrade to v5.0.0 or later. The latest version is v5.1.1.

CI & Infrastructure

We fixed a CI race condition where placeholder check runs were satisfying required checks before real tests finished, and tightened the Mergify queue gate to block PRs with outstanding change requests or failing checks. We also fixed integration tests failing on fork PRs due to withheld secrets, a getblocktemplate test that hard-failed on a tip race instead of retrying, several independent main branch failures, and peer set unit test timeouts after the protocol version bump.

Zebra — Other Changes

We fixed the sync stall we investigated last update. The problem was a chain of small issues: misrouted block requests returned NotFound; the inventory registry treated those, along with timeouts and dropped connections, as permanent, and dropped blocks were never re-requested, eventually wedging the pipeline. The fix addresses all three: only explicit notfound responses poison the registry, dropped blocks are re-queued, and batch dispatch no longer stalls on duplicates. Genesis-to-tip sync now completes in around 14 hours with no stalls.

We also bumped the minimum peer protocol version to NU6.2 — the previous floor of NU6 was out of date with the current network. We shipped v5.1.0 with updated checkpoints and dependency refreshes, and followed with v5.1.1 to correct the end-of-support window: the initial v5.1.0 window extended past the expected NU7 activation date at the end of July. The v5.1.1 release tightens it so nodes will warn operators in time. We also extended the getpeerinfo RPC with additional fields.

Other Work

We fixed a bug in frostd where the --no-tls-very-insecure flag was incorrectly forcing the server to bind to localhost, preventing it from listening on any other interface. We did some structural work on Zeeder, the DNS seeder component, splitting rate limiting and DNS response caching into their own modules, then following up with a broader refactor that separated crawl-side responsibilities — peer filtering, DNS handling, config, and process composition — that had previously all lived in one mixed module. In infra-dns, we added several redirects to the zfnd.org DNS zone for old URLs that had moved, along with a cache ruleset update. We also fixed a test framework issue in zcash/integration-tests where process shutdown waits had no timeout, causing test runs to hang for multiple hours in failure scenarios.

External Contributors

Thank you to everyone outside the foundation who contributed this period!

@syszery contributed two fixes: correcting an index bug in QueuedBlocks::dequeue_children where entire height buckets were being dropped instead of just the target hash — potentially losing other valid queued blocks — and fixing a performance issue in getrawmempool where the transaction index was being rebuilt once per transaction instead of once per call.

@judah-caruso removed the deferred_pool_balance_change field from several verified block types, calculating it on demand when committing to finalized state instead. This simplifies the code around ZIP-234 implementation.

@dmidem updated the lint workflow to run on the v4.2.0-dev branch used by the ZSA draft PR, enabling proper CI coverage for that work.

8 Likes