From 2905b0509c4ef088d78cd3c1825697bb7c338d1d Mon Sep 17 00:00:00 2001 From: Nicholas Dudfield Date: Fri, 6 Feb 2026 13:18:53 +0700 Subject: [PATCH] perf(consensus): gate RNG SHAMap fetches on sub-state During ConvergingTx all RNG data arrives via proposal leaves, so fetching a peer's commitSet before we've built our own just generates unnecessary traffic. Only fetch commitSetHash once in ConvergingCommit+, and entropySetHash once in ConvergingReveal. --- src/ripple/consensus/Consensus.h | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/ripple/consensus/Consensus.h b/src/ripple/consensus/Consensus.h index c0a8837a5..d082f6ce6 100644 --- a/src/ripple/consensus/Consensus.h +++ b/src/ripple/consensus/Consensus.h @@ -855,13 +855,20 @@ Consensus::peerProposalInternal( newPeerProp.prevLedger(), newPeerPos.signature()); - // Trigger fetch for unknown RNG set hashes + // Trigger fetch for unknown RNG set hashes, but only once we've + // built our own local set for diffing. During ConvergingTx all + // data arrives via proposal leaves — fetching a peer's commitSet + // before we have our own just generates unnecessary traffic. if constexpr (requires(Adaptor & a) { a.fetchRngSetIfNeeded(std::optional{}); }) { - adaptor_.fetchRngSetIfNeeded(newPeerProp.position().commitSetHash); - adaptor_.fetchRngSetIfNeeded(newPeerProp.position().entropySetHash); + if (estState_ != EstablishState::ConvergingTx) + adaptor_.fetchRngSetIfNeeded( + newPeerProp.position().commitSetHash); + if (estState_ == EstablishState::ConvergingReveal) + adaptor_.fetchRngSetIfNeeded( + newPeerProp.position().entropySetHash); } }