Zebra 6.2.3: Peer Connectivity Hardening
This is an optional release with a set of peer connectivity improvements. It is targeted at operators who see issues with their node’s peer set.
Improvements
Outbound Slots No Longer Fill With Non-Serving Peers During Sync
Outbound peer slots could previously fill up with peers that advertise no services, which could stall a fresh sync at genesis when most reachable listeners are non-serving. While syncing, Zebra now requires the NODE_NETWORK service from outbound peers; at or near the network tip it continues to accept non-serving peers, such as pruned nodes, as before. (#11071)
Proactive Replacement of Dropped Outbound Connections
The peer crawler now queues a connection attempt on each crawl interval for every spare outbound slot that has a ready address book candidate, so a dropped outbound connection is replaced promptly. Previously, new connections were only attempted when the peer set ran out of ready peers, when a crawl turned up new addresses, or when the node had no outbound connections at all. Zebra now keeps dialing until the outbound connection limit is reached. (#11102)
Larger getaddr Responses
Zebra now shares up to half of its address book in response to a getaddr request, up from a quarter, so peers can discover more of the network from each response. (#11103)
More Tolerant Stall Detection Near the Tip
The stall detector no longer disconnects peers for empty FindBlocks or FindHeaders responses while the node is within 1,000 estimated blocks of the network tip, which previously could be mistaken for a stall during the normal gaps between blocks near the tip. (#11122)
No More False Bans Around the NU6.3 Branch ID Transition
Mempool transaction relay no longer penalizes peers for adjacent NU6.2 and NU6.3 branch ID mismatches within 40 heights of NU6.3 activation, avoiding unnecessary bans caused by the temporary chain-tip divergence that is expected around any network upgrade boundary. (#11113)
zcashd-compat Sidecar Pinned Ahead of NU6.3
The embedded zcashd-compat release manifest and installer script now pin sidecar zebra-compat-v1.1.0, which follows Mainnet past the NU6.3 (Ironwood) activation at block 3,428,143. The previous zebra-compat-v1.0.0 sidecar predates that activation height and stops following the chain at that block. Supervised deployments using zcashd_source = "embedded" must upgrade, or set zcashd_path to a current sidecar binary, before activation. (#11112)
Other Changes
Retained Peer-Supplied Block Hash in Sync Responses
Chain synchronization now keeps the final block hash a peer returns in a FindBlocks response instead of discarding it to work around obsolete zcashd behavior. (#11093)
Updated librustzcash Dependencies
The orchard, zcash_keys, zcash_primitives, zcash_proofs, and zcash_transparent crates have been upgraded to their released NU6.3 versions. This is a dependency update with no behavior change. (#11111)
Upgrading
We encourage operators who are experiencing peering issues, or who want to be proactive about avoiding them, to upgrade to 6.2.3. You can find the release on GitHub, crates.io, and Docker Hub.
If you run a supervised deployment with zcashd_source = "embedded", upgrade to this release, or point zcashd_path at a current sidecar binary, before the NU6.3 (Ironwood) activation at Mainnet block 3,428,143, since the previously pinned sidecar stops following the chain at that height.
Contributors
Thank you to everyone who contributed to this release:
@arya2, @jvff, @nuttycom, and @upbqdn.
Zebra is the Zcash Foundation’s independent, Rust-based implementation of the Zcash protocol. Learn more at github.com/ZcashFoundation/zebra.