Skip to content

Zero v25

Choose a tag to compare

@github-actions github-actions released this 07 Aug 23:07
fe056fc

Zero release 25, built from commit fe056fc.

Changes

Security

  • zebra: three fixes from the Zcash Foundation's upcoming security release,
    applied ahead of it as [upstream-pending] carries on top of upstream
    main (all drop on the next zebra subtree pull):
    • Blocks above the sync lookahead limit no longer score the peer that served
      them. The far-ahead hash comes from a malicious FindBlocks response that
      carries no peer attribution, so the follow-up download is answered by an
      independently chosen honest peer, and scoring it let an attacker get honest
      peers banned throughout initial block download (GHSA-qhr3-cvch-5fh2).
    • A block download answered with a canonical header and a rewritten coinbase
      height is re-requested immediately instead of being rediscovered a sync
      round later, and the serving peer is scored when a parent block Zebra
      already holds proves the claimed height wrong (GHSA-g95h-hw6g-pvgv,
      reported upstream by @zakura-security).
    • Peers that gossip consensus-invalid blocks are scored for misbehavior
      again. The inbound download cleanup downcast errors to VerifyBlockError,
      but the gossip verifier is a BlockVerifierRouter returning RouterError,
      so the downcast never matched and such peers were never banned
      (GHSA-8hh2-hrf2-cqf4).

Changed

  • zebra: subtree updated from v6.2.0 to upstream main (8e9ff3b2cb, past
    v6.2.3), the exact base of the Foundation's upcoming release. Brings the
    6.2.1 to 6.2.3 hardening releases (NU6.3 activation-window and peer
    connectivity fixes) plus unreleased work: MAX_MONEY value-pool enforcement
    (#10817), the block/mempool transaction-verifier split (#11095), singleton
    FindBlocks downloads (#11165), inbound address canonicalization (#11129),
    bans that clear the whole address book for an IP (#11173), zec.rocks default
    seeders (#11096), getdeprecationinfo (#11097), getblocksubsidy NU6-era
    metadata (#11172), indexer gRPC stream limits (#10980), and a
    getblocktemplate coinbase-cache fix (#10954). State format is unchanged
    (28); no resync needed. Binaries self-report zebrad 6.2.3 until upstream's
    release bumps the version.
  • Dropped six zebra carries that merged or were superseded upstream: #11113,
    #11050, #11053, #11061 (superseded by the narrower require-while-syncing
    rule), GHSA-2p4c-3q4q-p463 (#11054), and GHSA-8gxx-hc65-vv82 (#11052).
    Still carried: #10732 FindBlocks stall gating.

Added

  • zebra: two Prometheus metrics for diagnosing slow block acceptance.
    zebra_consensus_transaction_duration_seconds splits transaction verification
    into phase="utxo_fetch" (one state round trip per transparent input) and
    phase="checks" (scripts, signatures, proofs), each labelled
    request="block" or "mempool"; the ratio shows whether a node is bound by
    state lookups or cryptography. rpc_submitblock_inflight gauges how many
    submitted blocks are being verified at once. Needs the prometheus feature
    and a [metrics] endpoint_addr, both already set in our images.

Fixed

  • zebra: submitblock no longer discards a solved block when the miner's client
    disconnects. Verification ran on the RPC connection, so a client timeout
    cancelled it mid-flight and the block vanished with no commit and no log line.
    Verification now completes regardless of the client, the block is still gossiped
    once the client has gone, and every outcome is logged. (50e7e57, 92f499b)
  • zebra: submitblock answers duplicate-inconclusive for a block still being
    verified, instead of verifying it a second time. A miner retrying after a
    timeout would otherwise double the work on an already-slow node; duplicate
    would wrongly imply the node holds a validated copy. (46b3926)

Testing

  • Three regression tests cover the submitblock disconnect and resubmission
    paths, each checked to fail without the fixes above.
    zebra-rpc/examples/submitblock_abandon_repro.rs reproduces it on Regtest: a
    2,000-input block taking ~350ms was lost 3/3 when abandoned at 43/88/177ms,
    and commits after the fix. It also shows the block path reuses none of the
    mempool's verification work. (c9908b5, a3c60db)

Source archives

One ZIP per vendored component (tracked source at the released commit):

  • zcashd-v25.zip
  • zebra-v25.zip
  • zaino-v25.zip
  • zallet-v25.zip
  • orchard-v25.zip
  • librustzcash-v25.zip
  • lightwalletd-v25.zip

Binaries

Prebuilt for linux/x86_64 (built on ubuntu-22.04, glibc 2.35+; stripped).
Telemetry disabled (no sentry/opentelemetry); getblocktemplate and
prometheus metrics included.

  • zebrad-v25-linux-x86_64 (with .sha256)

Note

The "Source code (zip)" and "Source code (tar.gz)" entries are
generated automatically by GitHub from the tag. They are not part of
the Zero release; use the assets above.