Release: Zakura 1.7.0

Zakura 1.7.0 release art on a pale paper field with soft pink circles: the pink zakura flower logo on the left, 1.7.0 in large ink numerals to its right, and NU7 MAINNET letter-spaced in deep pink beneath.Zakura 1.7.0 release art on near-black ink with darker circles: the pink zakura flower logo on the left, 1.7.0 in large cream numerals to its right, and NU7 MAINNET letter-spaced in pink beneath.

We have released Zakura 1.7.0. This release activates NU7 on Zcash's Mainnet at height 3,543,405, expected around 00:50 UTC November 6.

Every Mainnet node must update. Earlier releases of Zakura will halt in the days prior to NU7's activation, but users are encouraged to update now rather than close to the deadline.

The release also removes a long list of dependencies from the node, makes pruned nodes sync substantially faster, replaces random mempool eviction with deterministic fee-based eviction, and moves our experimental P2Pv2 stack onto our own QUIC transport.

NU7 on Mainnet

The long-awaited NU7 is now slated to activate at height 3,543,405 on Mainnet. Among other things, this network upgrade brings 25-second blocks to Zcash. Issuance is unaffected and other parts of the protocol, such as funding streams, are modified to correspond with the new block interval.

Our team led the development and specification of ZIP 218 and performed extensive stress testing in anticipation of this upgrade. All of our Zakura releases have incrementally addressed network health, node performance and security over several months. These have minimized the impact on orphan rates and reduced other risks in anticipation of NU7.

NU7 has already activated on Testnet, and we have a dashboard you can use to view its current status. This dashboard will track the Mainnet activation of NU7 as well.

zcashd compatibility mode

If you run zcashd compatibility mode, the embedded zcashd automatically updates to a build that supports NU7. If your zcashd runs as a separate process from Zakura, update zcashd manually to the v1.3.0 release. Older sidecars stop following the chain at activation. Consider using our interactive installer, which can set up Zakura and zcashd together.

Fewer Dependencies

Much of this release removes code. Every dependency we drop is code Zcash users no longer have to trust:

  • Transparent scripts are verified by the Rust zcash_script interpreter alone. Zakura no longer builds zcashd's C++ script interpreter.
  • The JSON-RPC server is now in-tree, replacing jsonrpsee. The wire format is unchanged, and batch requests are capped at 1,000 entries.
  • Telemetry is gone. Sentry, OpenTelemetry trace export, and journald logging are removed, along with the terminal progress display and built-in flamegraphs. Logs and local panic diagnostics are unchanged.
  • Small in-tree replacements retire bincode, reqwest, tempfile, humantime, der, and others, and release binaries are about 5% smaller from fewer codegen units alone.
  • Dependency security updates. quinn-proto and rustls move past their recent advisories, and the TLS validation guarding managed zcashd downloads distrusts the compromised eMudhra CA keys.

Mempool & Mining

When the mempool fills, eviction now removes the transactions paying the lowest fee for their size instead of random ones, and a newcomer must outbid everything it evicts. Selecting the victims is also thousands of times faster than the previous selector. Each connected group of unconfirmed transactions is limited to three members, which still permits parent-child-grandchild chains.

  • Peers cool down instead of being banned. The mempool bans a peer only for transaction failures that cannot depend on the node's chain tip. Failures that can, such as v4 signature checks, now cause the node to ignore the peer's transactions for ten minutes, doubling up to two hours.
  • Mined blocks relay sooner. The new submitsolution RPC submits a prepared block by workid and solved header, repeated getblocktemplate polls of unchanged content reuse the candidate the node already verified, and peers can pull a mined block while its final contextual checks run.
  • New blocks spread with less upload contention. Announcing a mined block to every peer at once can cause too many peers to download it from the miner simultaneously. Zakura now paces these announcements and prioritizes peers with lower measured latency, allowing other nodes to help distribute the block sooner.
  • Equal-work ties break by arrival. When two chain tips have equal work, the node now stays on the one it received first instead of choosing by block hash.
  • Two new RPCs. getstandardfee reports the recommended fee per logical action, 400 zatoshis, and preciousblock tells the node to prefer one tip among equal-work forks.

P2Pv2 Improvements

Our experimental P2Pv2 stack now runs on zakura-quic, our own QUIC transport built on the upstream quinn-proto crate, replacing the Iroh library. Node IDs, key files, and bootstrap entries carry over unchanged. Owning the transport puts admission control ahead of the cryptography: connection attempts beyond the per-IP and pending-handshake limits are refused before any TLS work begins, so floods of spoofed packets that previously could occupy every handshake slot now hold none.

The native protocol version advances, so 1.7.0 reaches earlier releases only over the legacy Zcash protocol, and handshakes and discovery records now leave room to extend the protocol without another clean break. This release also extends the resource budgets we recently wrote about across the stack:

  • Connections fit in a memory budget. Each native connection's QUIC windows can hold 64 MiB that the node cannot reclaim, so the connection count now derives from peer_memory_budget_bytes, 8 GiB by default, instead of a bare cap. The default max_connections drops from 256 to 92, and startup lowers an oversized configured value with a warning.
  • Block sync bounds every queue. Serving limits the requests each peer keeps in flight, queued block bodies are capped per connection, and a peer that has sent nothing but a status can no longer inflate the download queue.
  • Header sync becomes a subscription. Renewable credit replaces per-page header requests, and the node acknowledges headers only once it has applied them. Peers whose headers fail difficulty or time validation are disconnected, and one peer rewriting its own sync target can no longer force a rescan of every idle offer. Profiling this path also turned up needless copying and reallocations; removing them raises sync throughput by about 12%.
  • Discovery gets the same treatment. Each discovery message gets its own frame type and size limit, peer samples and service summaries are answered through the regulated serving path, record signatures are verified outside the address book lock, and what any one relay can add to the address book is capped.

Other Changes

  • Pruned databases drop the transparent address and spender indexes, and sync substantially faster for it. Our benchmarks measured about 35% higher sync throughput with the dual stack and 49% higher with P2Pv2 alone. Pruned checkpoint-sync state stops maintaining the indexes and upgrades in place without a resync; the RPCs that need them return an explicit unavailable error, and validation and mining are unaffected. The database format advances to 30.0.0.
  • Sapling miner rewards are removed, along with the bundled Sapling proving parameters. Sapling-only mining addresses now get an explicit getblocktemplate error; Sapling transaction validation is unchanged.
  • Configs fail fast. Durations no longer accept week, month, or year units (write days instead), a section written as a TOML array is rejected with its field path, and nat_traversal = true fails at startup: QUIC NAT traversal is removed, and without relays it never gave a node new inbound reachability.
  • The Common libraries are updated to 4.0.0, carrying the full Mainnet schedule.

End of Support

Mainnet zakurad nodes running 1.7.0 halt at height 3,640,098 (estimated 2026-12-04, about four weeks after NU7 activates); upgrade warnings begin three days earlier.

Updating

You can update using our signed release binaries or by upgrading the zakura crate to 1.7.0 via Cargo. See the download page for installation and verification instructions.