Skip to content

submitblock: support skipping redundant validation for mining pool use caseΒ #10724

Description

@mpguerra

Summary

Mining pools typically strip redundant block validation from their submitblock path as standard practice β€” they have already validated the block during construction and want to propagate it as fast as possible. Zebra currently re-validates on receipt. We should provide a way for pool operators to skip this redundant validation to reduce submission latency.

Current behaviour

When a pool calls submitblock, Zebra validates the block before propagating it. This adds latency in the critical path between a miner finding a valid nonce and the block reaching the network.

Desired behaviour

Pool operators can opt out of Zebra re-running checks the pool has already performed during block construction. The block is accepted and propagated without the redundant overhead.

Motivation

This is standard practice across the mining industry: pools construct and validate blocks themselves during the block building process, so re-running the same checks at the node adds latency with no benefit. Supporting this natively in Zebra removes a friction point for mining pools migrating from zcashd, and aligns Zebra with how production mining infrastructure actually operates.

Scope β€” what "skipping validation" does and does not mean

To be explicit: this proposal is about skipping redundant checks that the pool has already performed during block construction β€” not consensus-critical validation.

The following must continue to run regardless:

  • Proof verification (Groth16 / proof system checks)
  • Commitment hash checks (block commitments, note commitments)
  • Chain context validation (connection to chain tip, reorg handling)
  • Any structural integrity checks protecting against malformed input

The intention is to avoid re-running checks the pool operator has provably already performed, not to create a path that bypasses security-relevant validation. The exact set of checks that are safe to skip should be determined during implementation.

Suggested approach

A few implementation options, in rough order of complexity:

  1. Boolean parameter on submitblock β€” e.g. submitblock "hexdata" [skipredundantvalidation=false]. Pools pass true to skip redundant checks. Low disruption, backwards-compatible.
  2. Zebra config flag β€” a mining.skip_redundant_submitblock_validation = true option in zebrad.toml. Pool operators set it once at node configuration time.
  3. Separate RPC method β€” e.g. submitblocklight. More explicit but adds API surface.

Whichever option is chosen, the feature should be restricted to local connections (localhost / unix socket) only. It should not be callable over a remote RPC endpoint even with authentication.

Security considerations

Given that recent vulnerability disclosures have involved validation checks, any implementation of this feature requires:

  • A security review identifying exactly which checks would be skipped, with explicit confirmation that none of the skipped checks are relevant to known or suspected vulnerability classes
  • The feature restricted to localhost / unix socket to limit the attack surface
  • Prominent logging when a block submitted via this path is subsequently found invalid by the network, so pool operators are alerted to construction bugs immediately

References

  • Related: similar behaviour is standard in Bitcoin mining pools (BIP22).

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions