Changed
- On Testnet, the
getblocktemplateRPC no longer switches to a
minimum-difficulty block template early. Zebra previously treated a template
as minimum-difficulty as soon as itscur_timecame within a fixed 150
seconds (2 * PoWTargetSpacingafter Blossom) of the consensus
minimum-difficulty threshold, clampingcur_timeup to just past the
threshold. On Testnet this future-dated the block's timestamp and produced
spurious minimum-difficulty blocks that depress difficulty far below its
equilibrium. Templates now switch to minimum difficulty only oncecur_time
reaches the consensus threshold itself. This is a Testnet-only,
template-construction (non-consensus) change: it does not alter block
validity, and it does not change the difficulty-averaging rule that amplifies
each minimum-difficulty block into a large difficulty drop (tracked in
zcash/zips#1321)
(#10873)
Security
- Allow chain synchronization to immediately retry an honest block body after rejecting a body
with the same header hash, without waiting for a child block to trigger cleanup. - Mitigate a peer-driven CPU-exhaustion vector on nodes with NU6.3 (Ironwood) active: reject
underpaying and structurally invalid shielded mempool transactions before their expensive proof
verification, and disconnect peers that send transactions with invalid shielded proofs.