Release: Zakura 1.0.2
We have released Zakura 1.0.2, a stability and performance release. It makes the zcashd compatibility mode substantially more reliable, and fixes a number of other bugs. We recommend that all node operators update.
zcashd compatibility mode
zcashd compatibility mode runs a real zcashd process with the Zakura node as its only peer, so software that still speaks the old RPC interface keeps working. Its most visible problem, zcashd occasionally stalling behind the chain tip, turned out to have three distinct causes, and this release fixes all of them:
- Block announcements are no longer dropped. An announcement to a momentarily busy
zcashdwas silently skipped with no retry, and on nodes that mine locally, queued announcements were canceled before ever reaching the wire. Announcements are now queued and delivered as soon aszcashdis ready. - Zakura no longer disconnects its own
zcashd. Under heavy load, Zakura's denial-of-service protection could randomly disconnect the operator's ownzcashd, and per-IP connection limits could stretch one disconnect into a multi-second blackout. The configuredzcashdis now never disconnected: its requests are still shed under load, and protection for every other peer is unchanged. - Supervision is more complete. Zakura now shuts down its managed
zcashdprocess when it exits, enables the complete legacy wallet RPC surface by default (with-allowdeprecated=noneas the opt-out), works when Zakura itself runs pruned, and reports an actionable error whenzcashdrequests a block body that pruning has dropped.
Other improvements
- Mempool hardening. The mempool now favors protecting miners and RPC operators, with trade-offs chosen to preserve every real usage pattern we have seen. Transactions larger than a configurable limit (250,000 bytes by default) are now rejected, many kinds of rejection are faster and cheaper, and peer penalties follow the root cause of what actually went wrong, limiting what a malicious peer can do. We also avoid an edge case where peers can get banned at the NU6.3 upgrade boundary.
- Faster block template refreshes. The bundled Sapling proving parameters are now parsed once per process and the prover is shared, instead of being re-parsed on every
getblocktemplaterefresh, and mempool metrics are maintained incrementally rather than recomputed from a full mempool scan after every change. - Faster transparent signature checks. Signature-hash components that are shared across a transaction's inputs are now computed once and reused for every transparent signature check, instead of being recomputed per signature.
- Pruned nodes no longer advertise blocks they cannot serve. Responses to legacy peers no longer include blocks whose bodies pruning has dropped.
- Peer addresses stay out of logs by default. Peer activity logs and metrics keep using redacted, privacy-preserving peer IDs; operators who need raw addresses in their trace files can opt in with the new
network.expose_peer_addressessetting. - Sync fixes. Early-chain difficulty validation now applies the proof-of-work limit correctly at the averaging-window boundary, and header sync now schedules only forward ranges from the durable verified tip instead of backfilling backward.
Sprout history repair in experimental fast sync
Fresh verified-commitment-tree (VCT) fast sync, part of Zakura's experimental P2P stack, did not persist the chain's historical Sprout note-commitment history. An affected node runs normally until a transaction spends against a historical Sprout anchor, which the node can then no longer validate against its local state. Only mainnet databases created by fast sync over the experimental transport are affected, and the experimental stack is off by default.
Zakura 1.0.2 fixes the bug and repairs affected databases automatically. At startup, Zakura restores the missing history from a reviewed copy of the mainnet Sprout history, distributed as exact-versioned crates.io packages, and validates it before writing any repaired state. The repair is crash-safe: an interruption restarts it rather than skipping it, and an affected database refuses to run until its repair completes.
You can also audit the result yourself: a new read-only command, zakurad validate-vct-sprout-history, checks the historical Sprout anchors of any mainnet database, archive or pruned, against the reviewed history. And if you would rather not repair in place, redownloading a snapshot or resyncing from genesis also produces a correct database.
End-of-support halt
Zakura 1.0.2 supports Ironwood (NU6.3) activation and reaches end of support roughly ten days after it, by which point the first post-Ironwood release will be available. Nodes still on 1.0.1 reach end of support roughly one week after activation: they will begin warning about the required update a few days beforehand and then halt. We recommend updating now rather than during the activation window.
Updating
You can update using our signed release binaries or by upgrading the zakura crate to 1.0.2 via Cargo. See the download page for installation and verification instructions.