diff --git a/src/xrpld/app/consensus/ConsensusExtensions.cpp b/src/xrpld/app/consensus/ConsensusExtensions.cpp index fdbffae94..4812962ad 100644 --- a/src/xrpld/app/consensus/ConsensusExtensions.cpp +++ b/src/xrpld/app/consensus/ConsensusExtensions.cpp @@ -260,10 +260,11 @@ ConsensusExtensions::entropyGateThreshold() const // entropy conflict gate resolves: the lowest ENABLED accepted tier's // threshold. In the normal band tier2Threshold (~0.6*original) < quorum // (0.8*effective), so this is the participant-alignment floor and - // sub-quorum rounds reach injection; under heavy nUNL the band collapses - // (tier2 >= quorum) and this is the 80% quorum, so only validator_quorum - // survives. This governs proceed-vs-fall-back only. Non-fallback tier - // labels are allowed only when the round view is anchored by UNLReport; the + // sub-quorum rounds reach injection. Under nUNL the exact integer + // thresholds can cross either way; that only changes which threshold lets + // the pipeline proceed. Final tier labels are computed later from the + // agreed entropy set count in selectEntropy(). Non-fallback tier labels are + // allowed only when the round view is anchored by UNLReport; the // trusted-fallback view is local configuration and selectEntropy() maps it // to consensus_fallback. return std::min(quorumThreshold(), tier2Threshold()); diff --git a/src/xrpld/app/consensus/ConsensusExtensionsDesign.md b/src/xrpld/app/consensus/ConsensusExtensionsDesign.md index 1f70644d6..e1ff1c798 100644 --- a/src/xrpld/app/consensus/ConsensusExtensionsDesign.md +++ b/src/xrpld/app/consensus/ConsensusExtensionsDesign.md @@ -203,6 +203,12 @@ set is labeled `validator_quorum`; if it is below `quorumThreshold()` but reache back. `quorumThreshold()` is 80% of the effective active view; `tier2Threshold()` is the intersection-safe floor over the original pre-nUNL view. +Under nUNL, exact integer thresholds can cross either way. For example, a +20-validator original view with five disabled validators has effective quorum +12 but participant threshold 13. That only changes which threshold dominates +the proceed gate; the final tier label is still derived from the agreed entropy +set count by the ladder above. + In both label cases, a below-threshold minority can advertise a conflicting or unacquirable entropy hash without vetoing the aligned cohort.