From 6ec639fa3a75bb4887fce4ba89eb20944ffb59f6 Mon Sep 17 00:00:00 2001 From: xdustinface Date: Sun, 9 Aug 2026 23:21:36 +1000 Subject: [PATCH 01/36] feat(dash): add env-gated QRInfo capture hook for offline repro When `DASH_SML_DUMP_QRINFO_DIR` is set, `feed_qr_info` writes the pre-feed block container and the raw `QRInfo` to that directory before processing. Validation failures against live chain state are otherwise unreproducible once the rotation cycle advances, so the capture preserves the failing input as a test fixture. Inert without the environment variable. --- dash/src/sml/masternode_list_engine/mod.rs | 30 ++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/dash/src/sml/masternode_list_engine/mod.rs b/dash/src/sml/masternode_list_engine/mod.rs index 42f1b35ff..c558106f5 100644 --- a/dash/src/sml/masternode_list_engine/mod.rs +++ b/dash/src/sml/masternode_list_engine/mod.rs @@ -32,6 +32,8 @@ use crate::{BlockHash, QuorumHash}; #[cfg(feature = "bincode")] use bincode::{Decode, Encode}; use hashes::Hash; +#[cfg(feature = "bincode")] +use std::{env, fs}; #[cfg(feature = "serde")] use serde::{Deserialize, Serialize}; @@ -753,6 +755,31 @@ impl MasternodeListEngine { Ok(self.block_container.get_height(&cycle_key)) } + /// Best-effort capture of the pre-feed block container and the raw QRInfo + /// for offline reproduction of validation failures. Active only while + /// `DASH_SML_DUMP_QRINFO_DIR` is set, inert otherwise. + #[cfg(feature = "bincode")] + fn dump_qr_info_capture(&self, qr_info: &QRInfo) { + let Ok(dir) = env::var("DASH_SML_DUMP_QRINFO_DIR") else { + return; + }; + if fs::create_dir_all(&dir).is_err() { + return; + } + let tip_height = self + .block_container + .get_height(&qr_info.mn_list_diff_tip.block_hash) + .unwrap_or_default(); + if let Ok(bytes) = + bincode::encode_to_vec(&self.block_container, bincode::config::standard()) + { + let _ = fs::write(format!("{dir}/block_container_{tip_height}.dat"), bytes); + } + if let Ok(bytes) = bincode::encode_to_vec(qr_info, bincode::config::standard()) { + let _ = fs::write(format!("{dir}/qrinfo_{tip_height}.dat"), bytes); + } + } + /// Processes and applies a QRInfo message to the masternode list engine. /// /// The caller is expected to pre-populate [`Self::block_container`] with heights @@ -773,6 +800,9 @@ impl MasternodeListEngine { verify_tip_non_rotated_quorums: bool, verify_rotated_quorums: bool, ) -> Result, QuorumValidationError> { + #[cfg(feature = "bincode")] + self.dump_qr_info_capture(&qr_info); + #[allow(unused_variables)] let QRInfo { quorum_snapshot_at_h_minus_c, From 4ab37e25d05d020b15ec7ab85e9e049d3d8e0266 Mon Sep 17 00:00:00 2001 From: xdustinface Date: Sun, 9 Aug 2026 23:48:10 +1000 Subject: [PATCH 02/36] fix(dash): key rotation ChainLock signatures per quorum work block Core attaches each rotated quorum's ChainLock signature to that quorum's own work block (`quorumsCLSigs`, cycle base minus 8), but `feed_qr_info` collapsed them to one signature per diff, taken from the first rotating quorum encountered, and stamped the same 4-signature tuple onto every entry of a batch. The active rotation set can span several cycles at once, because a failed DKG leaves the previous cycle's quorum in place at that index, so every such straggler got quarter modifiers built from another cycle's signatures. The reconstructed member sets then disagreed with the real signers and `feed_qr_info` hard-failed the whole QRInfo with `AllCommitmentAggregatedSignatureNotValid` on the first fresh-sync response, permanently wedging masternode sync, ChainLock validation and InstantSend verification. `feed_qr_info` now builds a work-height-to-signature map from every diff's per-quorum `quorumsCLSigs` data and each rotated quorum looks up the four quarter signatures of its own cycle. Groups whose quorum hash heights are unknown are keyed by elimination oldest diff first. Entries whose signatures are missing settle as `Skipped` individually instead of poisoning the batch, and `find_rotated_masternodes_for_quorums` returns a per-quorum `Result` for the same reason. The cycle key for `rotated_quorums_per_cycle` is now derived from the newest cycle base among the entries instead of the first entry's quorum hash, which stored the set under the old cycle's hash whenever quorum index 0 was a straggler and broke IS lock cycle lookups. `qr_info_referenced_block_hashes` includes rotating quorum hashes from all diffs so callers feed the heights the signature map needs. Regression fixture `qrinfo_2518986` was captured from a live mainnet fresh sync at tip 2518986, where index 0 of the active set carried the previous cycle's commitment and reproduced the failure deterministically. --- dash/src/sml/masternode_list_engine/mod.rs | 486 +++++++++++------- .../rotated_quorum_construction.rs | 97 ++-- .../sml/masternode_list_engine/validation.rs | 44 +- .../block_container_2518986.dat | Bin 0 -> 5331 bytes .../data/test_DML_diffs/qrinfo_2518986.dat | Bin 0 -> 636758 bytes 5 files changed, 384 insertions(+), 243 deletions(-) create mode 100644 dash/tests/data/test_DML_diffs/block_container_2518986.dat create mode 100644 dash/tests/data/test_DML_diffs/qrinfo_2518986.dat diff --git a/dash/src/sml/masternode_list_engine/mod.rs b/dash/src/sml/masternode_list_engine/mod.rs index c558106f5..f19ad0c42 100644 --- a/dash/src/sml/masternode_list_engine/mod.rs +++ b/dash/src/sml/masternode_list_engine/mod.rs @@ -6,8 +6,6 @@ mod rotated_quorum_construction; #[cfg(feature = "quorum_validation")] mod validation; -#[cfg(feature = "quorum_validation")] -use core::fmt; use std::collections::{BTreeMap, BTreeSet}; use crate::Network; @@ -32,44 +30,15 @@ use crate::{BlockHash, QuorumHash}; #[cfg(feature = "bincode")] use bincode::{Decode, Encode}; use hashes::Hash; -#[cfg(feature = "bincode")] -use std::{env, fs}; #[cfg(feature = "serde")] use serde::{Deserialize, Serialize}; +#[cfg(feature = "bincode")] +use std::{env, fs}; /// Depth offset between cycle boundary and work block (matches Dash Core WORK_DIFF_DEPTH) /// The mnListDiffH in QRInfo is at (cycle_height - WORK_DIFF_DEPTH), not at the cycle boundary itself pub const WORK_DIFF_DEPTH: u32 = 8; -/// Identifies one of the rotation ChainLock signature slots carried by a QRInfo -/// response. Each slot corresponds to one per-cycle diff in the rotation quorum -/// formation proof: three historical cycles, the h diff, and the tip. -#[cfg(feature = "quorum_validation")] -#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)] -#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] -#[cfg_attr(feature = "bincode", derive(Encode, Decode))] -pub(crate) enum RotationChainLockSignatureSlot { - HMinus3c, - HMinus2c, - HMinusC, - H, - Tip, -} - -#[cfg(feature = "quorum_validation")] -impl fmt::Display for RotationChainLockSignatureSlot { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - let name = match self { - Self::HMinus3c => "h-3c", - Self::HMinus2c => "h-2c", - Self::HMinusC => "h-c", - Self::H => "h", - Self::Tip => "tip", - }; - f.write_str(name) - } -} - /// Transient observability report returned from [`MasternodeListEngine::feed_qr_info`]. /// Not persisted; lives only for the duration of the call. #[derive(Clone, Debug, PartialEq, Eq)] @@ -108,29 +77,6 @@ impl QRInfoFeedResult { } } -/// Returns the 4 rotation CL signatures when every slot is present, or `None` -/// when any slot is missing. On a miss, logs which slots were absent at debug -/// level under the given `cycle_label`. -#[cfg(feature = "quorum_validation")] -fn collect_rotation_sigs( - slots: [(Option, RotationChainLockSignatureSlot); 4], - cycle_label: &str, -) -> Option<[BLSSignature; 4]> { - let missing: Vec = - slots.iter().filter_map(|(sig, slot)| sig.is_none().then_some(*slot)).collect(); - if !missing.is_empty() { - tracing::debug!( - "QRInfo missing rotation ChainLock signatures: {:?}; \ - {} rotated quorums will not be stored", - missing, - cycle_label - ); - return None; - } - let [a, b, c, d] = slots.map(|(sig, _)| sig); - Some([a?, b?, c?, d?]) -} - #[derive(Clone, Eq, PartialEq, Default)] #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] #[cfg_attr(feature = "bincode", derive(Encode, Decode))] @@ -536,26 +482,23 @@ impl MasternodeListEngine { self.block_container.feed_block_height(height, block_hash) } - /// Loads the rotation quorums from the MN list at the h work block, attaches - /// the captured CL signatures, and returns them along with the cycle hash - /// they should be stored under. Returns `None` when prerequisite state is - /// not yet loaded, when the MN list carries no rotating quorums, or when - /// the cycle is already fully verified. All three cases are expected on a - /// fresh sync and not errors. + /// Loads the rotation quorums from the MN list at the h work block, + /// attaches each quorum's own cycle quarter signatures, and returns them + /// along with the cycle hash they should be stored under. Returns `None` + /// when prerequisite state is not yet loaded, when the MN list carries no + /// rotating quorums, or when the cycle is already fully verified. All + /// three cases are expected on a fresh sync and not errors. #[cfg(feature = "quorum_validation")] fn try_load_previous_cycle_entries( &self, work_block_hash: BlockHash, isd_type: LLMQType, - sigs: [BLSSignature; 4], + sigs_by_work_height: &BTreeMap, ) -> Option<(QuorumHash, Vec)> { let work_height = self.block_container.get_height(&work_block_hash)?; let mn_list = self.masternode_lists.get(&work_height)?; let quorums_of_type = mn_list.quorums.get(&isd_type)?; - let cycle_hash = quorums_of_type - .values() - .find(|q| q.quorum_entry.quorum_index == Some(0)) - .map(|q| q.quorum_entry.quorum_hash)?; + let cycle_hash = self.active_set_cycle_hash(quorums_of_type.values())?; if self.is_cycle_fully_verified(&cycle_hash) { return None; } @@ -563,8 +506,9 @@ impl MasternodeListEngine { .values() .cloned() .map(|mut q| { - q.verifying_chain_lock_signature = - Some(VerifyingChainLockSignaturesType::Rotating(sigs)); + q.verifying_chain_lock_signature = self + .quarter_sigs_for_quorum(sigs_by_work_height, &q.quorum_entry) + .map(VerifyingChainLockSignaturesType::Rotating); q }) .collect(); @@ -575,21 +519,15 @@ impl MasternodeListEngine { /// under their cycle boundary hash. This enables IS lock verification for /// the previous cycle after a fresh sync where `lastCommitmentPerIndex` /// only provides the current cycle's quorums. - /// - /// The 4 CL sigs `[sig_h_minus_3c, sig_h_minus_2c, sig_h_minus_c, sig_h]` - /// captured by `feed_qr_info` align with the h-c cycle's quarters: the - /// per-diff extraction yields sig_h_minus_3c from h-4c work block (quarter - /// 0), sig_h_minus_2c from h-3c (quarter 1), sig_h_minus_c from h-2c - /// (quarter 2), sig_h from h-c (quarter 3). #[cfg(feature = "quorum_validation")] fn validate_and_store_previous_cycle_quorums( &mut self, work_block_hash: BlockHash, - sigs: [BLSSignature; 4], + sigs_by_work_height: &BTreeMap, ) -> Result<(), QuorumValidationError> { let isd_type = self.network.isd_llmq_type(); let Some((cycle_hash, mut entries)) = - self.try_load_previous_cycle_entries(work_block_hash, isd_type, sigs) + self.try_load_previous_cycle_entries(work_block_hash, isd_type, sigs_by_work_height) else { return Ok(()); }; @@ -671,39 +609,34 @@ impl MasternodeListEngine { /// Block hashes referenced by a QRInfo message that the engine needs heights for. /// /// Covers every diff endpoint (base and target) and every rotating commitment hash - /// carried in the QRInfo. When an h-4c diff is present, rotating quorums in - /// `mn_list_diff_h.new_quorums` are also included so the previous cycle can be - /// revalidated. + /// carried in the QRInfo. Rotating quorum hashes from every diff are included + /// because each quorum's cycle base, and with it the work block its ChainLock + /// signature belongs to, is derived from that hash's height. pub fn qr_info_referenced_block_hashes(qr_info: &QRInfo) -> BTreeSet { let mut hashes = BTreeSet::new(); - for diff in [ + let mut diffs: Vec<&MnListDiff> = vec![ &qr_info.mn_list_diff_tip, &qr_info.mn_list_diff_h, &qr_info.mn_list_diff_at_h_minus_c, &qr_info.mn_list_diff_at_h_minus_2c, &qr_info.mn_list_diff_at_h_minus_3c, - ] { - hashes.insert(diff.base_block_hash); - hashes.insert(diff.block_hash); + ]; + if let Some((_, diff)) = &qr_info.quorum_snapshot_and_mn_list_diff_at_h_minus_4c { + diffs.push(diff); } + diffs.extend(&qr_info.mn_list_diff_list); - if let Some((_, diff)) = &qr_info.quorum_snapshot_and_mn_list_diff_at_h_minus_4c { + for diff in diffs { hashes.insert(diff.base_block_hash); hashes.insert(diff.block_hash); - - for quorum_entry in &qr_info.mn_list_diff_h.new_quorums { + for quorum_entry in &diff.new_quorums { if quorum_entry.llmq_type.is_rotating_quorum_type() { hashes.insert(quorum_entry.quorum_hash); } } } - for diff in &qr_info.mn_list_diff_list { - hashes.insert(diff.base_block_hash); - hashes.insert(diff.block_hash); - } - for quorum_entry in &qr_info.last_commitment_per_index { hashes.insert(quorum_entry.quorum_hash); } @@ -780,6 +713,163 @@ impl MasternodeListEngine { } } + /// Best ChainLock signature per rotation work block, extracted from the + /// per-quorum `quorumsCLSigs` mapping of every diff in a QRInfo. + /// + /// Core keys each rotated quorum's ChainLock signature to that quorum's + /// own work block (cycle base minus [`WORK_DIFF_DEPTH`]). The active + /// rotation set can span several cycles at once, because a failed DKG + /// leaves the previous cycle's quorum in place at that index, so one + /// diff can carry signatures for more than one cycle and a single + /// per-diff signature cannot represent them all. + /// + /// A signature group whose quorum hash heights are all unknown is keyed + /// by elimination: walking diffs oldest first, a group whose signature + /// value already keys an earlier work block belongs to that older cycle, + /// and when a single group remains it is the diff's newest cycle, keyed + /// at the newest work block the diff can carry. Exact keys always win. + #[cfg(feature = "quorum_validation")] + fn rotation_cl_sigs_by_work_height<'a>( + &self, + diffs: impl IntoIterator, + ) -> BTreeMap { + let mut diffs: Vec<&MnListDiff> = diffs.into_iter().collect(); + diffs.sort_by_key(|diff| self.block_container.get_height(&diff.block_hash)); + + let mut sigs_by_work_height = BTreeMap::new(); + for diff in &diffs { + for sig_obj in &diff.quorums_chainlock_signatures { + for &index in &sig_obj.index_set { + let Some(quorum) = diff.new_quorums.get(index as usize) else { + continue; + }; + if !quorum.llmq_type.is_rotating_quorum_type() { + continue; + } + if let Some(work_height) = self + .rotated_quorum_cycle_base(quorum) + .and_then(|cycle_base| cycle_base.checked_sub(WORK_DIFF_DEPTH)) + { + sigs_by_work_height.insert(work_height, sig_obj.signature); + } + } + } + } + + for diff in &diffs { + let Some(newest_work_height) = self.diff_newest_work_height(diff) else { + continue; + }; + if sigs_by_work_height.contains_key(&newest_work_height) { + continue; + } + let mut candidate_sigs: Vec<&BLSSignature> = Vec::new(); + for sig_obj in &diff.quorums_chainlock_signatures { + let mut group_resolved = false; + let mut group_has_unresolved_rotated = false; + let mut hypothesis_mismatch = false; + for &index in &sig_obj.index_set { + let Some(quorum) = diff.new_quorums.get(index as usize) else { + continue; + }; + if !quorum.llmq_type.is_rotating_quorum_type() { + continue; + } + if self.rotated_quorum_cycle_base(quorum).is_some() { + group_resolved = true; + continue; + } + group_has_unresolved_rotated = true; + // The fallback presumes the group belongs to the diff's + // newest cycle. Where the container knows the true block + // at the presumed quorum height, a hash mismatch + // disproves that presumption. + let Some(quorum_index) = + quorum.quorum_index.and_then(|i| u32::try_from(i).ok()) + else { + continue; + }; + let presumed_height = newest_work_height + WORK_DIFF_DEPTH + quorum_index; + if let Some(block_hash) = self.block_container.get_hash(&presumed_height) + && *block_hash != quorum.quorum_hash + { + hypothesis_mismatch = true; + } + } + if group_resolved || !group_has_unresolved_rotated || hypothesis_mismatch { + continue; + } + if sigs_by_work_height.values().any(|sig| *sig == sig_obj.signature) { + continue; + } + candidate_sigs.push(&sig_obj.signature); + } + if let [only_group_sig] = candidate_sigs.as_slice() { + sigs_by_work_height.insert(newest_work_height, **only_group_sig); + } + } + sigs_by_work_height + } + + /// The newest work block whose cycle a diff can carry, defined only for + /// diffs ending at a work block: the cycle starting at `end + 8 - c` is + /// mined a few blocks into its own cycle, so it is the newest one whose + /// commitment fits inside `(base, end]`, and its work block sits one + /// interval below the diff end. + #[cfg(feature = "quorum_validation")] + fn diff_newest_work_height(&self, diff: &MnListDiff) -> Option { + let end_height = self.block_container.get_height(&diff.block_hash)?; + let interval = self.network.isd_llmq_type().params().dkg_params.interval; + (end_height % interval == interval - WORK_DIFF_DEPTH) + .then(|| end_height.checked_sub(interval)) + .flatten() + } + + /// Cycle base height (the height of the quorum-index-0 block) for a + /// rotated quorum, derived from the quorum's own hash and index. + #[cfg(feature = "quorum_validation")] + fn rotated_quorum_cycle_base(&self, quorum: &QuorumEntry) -> Option { + let height = self.block_container.get_height(&quorum.quorum_hash)?; + let index = u32::try_from(quorum.quorum_index?).ok()?; + height.checked_sub(index) + } + + /// The four quarter ChainLock signatures for the cycle a rotated quorum + /// belongs to, ordered oldest quarter first: `[B-3c-8, B-2c-8, B-c-8, + /// B-8]` for cycle base `B` and DKG interval `c`. + #[cfg(feature = "quorum_validation")] + fn quarter_sigs_for_quorum( + &self, + sigs_by_work_height: &BTreeMap, + quorum: &QuorumEntry, + ) -> Option<[BLSSignature; 4]> { + let cycle_base = self.rotated_quorum_cycle_base(quorum)?; + let interval = quorum.llmq_type.params().dkg_params.interval; + let sig_at = |cycles_back: u32| { + cycle_base + .checked_sub(cycles_back * interval + WORK_DIFF_DEPTH) + .and_then(|work_height| sigs_by_work_height.get(&work_height).copied()) + }; + Some([sig_at(3)?, sig_at(2)?, sig_at(1)?, sig_at(0)?]) + } + + /// Cycle hash for an active rotated quorum set: the block hash at the + /// newest cycle base among the entries. The entry at quorum index 0 does + /// not necessarily belong to the set's own cycle (a failed DKG leaves an + /// older cycle's quorum in the set at that index), but the newest cycle + /// base always identifies the cycle the set is active for. + #[cfg(feature = "quorum_validation")] + fn active_set_cycle_hash<'a>( + &self, + entries: impl IntoIterator, + ) -> Option { + let newest_cycle_base = entries + .into_iter() + .filter_map(|entry| self.rotated_quorum_cycle_base(&entry.quorum_entry)) + .max()?; + self.block_container.get_hash(&newest_cycle_base).copied() + } + /// Processes and applies a QRInfo message to the masternode list engine. /// /// The caller is expected to pre-populate [`Self::block_container`] with heights @@ -803,6 +893,22 @@ impl MasternodeListEngine { #[cfg(feature = "bincode")] self.dump_qr_info_capture(&qr_info); + #[cfg(feature = "quorum_validation")] + let rotation_sigs_by_work_height = { + let mut diffs: Vec<&MnListDiff> = vec![ + &qr_info.mn_list_diff_tip, + &qr_info.mn_list_diff_h, + &qr_info.mn_list_diff_at_h_minus_c, + &qr_info.mn_list_diff_at_h_minus_2c, + &qr_info.mn_list_diff_at_h_minus_3c, + ]; + if let Some((_, diff)) = &qr_info.quorum_snapshot_and_mn_list_diff_at_h_minus_4c { + diffs.push(diff); + } + diffs.extend(&qr_info.mn_list_diff_list); + self.rotation_cl_sigs_by_work_height(diffs) + }; + #[allow(unused_variables)] let QRInfo { quorum_snapshot_at_h_minus_c, @@ -819,15 +925,6 @@ impl MasternodeListEngine { mn_list_diff_list, } = qr_info; - // When the tip is mid-cycle (before the DKG commitment is mined), - // `sig_tip` will naturally be `None` but isn't needed for validating - // the historical rotation quorums in `last_commitment_per_index`. - // The check below selects which 4-sig tuple `rotation_sigs` aligns - // to: current cycle when this is true, previous cycle otherwise. - #[cfg(feature = "quorum_validation")] - let tip_diff_has_rotating_quorums = - mn_list_diff_tip.new_quorums.iter().any(|q| q.llmq_type.is_rotating_quorum_type()); - // Apply quorum snapshots and masternode list diffs for (snapshot, diff) in quorum_snapshot_list.into_iter().zip(mn_list_diff_list) { self.known_snapshots.insert(diff.block_hash, snapshot); @@ -877,10 +974,6 @@ impl MasternodeListEngine { self.known_snapshots .insert(mn_list_diff_at_h_minus_3c.block_hash, quorum_snapshot_at_h_minus_3c); - #[cfg(feature = "quorum_validation")] - let maybe_sig_h_minus_3c = - self.apply_diff(mn_list_diff_at_h_minus_3c, None, false, None)?; - #[cfg(not(feature = "quorum_validation"))] self.apply_diff(mn_list_diff_at_h_minus_3c, None, false, None)?; self.known_snapshots .insert(mn_list_diff_at_h_minus_2c.block_hash, quorum_snapshot_at_h_minus_2c); @@ -902,68 +995,29 @@ impl MasternodeListEngine { _ => None, }; - #[cfg(feature = "quorum_validation")] - let maybe_sig_tip = - self.apply_diff(mn_list_diff_tip, None, verify_tip_non_rotated_quorums, sigs)?; - #[cfg(not(feature = "quorum_validation"))] self.apply_diff(mn_list_diff_tip, None, verify_tip_non_rotated_quorums, sigs)?; - // The 4 historical sigs `[sig_h_minus_3c..sig_h]` align with the h-c - // cycle's 4 quarters (work blocks h-4c-8, h-3c-8, h-2c-8, h-c-8). + // The active set at the h work block can only be validated when the + // h-4c diff supplies the masternode lists and snapshots for its + // oldest quarters. Entries whose quarter signatures or history are + // still missing settle as `Skipped` individually. #[cfg(feature = "quorum_validation")] - if let (Some(s3), Some(s2), Some(s1), Some(s0)) = - (maybe_sig_h_minus_3c, maybe_sig_h_minus_2c, maybe_sig_h_minus_c, maybe_sig_h) - { - self.validate_and_store_previous_cycle_quorums(work_block_hash_h, [s3, s2, s1, s0])?; + if can_verify_previous { + self.validate_and_store_previous_cycle_quorums( + work_block_hash_h, + &rotation_sigs_by_work_height, + )?; } - // Missing CL sigs are a legitimate state when a diff spans a range - // with no successful rotating DKG: Dash Core's `BuildQuorumsDiff` only - // emits mined-AND-active commitments into `new_quorums`, so failed - // or null DKG commits leave `new_quorums` empty for that diff and - // `apply_diff` returns no rotating sig for it. We log once and leave - // `rotation_sigs = None`. Affected entries in `last_commitment_per_index` - // are recorded without `VerifyingChainLockSignaturesType::Rotating` and - // end up `Skipped(MissingRotationChainLockSigs)`, which keeps - // them out of `rotated_quorums_per_cycle`. IS locks signed under such a - // cycle cannot be verified by this SPV until a later QRInfo arrives - // with complete sigs. - #[cfg(feature = "quorum_validation")] - let rotation_sigs: Option<[BLSSignature; 4]> = { - let any_rotated_quorum_needs_fresh_validation = last_commitment_per_index - .iter() - .any(|quorum_entry| self.known_qualified_quorum_entry(quorum_entry).is_none()); - if !any_rotated_quorum_needs_fresh_validation { - None - } else if tip_diff_has_rotating_quorums { - // Tip has new rotating quorums: `lastCommitmentPerIndex` is - // from the current cycle. The 4 sigs align as - // `[sig_h_minus_2c, sig_h_minus_c, sig_h, sig_tip]`. - collect_rotation_sigs( - [ - (maybe_sig_h_minus_2c, RotationChainLockSignatureSlot::HMinus2c), - (maybe_sig_h_minus_c, RotationChainLockSignatureSlot::HMinusC), - (maybe_sig_h, RotationChainLockSignatureSlot::H), - (maybe_sig_tip, RotationChainLockSignatureSlot::Tip), - ], - "current-cycle", - ) - } else { - // Tip has no new rotating quorums: `lastCommitmentPerIndex` - // is from the previous cycle. The 4 sigs come from the - // historical diffs `[sig_h_minus_3c, sig_h_minus_2c, sig_h_minus_c, sig_h]`. - collect_rotation_sigs( - [ - (maybe_sig_h_minus_3c, RotationChainLockSignatureSlot::HMinus3c), - (maybe_sig_h_minus_2c, RotationChainLockSignatureSlot::HMinus2c), - (maybe_sig_h_minus_c, RotationChainLockSignatureSlot::HMinusC), - (maybe_sig_h, RotationChainLockSignatureSlot::H), - ], - "previous-cycle", - ) - } - }; - + // Each entry gets the quarter signatures of its own cycle. A failed + // DKG leaves an older cycle's quorum in the active set at that + // index, so entries in `last_commitment_per_index` do not all + // belong to the same cycle. An entry whose signatures are missing + // stays without `VerifyingChainLockSignaturesType::Rotating` and + // settles as `Skipped(MissingRotationChainLockSigs)`, which keeps + // it out of `rotated_quorums_per_cycle`. IS locks signed by such a + // quorum cannot be verified by this SPV until a later QRInfo + // arrives with complete data. #[cfg(feature = "quorum_validation")] let mut qualified_last_commitment_per_index = last_commitment_per_index .into_iter() @@ -974,16 +1028,11 @@ impl MasternodeListEngine { Ok(qualified_quorum_entry) } else { newly_qualified_count += 1; + let quarter_sigs = + self.quarter_sigs_for_quorum(&rotation_sigs_by_work_height, &quorum_entry); let mut qualified_quorum_entry: QualifiedQuorumEntry = quorum_entry.into(); - if let Some([sig_h_minus_2c, sig_h_minus_c, sig_h, sig_tip]) = rotation_sigs { - qualified_quorum_entry.verifying_chain_lock_signature = - Some(VerifyingChainLockSignaturesType::Rotating([ - sig_h_minus_2c, - sig_h_minus_c, - sig_h, - sig_tip, - ])); - } + qualified_quorum_entry.verifying_chain_lock_signature = + quarter_sigs.map(VerifyingChainLockSignaturesType::Rotating); Ok(qualified_quorum_entry) } }) @@ -1020,8 +1069,7 @@ impl MasternodeListEngine { } } - let cycle_key = - qualified_last_commitment_per_index.first().map(|q| q.quorum_entry.quorum_hash); + let cycle_key = self.active_set_cycle_hash(qualified_last_commitment_per_index.iter()); for rotated_quorum in qualified_last_commitment_per_index.iter() { let masternode_lists_having_quorum_hash_for_quorum_type = @@ -1147,7 +1195,7 @@ impl MasternodeListEngine { } } } else if let Some(cycle_key) = - qualified_last_commitment_per_index.first().map(|q| q.quorum_entry.quorum_hash) + self.active_set_cycle_hash(qualified_last_commitment_per_index.iter()) { fully_verified_count = qualified_last_commitment_per_index .iter() @@ -1504,6 +1552,8 @@ mod tests { #[cfg(feature = "quorum_validation")] use crate::sml::quorum_validation_error::QuorumValidationError; use std::collections::BTreeMap; + #[cfg(feature = "quorum_validation")] + use std::collections::BTreeSet; #[cfg(feature = "quorum_validation")] use { @@ -1743,6 +1793,94 @@ mod tests { (engine, qr_info) } + /// Captured 2026-08-09 from a fresh mainnet sync at tip 2518986 (cycle + /// boundary 2518848). The active rotation set at that state carried a + /// quorum whose latest commitment came from an older cycle, so the + /// per-quorum quarter signatures differ within one QRInfo batch. The + /// engine state mirrors production cold start: empty masternode lists, + /// only the block container pre-fed. + #[cfg(feature = "quorum_validation")] + fn load_qrinfo_2518986_fixture() -> (MasternodeListEngine, QRInfo) { + let block_container_bytes: &[u8] = + include_bytes!("../../../tests/data/test_DML_diffs/block_container_2518986.dat"); + let block_container: MasternodeListEngineBlockContainer = + bincode::decode_from_slice(block_container_bytes, bincode::config::standard()) + .expect("expected to decode") + .0; + let qr_info_bytes: &[u8] = + include_bytes!("../../../tests/data/test_DML_diffs/qrinfo_2518986.dat"); + let qr_info: QRInfo = + bincode::decode_from_slice(qr_info_bytes, bincode::config::standard()) + .expect("expected to decode") + .0; + + let mut engine = MasternodeListEngine { + network: Network::Mainnet, + ..Default::default() + }; + engine.block_container = block_container; + (engine, qr_info) + } + + #[test] + #[cfg(feature = "quorum_validation")] + fn validate_first_qr_info_on_fresh_engine_with_mixed_cycle_quorums() { + let (mut engine, qr_info) = load_qrinfo_2518986_fixture(); + + // The fixture's active set mixes cycles: quorum index 0 carries the + // previous cycle's commitment (its DKG failed in the current cycle), + // the remaining 31 belong to the current cycle at 2518848. The pin + // below keeps a fixture swap from silently dropping that property. + let current_cycle_base = 2518848; + let mixed_cycle_bases: BTreeSet = qr_info + .last_commitment_per_index + .iter() + .filter_map(|q| { + let height = engine.block_container.get_height(&q.quorum_hash)?; + let index = u32::try_from(q.quorum_index?).ok()?; + height.checked_sub(index) + }) + .collect(); + assert!( + mixed_cycle_bases.len() > 1 && mixed_cycle_bases.contains(¤t_cycle_base), + "fixture must carry a mixed-cycle active set, got cycle bases {:?}", + mixed_cycle_bases + ); + + let result = engine.feed_qr_info(qr_info, true, true); + let feed_result = match result { + Ok(feed_result) => feed_result.expect("expected a feed result"), + Err(e) => panic!("first QRInfo on a fresh engine must feed cleanly: {}", e), + }; + + assert_eq!(feed_result.rotated_quorum_count, 32); + assert_eq!( + feed_result.fully_verified_count, 32, + "every active-set entry must verify under its own cycle's quarter signatures" + ); + assert_eq!( + feed_result.stored_cycle_height, + Some(current_cycle_base), + "the active set must be stored under the current cycle, not the straggler's" + ); + + let cycle_hash = *engine + .block_container + .get_hash(¤t_cycle_base) + .expect("expected current cycle hash"); + let stored_cycle = engine + .rotated_quorums_per_cycle + .get(&cycle_hash) + .expect("expected active set stored under the current cycle hash"); + assert_eq!(stored_cycle.len(), 32); + assert!( + stored_cycle + .values() + .all(|q| matches!(q.verified, LLMQEntryVerificationStatus::Verified)), + "every stored quorum must be verified" + ); + } + #[test] fn validate_from_qr_info_and_mn_list_diffs() { let (mut masternode_list_engine, qr_info) = load_qrinfo_2240504_fixture(); diff --git a/dash/src/sml/masternode_list_engine/rotated_quorum_construction.rs b/dash/src/sml/masternode_list_engine/rotated_quorum_construction.rs index 21bf9e824..0d7e30b15 100644 --- a/dash/src/sml/masternode_list_engine/rotated_quorum_construction.rs +++ b/dash/src/sml/masternode_list_engine/rotated_quorum_construction.rs @@ -71,63 +71,74 @@ impl MasternodeListEngine { Ok(rotated_members) } + /// Resolves the signing member set for each rotated quorum, per quorum. + /// + /// Entries of an active rotated quorum set do not all belong to the same + /// cycle (a failed DKG leaves the previous cycle's quorum in place at + /// that index), and older cycles may lack the history or signatures the + /// reconstruction needs. Each quorum therefore gets its own `Result`, so + /// one unresolvable straggler cannot poison the rest of the set. #[allow(dead_code)] pub(in crate::sml::masternode_list_engine) fn find_rotated_masternodes_for_quorums<'a>( &'a self, quorums: &'a [&'a QualifiedQuorumEntry], - ) -> Result>, QuorumValidationError> + ) -> BTreeMap, QuorumValidationError>> { - let mut return_btree_map = BTreeMap::new(); - let mut cycles: BTreeMap>> = - BTreeMap::new(); + let mut members_by_quorum_hash = BTreeMap::new(); + let mut cycles: BTreeMap< + CoreBlockHeight, + Result>, QuorumValidationError>, + > = BTreeMap::new(); for quorum in quorums { - let Some(quorum_block_height) = - self.block_container.get_height(&quorum.quorum_entry.quorum_hash) - else { - return Err(QuorumValidationError::RequiredBlockNotPresent( - quorum.quorum_entry.quorum_hash, "getting height for a quorum hash when trying to find rotated masternodes for quorums".to_string() - )); + let quorum_hash = quorum.quorum_entry.quorum_hash; + let Some(quorum_block_height) = self.block_container.get_height(&quorum_hash) else { + members_by_quorum_hash.insert( + quorum_hash, + Err(QuorumValidationError::RequiredBlockNotPresent( + quorum_hash, + "getting height for a quorum hash when trying to find rotated masternodes for quorums".to_string(), + )), + ); + continue; }; let llmq_type = quorum.quorum_entry.llmq_type; let Some(quorum_index) = quorum.quorum_entry.quorum_index else { - return Err(QuorumValidationError::RequiredQuorumIndexNotPresent( - quorum.quorum_entry.quorum_hash, - )); + members_by_quorum_hash.insert( + quorum_hash, + Err(QuorumValidationError::RequiredQuorumIndexNotPresent(quorum_hash)), + ); + continue; }; let cycle_base_height = quorum_block_height - quorum_index as u32; - // Check if we already have the masternode list entries for this cycle base height - let masternode_list_entries_by_index = - if let Some(entries) = cycles.get(&cycle_base_height) { - entries - } else { - let Some(VerifyingChainLockSignaturesType::Rotating(rotating)) = - quorum.verifying_chain_lock_signature - else { - return Err(QuorumValidationError::RequiredRotatedChainLockSigsNotPresent( - quorum.quorum_entry.quorum_hash, - )); - }; - // Fetch the masternode list entries - let new_entries = self.masternode_list_entry_members_for_rotated_quorum( - llmq_type, - cycle_base_height, - rotating, - )?; - cycles.insert(cycle_base_height, new_entries); - cycles.get(&cycle_base_height).expect("Entry must exist") + // Quorums of one cycle share their quarter signatures, so the + // reconstruction result is cached per cycle base height. + let members_by_index = cycles.entry(cycle_base_height).or_insert_with(|| { + let Some(VerifyingChainLockSignaturesType::Rotating(rotating)) = + quorum.verifying_chain_lock_signature + else { + return Err(QuorumValidationError::RequiredRotatedChainLockSigsNotPresent( + quorum_hash, + )); }; - - let masternode_list_entries = masternode_list_entries_by_index - .get(quorum_index as usize) - .ok_or(QuorumValidationError::CorruptedCodeExecution(format!( - "expected masternode list entry members for {}", - quorum_index - )))? - .clone(); - return_btree_map.insert(quorum.quorum_entry.quorum_hash, masternode_list_entries); + self.masternode_list_entry_members_for_rotated_quorum( + llmq_type, + cycle_base_height, + rotating, + ) + }); + let result = match members_by_index { + Ok(members_by_index) => members_by_index.get(quorum_index as usize).cloned().ok_or( + QuorumValidationError::CorruptedCodeExecution(format!( + "expected masternode list entry members for {}", + quorum_index + )), + ), + Err(e) => Err(e.clone()), + }; + members_by_quorum_hash.insert(quorum_hash, result); } - Ok(return_btree_map) + members_by_quorum_hash } /// Determines the required block heights for ChainLock signatures based on the provided `QRInfo`. diff --git a/dash/src/sml/masternode_list_engine/validation.rs b/dash/src/sml/masternode_list_engine/validation.rs index bc9316064..abd5416b8 100644 --- a/dash/src/sml/masternode_list_engine/validation.rs +++ b/dash/src/sml/masternode_list_engine/validation.rs @@ -56,14 +56,16 @@ impl MasternodeListEngine { } } - let masternodes_by_quorum_hash = self.find_rotated_masternodes_for_quorums(quorums)?; + let masternodes_by_quorum_hash = self.find_rotated_masternodes_for_quorums(quorums); for quorum in quorums { let masternodes = masternodes_by_quorum_hash .get(&quorum.quorum_entry.quorum_hash) .ok_or(QuorumValidationError::CorruptedCodeExecution( "expected quorum hash not present".to_string(), - ))?; + ))? + .as_ref() + .map_err(|e| e.clone())?; quorum.validate(masternodes.iter().enumerate().filter_map( |(i, qualified_masternode_list_entry)| { if *quorum.quorum_entry.signers.get(i)? { @@ -102,22 +104,7 @@ impl MasternodeListEngine { } } - let masternodes_by_quorum_hash = match self.find_rotated_masternodes_for_quorums(quorums) { - Ok(masternodes_by_quorum_hash) => masternodes_by_quorum_hash, - Err(e) => { - let status: LLMQEntryVerificationStatus = e.into(); - for quorum in quorums { - if matches!( - return_statuses.get(&quorum.quorum_entry.quorum_hash), - Some(LLMQEntryVerificationStatus::Invalid(_)) - ) { - continue; - } - return_statuses.insert(quorum.quorum_entry.quorum_hash, status.clone()); - } - return return_statuses; - } - }; + let masternodes_by_quorum_hash = self.find_rotated_masternodes_for_quorums(quorums); for quorum in quorums { if matches!( @@ -126,16 +113,21 @@ impl MasternodeListEngine { ) { continue; } - let masternodes = match masternodes_by_quorum_hash - .get(&quorum.quorum_entry.quorum_hash) - .ok_or(QuorumValidationError::CorruptedCodeExecution( - "expected quorum hash not present".to_string(), - )) { - Ok(masternodes) => masternodes, - Err(e) => { + let masternodes = match masternodes_by_quorum_hash.get(&quorum.quorum_entry.quorum_hash) + { + Some(Ok(masternodes)) => masternodes, + Some(Err(e)) => { + return_statuses.insert(quorum.quorum_entry.quorum_hash, e.clone().into()); + continue; + } + None => { return_statuses.insert( quorum.quorum_entry.quorum_hash, - LLMQEntryVerificationStatus::Invalid(e.clone()), + LLMQEntryVerificationStatus::Invalid( + QuorumValidationError::CorruptedCodeExecution( + "expected quorum hash not present".to_string(), + ), + ), ); continue; } diff --git a/dash/tests/data/test_DML_diffs/block_container_2518986.dat b/dash/tests/data/test_DML_diffs/block_container_2518986.dat new file mode 100644 index 0000000000000000000000000000000000000000..8686412e69cc614b4b0616979e374390a2daf306 GIT binary patch literal 5331 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 DC!4*% literal 0 HcmV?d00001 diff --git a/dash/tests/data/test_DML_diffs/qrinfo_2518986.dat b/dash/tests/data/test_DML_diffs/qrinfo_2518986.dat new file mode 100644 index 0000000000000000000000000000000000000000..878816e8f96f3d1323ff9ee3867890a94a766b56 GIT binary patch literal 636758 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

9Er$FSyi@g1;S2N#b^k_GnHAm$)3=yA0= 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

cWzgB33EpPHiJ%oLz>p0SQM1w&8P!r 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

)F!m;!*r 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 literal 0 HcmV?d00001 From 66a7edd29dc2487d6f9ee72c0579783b384b0c67 Mon Sep 17 00:00:00 2001 From: xdustinface Date: Sun, 9 Aug 2026 23:50:44 +1000 Subject: [PATCH 03/36] fix(dash): fall back to the block-hash quorum modifier for zeroed ChainLock signatures A work block whose coinbase carries no ChainLock reaches the wire as an all-zero signature in `quorumsCLSigs`. Core then derives the quorum modifier from the work block hash, but `new_quorum_modifier_type` always used the signature form post-v20, so member scores diverged from Core and rotated quorum validation failed with an invalid aggregated signature whenever a quarter's work block lacked a coinbase ChainLock. --- .../sml/quorum_entry/quorum_modifier_type.rs | 63 ++++++++++++++++++- 1 file changed, 60 insertions(+), 3 deletions(-) diff --git a/dash/src/sml/quorum_entry/quorum_modifier_type.rs b/dash/src/sml/quorum_entry/quorum_modifier_type.rs index cc1a5ee87..4bae463fa 100644 --- a/dash/src/sml/quorum_entry/quorum_modifier_type.rs +++ b/dash/src/sml/quorum_entry/quorum_modifier_type.rs @@ -92,12 +92,14 @@ impl LLMQModifierType { /// /// * `Ok(LLMQModifierType::CoreV20)` - If Core v20 is active at the given height, using a chain lock signature. /// * `Ok(LLMQModifierType::PreCoreV20)` - If Core v20 is not active, using a block hash. - /// * `Err(QuorumValidationError::RequiredChainLockNotPresent)` - If Core v20 is active but no chain lock signature is found. /// /// # Notes /// /// * Core v20 introduces the use of chain lock signatures instead of block hashes for quorum modifiers. - /// * This function checks if Core v20 is active at the given block height before selecting the appropriate modifier type. + /// * A work block whose coinbase carries no ChainLock yields an all-zero + /// signature on the wire. Core then derives the modifier from the block + /// hash instead, so a zeroed signature selects the block-hash form here + /// as well. pub fn new_quorum_modifier_type( llmq_type: LLMQType, work_block_hash: BlockHash, @@ -105,10 +107,65 @@ impl LLMQModifierType { best_cl_signature: BLSSignature, network: Network, ) -> Result { - if work_block_height >= network.v20_activation_height() { + if work_block_height >= network.v20_activation_height() && !best_cl_signature.is_zeroed() { Ok(LLMQModifierType::CoreV20(llmq_type, work_block_height, best_cl_signature)) } else { Ok(LLMQModifierType::PreCoreV20(llmq_type, work_block_hash)) } } } + +#[cfg(test)] +mod tests { + use hashes::Hash; + + use super::*; + use crate::Network; + use crate::sml::llmq_type::LLMQType; + + #[test] + fn modifier_type_selection_by_height_and_signature() { + let work_block_hash = BlockHash::from_byte_array([7; 32]); + let post_v20_height = Network::Mainnet.v20_activation_height(); + let pre_v20_height = post_v20_height - 1; + + let modifier = LLMQModifierType::new_quorum_modifier_type( + LLMQType::Llmqtype60_75, + work_block_hash, + post_v20_height, + BLSSignature::from([1; 96]), + Network::Mainnet, + ) + .unwrap(); + assert!( + matches!(modifier, LLMQModifierType::CoreV20(_, height, _) if height == post_v20_height), + "post-v20 with a real signature must use the signature form" + ); + + let modifier = LLMQModifierType::new_quorum_modifier_type( + LLMQType::Llmqtype60_75, + work_block_hash, + post_v20_height, + BLSSignature::from([0; 96]), + Network::Mainnet, + ) + .unwrap(); + assert!( + matches!(modifier, LLMQModifierType::PreCoreV20(_, hash) if hash == work_block_hash), + "post-v20 with a zeroed signature must fall back to the block-hash form" + ); + + let modifier = LLMQModifierType::new_quorum_modifier_type( + LLMQType::Llmqtype60_75, + work_block_hash, + pre_v20_height, + BLSSignature::from([1; 96]), + Network::Mainnet, + ) + .unwrap(); + assert!( + matches!(modifier, LLMQModifierType::PreCoreV20(_, hash) if hash == work_block_hash), + "pre-v20 must use the block-hash form" + ); + } +} From 152d8011769c1c3a459485869169d521d5bbdfde Mon Sep 17 00:00:00 2001 From: xdustinface Date: Sun, 9 Aug 2026 23:54:10 +1000 Subject: [PATCH 04/36] fix(dash): wrap the NoSkipping quarter fill around the combined list Core fills all rotated quorum quarters from one shared cursor that wraps back to the front of the sorted combined masternode list, reusing masternodes when fewer than `quorum_count * quarter_size` are available. The `chunks` based fill produced short or missing quarters in that case, which silently diverged from Core's member sets on networks with few masternodes. Also mirror Core's empty-list early return, which additionally guards the `SkipFirst` arm's modulo arithmetic against an empty list. --- .../rotated_quorum_construction.rs | 150 +++++++++++++++++- 1 file changed, 146 insertions(+), 4 deletions(-) diff --git a/dash/src/sml/masternode_list_engine/rotated_quorum_construction.rs b/dash/src/sml/masternode_list_engine/rotated_quorum_construction.rs index 0d7e30b15..90cb24526 100644 --- a/dash/src/sml/masternode_list_engine/rotated_quorum_construction.rs +++ b/dash/src/sml/masternode_list_engine/rotated_quorum_construction.rs @@ -405,13 +405,22 @@ impl MasternodeListEngine { .rev() .chain(sorted_used_mns_list.into_values().rev()), ); + if sorted_combined_mns_list.is_empty() { + return vec![Vec::new(); quorum_count]; + } match skip_type { LLMQQuarterUsageType::Snapshot(snapshot) => { match snapshot.skip_list_mode { - MNSkipListMode::NoSkipping => sorted_combined_mns_list - .chunks(quarter_size) - .map(|chunk| chunk.to_vec()) - .collect(), + // One shared cursor fills every quarter and wraps back to + // the front when the list runs out, so quarters reuse + // masternodes once fewer than + // `quorum_count * quarter_size` are available. + MNSkipListMode::NoSkipping => { + let mut combined = sorted_combined_mns_list.iter().cycle(); + (0..quorum_count) + .map(|_| (&mut combined).take(quarter_size).copied().collect()) + .collect() + } MNSkipListMode::SkipFirst => { let mut first_entry_index = 0; let processed_skip_list = @@ -513,3 +522,136 @@ impl MasternodeListEngine { } } } + +#[cfg(test)] +mod tests { + use std::net::SocketAddr; + + use hashes::Hash; + + use super::*; + use crate::bls_sig_utils::BLSPublicKey; + use crate::hash_types::ConfirmedHash; + use crate::network::message_qrinfo::QuorumSnapshot; + use crate::sml::masternode_list_entry::{ + EntryMasternodeType, MasternodeListEntry, MasternodeNetInfo, + }; + use crate::{ProTxHash, PubkeyHash}; + + fn entry(byte: u8) -> QualifiedMasternodeListEntry { + MasternodeListEntry { + version: 2, + pro_reg_tx_hash: ProTxHash::from_byte_array([byte; 32]), + confirmed_hash: Some(ConfirmedHash::from_byte_array([byte; 32])), + service_address: MasternodeNetInfo::Legacy(SocketAddr::from(([127, 0, 0, 1], 9999))), + operator_public_key: BLSPublicKey::from([byte; 48]), + key_id_voting: PubkeyHash::from_byte_array([byte; 20]), + is_valid: true, + mn_type: EntryMasternodeType::Regular, + } + .into() + } + + /// Entries in the score order `apply_skip_strategy_of_type` sees them: + /// descending scores under the given modifier, matching the combined + /// unused-then-used list for an all-unused input. + fn score_sorted( + entries: &[QualifiedMasternodeListEntry], + modifier: QuorumModifierHash, + ) -> Vec<&QualifiedMasternodeListEntry> { + MasternodeList::scores_for_quorum_for_masternodes(entries.iter(), modifier, false) + .into_values() + .rev() + .collect() + } + + fn snapshot(mode: MNSkipListMode, skip_list: Vec) -> QuorumSnapshot { + QuorumSnapshot { + skip_list_mode: mode, + active_quorum_members: vec![], + skip_list, + } + } + + fn pro_reg_tx_hashes(quarter: &[&QualifiedMasternodeListEntry]) -> Vec { + quarter.iter().map(|entry| entry.masternode_list_entry.pro_reg_tx_hash).collect() + } + + #[test] + fn no_skipping_fills_quarters_with_circular_wrap_around() { + let entries: Vec = (1..=6).map(entry).collect(); + let modifier = QuorumModifierHash::from_byte_array([9; 32]); + let sorted = score_sorted(&entries, modifier); + + let quarters = MasternodeListEngine::apply_skip_strategy_of_type( + LLMQQuarterUsageType::Snapshot(snapshot(MNSkipListMode::NoSkipping, vec![])), + vec![], + entries.iter().collect(), + modifier, + 3, + 4, + ); + + assert_eq!(quarters.len(), 3); + let expected: Vec> = vec![ + pro_reg_tx_hashes(&[sorted[0], sorted[1], sorted[2], sorted[3]]), + pro_reg_tx_hashes(&[sorted[4], sorted[5], sorted[0], sorted[1]]), + pro_reg_tx_hashes(&[sorted[2], sorted[3], sorted[4], sorted[5]]), + ]; + let actual: Vec> = + quarters.iter().map(|quarter| pro_reg_tx_hashes(quarter)).collect(); + assert_eq!(actual, expected, "one shared cursor must wrap around the combined list"); + } + + #[test] + fn empty_masternode_list_yields_empty_quarters_for_every_mode() { + let modifier = QuorumModifierHash::from_byte_array([9; 32]); + for mode in [ + MNSkipListMode::NoSkipping, + MNSkipListMode::SkipFirst, + MNSkipListMode::SkipExcept, + MNSkipListMode::SkipAll, + ] { + let quarters = MasternodeListEngine::apply_skip_strategy_of_type( + LLMQQuarterUsageType::Snapshot(snapshot(mode, vec![])), + vec![], + vec![], + modifier, + 4, + 2, + ); + assert_eq!(quarters.len(), 4); + assert!( + quarters.iter().all(Vec::is_empty), + "empty input must yield empty quarters in mode {:?}", + mode + ); + } + } + + #[test] + fn skip_first_decodes_relative_skip_list_entries() { + let entries: Vec = (1..=8).map(entry).collect(); + let modifier = QuorumModifierHash::from_byte_array([9; 32]); + let sorted = score_sorted(&entries, modifier); + + // The first skip entry is an absolute index, later entries are + // relative to it: [3, 2] skips absolute indexes 3 and 5. + let quarters = MasternodeListEngine::apply_skip_strategy_of_type( + LLMQQuarterUsageType::Snapshot(snapshot(MNSkipListMode::SkipFirst, vec![3, 2])), + vec![], + entries.iter().collect(), + modifier, + 2, + 2, + ); + + let expected: Vec> = vec![ + pro_reg_tx_hashes(&[sorted[0], sorted[1]]), + pro_reg_tx_hashes(&[sorted[2], sorted[4]]), + ]; + let actual: Vec> = + quarters.iter().map(|quarter| pro_reg_tx_hashes(quarter)).collect(); + assert_eq!(actual, expected, "skipped indexes must be excluded from quarter fill"); + } +} From 64dfab43fea20bc4841d3c02a7903d7d470e7d82 Mon Sep 17 00:00:00 2001 From: xdustinface Date: Sun, 9 Aug 2026 23:57:00 +1000 Subject: [PATCH 05/36] fix(dash): keep a corrupt previous cycle from aborting the whole QRInfo feed Previous-cycle validation is best-effort enrichment for IS lock verification, but an `Invalid` entry there propagated as a hard error out of `feed_qr_info`, discarding the entire QRInfo including the fully valid current cycle. An invalid previous-cycle entry now only prevents that cycle from being stored, logged at warn level, while corrupt current-cycle data in `lastCommitmentPerIndex` still rejects the feed. --- dash/src/sml/masternode_list_engine/mod.rs | 60 +++++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) diff --git a/dash/src/sml/masternode_list_engine/mod.rs b/dash/src/sml/masternode_list_engine/mod.rs index f19ad0c42..649fd9f4a 100644 --- a/dash/src/sml/masternode_list_engine/mod.rs +++ b/dash/src/sml/masternode_list_engine/mod.rs @@ -519,6 +519,11 @@ impl MasternodeListEngine { /// under their cycle boundary hash. This enables IS lock verification for /// the previous cycle after a fresh sync where `lastCommitmentPerIndex` /// only provides the current cycle's quorums. + /// + /// This is a best-effort enrichment step: any entry that does not verify, + /// whether skipped for missing context or cryptographically invalid, only + /// prevents the cycle from being stored. The authoritative rejection of + /// bad current-cycle data happens on the `lastCommitmentPerIndex` path. #[cfg(feature = "quorum_validation")] fn validate_and_store_previous_cycle_quorums( &mut self, @@ -543,7 +548,16 @@ impl MasternodeListEngine { .unwrap_or_default(); match entry.verified { LLMQEntryVerificationStatus::Verified => {} - LLMQEntryVerificationStatus::Invalid(ref e) => return Err(e.clone()), + LLMQEntryVerificationStatus::Invalid(_) => { + tracing::warn!( + "Previous-cycle quorum {} at cycle {} failed validation ({}); skipping storage", + entry.quorum_entry.quorum_hash, + cycle_hash, + entry.verified + ); + all_verified = false; + break; + } _ => { // Can't fully validate (e.g. MN list at a required work // block is missing because it's deeper than the QRInfo's @@ -2200,6 +2214,50 @@ mod tests { ); } + /// The previous-cycle path is best-effort enrichment, so a corrupt + /// aggregated signature there must only skip storing that cycle, never + /// abort the whole feed. The current cycle must still land verified. + #[cfg(feature = "quorum_validation")] + #[test] + fn feed_qr_info_degrades_previous_cycle_on_corrupt_aggregate_signature() { + let (mut engine, mut qr_info) = load_qrinfo_2240504_fixture(); + + let corrupt_position = qr_info + .mn_list_diff_h + .new_quorums + .iter() + .position(|q| q.llmq_type.is_rotating_quorum_type()) + .expect("fixture must carry rotated quorums in the h diff"); + let previous_cycle_key = { + let quorum = &qr_info.mn_list_diff_h.new_quorums[corrupt_position]; + let quorum_height = engine + .block_container + .get_height(&quorum.quorum_hash) + .expect("fixture must carry the corrupted quorum's height"); + let cycle_base = quorum_height + - u32::try_from(quorum.quorum_index.expect("rotated quorums carry an index")) + .unwrap(); + *engine.block_container.get_hash(&cycle_base).expect("expected cycle base hash") + }; + qr_info.mn_list_diff_h.new_quorums[corrupt_position].all_commitment_aggregated_signature = + BLSSignature::from([0u8; 96]); + + let feed_result = engine + .feed_qr_info(qr_info, true, true) + .expect("previous-cycle corruption must not abort the feed") + .expect("expected a feed result"); + + assert!( + !engine.rotated_quorums_per_cycle.contains_key(&previous_cycle_key), + "the corrupted previous cycle must not be stored" + ); + assert!(feed_result.all_fully_verified(), "the current cycle must still verify fully"); + assert!( + feed_result.stored_cycle_height.is_some(), + "the current cycle must still be stored" + ); + } + /// Direct coverage for the `store_cycle_if_fully_verified` storage gate. /// The gate must short-circuit with `Ok(None)` (and not write) in two /// cases: any input entry is not `Verified`, or the target cycle is From 4b2e2276e1261b3ed8a335a6f9389002d3d6811b Mon Sep 17 00:00:00 2001 From: xdustinface Date: Mon, 10 Aug 2026 01:16:02 +1000 Subject: [PATCH 06/36] fix(dash): store the verified subset of a partly unverifiable previous cycle The previous rotation cycle's active set can carry a straggler from a cycle older than the QRInfo's diff range, whose quarter masternode lists are never shipped, so that one entry cannot possibly verify. The all-or-nothing storage gate then dropped the entire otherwise-verified cycle and every IS lock referencing it failed with a missing cycle. The previous-cycle path now stores the verified entries and leaves unverifiable or invalid ones out individually. `build_cycle_quorum_map` accepts partial sets, which is safe because IS lock verification selects the quorum by index and fails cleanly with `QuorumIndexNotFound` when a lock selects an absent one, so only locks signed by exactly the missing quorum are affected. --- dash/src/sml/masternode_list_engine/mod.rs | 100 ++++++++++++++------- 1 file changed, 70 insertions(+), 30 deletions(-) diff --git a/dash/src/sml/masternode_list_engine/mod.rs b/dash/src/sml/masternode_list_engine/mod.rs index 649fd9f4a..613f95b9e 100644 --- a/dash/src/sml/masternode_list_engine/mod.rs +++ b/dash/src/sml/masternode_list_engine/mod.rs @@ -240,7 +240,10 @@ impl Default for MasternodeListEngine { } /// Builds a per-cycle quorum map keyed by `quorum_index`. -/// Rejects missing, negative, or duplicate indices and validates the final count. +/// Rejects missing, negative, out-of-range, or duplicate indices. The map may +/// hold fewer entries than the active quorum count: a quorum whose commitment +/// cannot be validated is left out, and IS lock verification fails cleanly +/// with `QuorumIndexNotFound` when a lock selects an absent index. #[cfg(feature = "quorum_validation")] fn build_cycle_quorum_map( quorums: Vec, @@ -270,12 +273,6 @@ fn build_cycle_quorum_map( } map.insert(key, quorum); } - if map.len() != expected { - return Err(QuorumValidationError::CorruptedCodeExecution(format!( - "rotated quorums per cycle count mismatch: expected {expected}, got {}", - map.len() - ))); - } Ok(map) } @@ -520,10 +517,14 @@ impl MasternodeListEngine { /// the previous cycle after a fresh sync where `lastCommitmentPerIndex` /// only provides the current cycle's quorums. /// - /// This is a best-effort enrichment step: any entry that does not verify, - /// whether skipped for missing context or cryptographically invalid, only - /// prevents the cycle from being stored. The authoritative rejection of - /// bad current-cycle data happens on the `lastCommitmentPerIndex` path. + /// This is a best-effort enrichment step: only entries that verify are + /// stored, and any that do not, whether skipped for missing context or + /// cryptographically invalid, are left out individually. A straggler from + /// a cycle older than the QRInfo's diff range can never verify here (its + /// quarter masternode lists are not shipped), and leaving it out means + /// only IS locks selecting exactly that quorum index fail while the rest + /// of the cycle verifies. The authoritative rejection of bad + /// current-cycle data happens on the `lastCommitmentPerIndex` path. #[cfg(feature = "quorum_validation")] fn validate_and_store_previous_cycle_quorums( &mut self, @@ -540,7 +541,6 @@ impl MasternodeListEngine { let validation_statuses = self.validate_rotation_cycle_quorums_validation_statuses( entries.iter().collect::>().as_slice(), ); - let mut all_verified = true; for entry in entries.iter_mut() { entry.verified = validation_statuses .get(&entry.quorum_entry.quorum_hash) @@ -550,31 +550,24 @@ impl MasternodeListEngine { LLMQEntryVerificationStatus::Verified => {} LLMQEntryVerificationStatus::Invalid(_) => { tracing::warn!( - "Previous-cycle quorum {} at cycle {} failed validation ({}); skipping storage", + "Previous-cycle quorum {} at cycle {} failed validation ({}); leaving it out", entry.quorum_entry.quorum_hash, cycle_hash, entry.verified ); - all_verified = false; - break; } _ => { - // Can't fully validate (e.g. MN list at a required work - // block is missing because it's deeper than the QRInfo's - // diff range). Don't store unverified quorums: IS lock - // verification for this cycle will fail, which is correct. tracing::debug!( - "Previous-cycle quorum {} at cycle {} could not be validated ({}); skipping storage", + "Previous-cycle quorum {} at cycle {} could not be validated ({}); leaving it out", entry.quorum_entry.quorum_hash, cycle_hash, entry.verified ); - all_verified = false; - break; } } } - if !all_verified { + entries.retain(|entry| matches!(entry.verified, LLMQEntryVerificationStatus::Verified)); + if entries.is_empty() { return Ok(()); } @@ -1642,10 +1635,23 @@ mod tests { let err = build_cycle_quorum_map(quorums, ty).expect_err("duplicate index should fail"); assert!(matches!(err, QuorumValidationError::CorruptedCodeExecution(_))); - // Wrong count is rejected + // A partial set is allowed: unvalidatable quorums stay out of the + // cycle map and IS locks selecting their index fail individually. let quorums = vec![make_qualified_quorum_entry(ty, Some(0))]; - let err = build_cycle_quorum_map(quorums, ty).expect_err("wrong count should fail"); - assert!(matches!(err, QuorumValidationError::CorruptedCodeExecution(_))); + let map = build_cycle_quorum_map(quorums, ty).expect("partial set should succeed"); + assert_eq!(map.len(), 1); + assert!(map.contains_key(&0)); + + // An index at or above the active quorum count is rejected + let quorums = vec![make_qualified_quorum_entry(ty, Some(2))]; + let err = build_cycle_quorum_map(quorums, ty).expect_err("out-of-range index should fail"); + assert!(matches!( + err, + QuorumValidationError::InvalidQuorumIndex { + index: 2, + .. + } + )); } fn verify_masternode_list_quorums( @@ -1893,6 +1899,27 @@ mod tests { .all(|q| matches!(q.verified, LLMQEntryVerificationStatus::Verified)), "every stored quorum must be verified" ); + + // The previous cycle's active set carries its own straggler at index + // 20 (from one cycle further back), whose quarter masternode lists + // are not shipped in this QRInfo. The verified rest of the set must + // still be stored so IS locks referencing the previous cycle verify. + let previous_cycle_hash = *engine + .block_container + .get_hash(&(current_cycle_base - 288)) + .expect("expected previous cycle hash"); + let previous_cycle = engine + .rotated_quorums_per_cycle + .get(&previous_cycle_hash) + .expect("expected the previous cycle's verified subset stored"); + assert_eq!(previous_cycle.len(), 31); + assert!(!previous_cycle.contains_key(&20), "the unverifiable straggler must be left out"); + assert!( + previous_cycle + .values() + .all(|q| matches!(q.verified, LLMQEntryVerificationStatus::Verified)), + "every stored previous-cycle quorum must be verified" + ); } #[test] @@ -2215,8 +2242,9 @@ mod tests { } /// The previous-cycle path is best-effort enrichment, so a corrupt - /// aggregated signature there must only skip storing that cycle, never - /// abort the whole feed. The current cycle must still land verified. + /// aggregated signature there must only leave that quorum out of the + /// stored cycle, never abort the whole feed. The rest of the cycle and + /// the current cycle must still land verified. #[cfg(feature = "quorum_validation")] #[test] fn feed_qr_info_degrades_previous_cycle_on_corrupt_aggregate_signature() { @@ -2228,6 +2256,8 @@ mod tests { .iter() .position(|q| q.llmq_type.is_rotating_quorum_type()) .expect("fixture must carry rotated quorums in the h diff"); + let corrupted_quorum_hash = + qr_info.mn_list_diff_h.new_quorums[corrupt_position].quorum_hash; let previous_cycle_key = { let quorum = &qr_info.mn_list_diff_h.new_quorums[corrupt_position]; let quorum_height = engine @@ -2247,9 +2277,19 @@ mod tests { .expect("previous-cycle corruption must not abort the feed") .expect("expected a feed result"); + let previous_cycle = engine + .rotated_quorums_per_cycle + .get(&previous_cycle_key) + .expect("the rest of the previous cycle must still be stored"); + assert!( + !previous_cycle.values().any(|q| q.quorum_entry.quorum_hash == corrupted_quorum_hash), + "the corrupted quorum must be left out of the stored cycle" + ); assert!( - !engine.rotated_quorums_per_cycle.contains_key(&previous_cycle_key), - "the corrupted previous cycle must not be stored" + previous_cycle + .values() + .all(|q| matches!(q.verified, LLMQEntryVerificationStatus::Verified)), + "every stored previous-cycle quorum must be verified" ); assert!(feed_result.all_fully_verified(), "the current cycle must still verify fully"); assert!( From 1ba2e4ad2cb98e8a8b22b1a5a8d41ee3fe171e61 Mon Sep 17 00:00:00 2001 From: xdustinface Date: Mon, 10 Aug 2026 19:55:47 +1000 Subject: [PATCH 07/36] fix(dash): reject an out-of-range `quorum_index` instead of underflowing the cycle base `QuorumEntry::quorum_index` is an `Option` straight off the wire that nothing bounds, so the open-coded `quorum_block_height - quorum_index as u32` in `find_rotated_masternodes_for_quorum` and `find_rotated_masternodes_for_quorums` sign-extended a negative index into a huge `u32` and then panicked under overflow checks or wrapped in release. Both paths are reachable from `feed_qr_info` on peer data. The checked arithmetic already living in `rotated_quorum_cycle_base` now sits in a shared `rotated_cycle_base_height` helper that both it and the two construction sites call, so there is one implementation and no unchecked copies. Each site keeps its existing error shape and reports `InvalidQuorumIndex` for an index the cycle base cannot absorb. The quarter work block arithmetic in `required_cl_sig_heights` and `masternode_list_entry_members_for_rotated_quorum` underflowed for any cycle within a few DKG intervals of genesis, which is reachable on regtest and devnet. The former now skips work blocks below genesis, the latter reports `CycleBaseHeightTooLow`. --- dash/src/sml/masternode_list_engine/mod.rs | 16 ++- .../rotated_quorum_construction.rs | 107 ++++++++++++++++-- dash/src/sml/quorum_validation_error.rs | 3 + 3 files changed, 112 insertions(+), 14 deletions(-) diff --git a/dash/src/sml/masternode_list_engine/mod.rs b/dash/src/sml/masternode_list_engine/mod.rs index 613f95b9e..75f832778 100644 --- a/dash/src/sml/masternode_list_engine/mod.rs +++ b/dash/src/sml/masternode_list_engine/mod.rs @@ -276,6 +276,19 @@ fn build_cycle_quorum_map( Ok(map) } +/// Cycle base height, the height of the quorum-index-0 block, for a rotated +/// quorum whose commitment sits at `quorum_block_height`. +/// +/// `quorum_index` arrives from the wire as a signed value nothing bounds, so a +/// negative or oversized index yields `None` instead of sign-extending into a +/// wrapping subtraction. +fn rotated_cycle_base_height( + quorum_block_height: CoreBlockHeight, + quorum_index: i16, +) -> Option { + quorum_block_height.checked_sub(u32::try_from(quorum_index).ok()?) +} + impl MasternodeListEngine { /// Creates a new MasternodeListEngine with the specified network configuration. /// @@ -837,8 +850,7 @@ impl MasternodeListEngine { #[cfg(feature = "quorum_validation")] fn rotated_quorum_cycle_base(&self, quorum: &QuorumEntry) -> Option { let height = self.block_container.get_height(&quorum.quorum_hash)?; - let index = u32::try_from(quorum.quorum_index?).ok()?; - height.checked_sub(index) + rotated_cycle_base_height(height, quorum.quorum_index?) } /// The four quarter ChainLock signatures for the cycle a rotated quorum diff --git a/dash/src/sml/masternode_list_engine/rotated_quorum_construction.rs b/dash/src/sml/masternode_list_engine/rotated_quorum_construction.rs index 90cb24526..3c2bfb546 100644 --- a/dash/src/sml/masternode_list_engine/rotated_quorum_construction.rs +++ b/dash/src/sml/masternode_list_engine/rotated_quorum_construction.rs @@ -6,7 +6,9 @@ use crate::prelude::CoreBlockHeight; use crate::sml::llmq_type::LLMQType; use crate::sml::llmq_type::rotation::{LLMQQuarterReconstructionType, LLMQQuarterUsageType}; use crate::sml::masternode_list::MasternodeList; -use crate::sml::masternode_list_engine::MasternodeListEngine; +use crate::sml::masternode_list_engine::{ + MasternodeListEngine, WORK_DIFF_DEPTH, rotated_cycle_base_height, +}; use crate::sml::masternode_list_entry::qualified_masternode_list_entry::QualifiedMasternodeListEntry; use crate::sml::quorum_entry::qualified_quorum_entry::{ QualifiedQuorumEntry, VerifyingChainLockSignaturesType, @@ -45,7 +47,13 @@ impl MasternodeListEngine { quorum.quorum_entry.quorum_hash, )); }; - let cycle_base_height = quorum_block_height - quorum_index as u32; + let Some(cycle_base_height) = rotated_cycle_base_height(quorum_block_height, quorum_index) + else { + return Err(QuorumValidationError::InvalidQuorumIndex { + quorum_hash: quorum.quorum_entry.quorum_hash, + index: quorum_index, + }); + }; let Some(VerifyingChainLockSignaturesType::Rotating(rotating)) = quorum.verifying_chain_lock_signature @@ -109,7 +117,18 @@ impl MasternodeListEngine { ); continue; }; - let cycle_base_height = quorum_block_height - quorum_index as u32; + let Some(cycle_base_height) = + rotated_cycle_base_height(quorum_block_height, quorum_index) + else { + members_by_quorum_hash.insert( + quorum_hash, + Err(QuorumValidationError::InvalidQuorumIndex { + quorum_hash, + index: quorum_index, + }), + ); + continue; + }; // Quorums of one cycle share their quarter signatures, so the // reconstruction result is cached per cycle base height. let members_by_index = cycles.entry(cycle_base_height).or_insert_with(|| { @@ -169,7 +188,11 @@ impl MasternodeListEngine { let cycle_base_height = quorum_block_height - quorum_index; let cycle_length = llmq_params.dkg_params.interval; for i in 0..=3 { - required_heights.insert(cycle_base_height - i * cycle_length - 8); + if let Some(work_height) = + cycle_base_height.checked_sub(i * cycle_length + WORK_DIFF_DEPTH) + { + required_heights.insert(work_height); + } } } // We are going to validate the previous rotation as well @@ -189,7 +212,11 @@ impl MasternodeListEngine { let cycle_base_height = quorum_block_height - quorum_index; let cycle_length = llmq_params.dkg_params.interval; for i in 0..=3 { - required_heights.insert(cycle_base_height - i * cycle_length - 8); + if let Some(work_height) = + cycle_base_height.checked_sub(i * cycle_length + WORK_DIFF_DEPTH) + { + required_heights.insert(work_height); + } } } } @@ -218,27 +245,30 @@ impl MasternodeListEngine { let llmq_params = quorum_llmq_type.params(); let num_quorums = llmq_params.signing_active_quorum_count as usize; let cycle_length = llmq_params.dkg_params.interval; - let work_block_height_for_index = - |index: u32| (cycle_base_height - index * cycle_length) - 8; + let work_block_height_for_index = |index: u32| { + cycle_base_height + .checked_sub(index * cycle_length + WORK_DIFF_DEPTH) + .ok_or(QuorumValidationError::CycleBaseHeightTooLow(cycle_base_height)) + }; // Reconstruct quorum members at h - 3c from snapshot let q_h_m_3c = self.quorum_quarter_members_by_reconstruction_type( quorum_llmq_type, LLMQQuarterReconstructionType::Snapshot, - work_block_height_for_index(3), + work_block_height_for_index(3)?, chain_lock_sigs[0], )?; // Reconstruct quorum members at h - 2c from snapshot let q_h_m_2c = self.quorum_quarter_members_by_reconstruction_type( quorum_llmq_type, LLMQQuarterReconstructionType::Snapshot, - work_block_height_for_index(2), + work_block_height_for_index(2)?, chain_lock_sigs[1], )?; // Reconstruct quorum members at h - c from snapshot let q_h_m_c = self.quorum_quarter_members_by_reconstruction_type( quorum_llmq_type, LLMQQuarterReconstructionType::Snapshot, - work_block_height_for_index(1), + work_block_height_for_index(1)?, chain_lock_sigs[2], )?; // Determine quorum members at new index @@ -248,7 +278,7 @@ impl MasternodeListEngine { let last_quarter = self.quorum_quarter_members_by_reconstruction_type( quorum_llmq_type, reconstruction_type, - work_block_height_for_index(0), + work_block_height_for_index(0)?, chain_lock_sigs[3], )?; let mut quorum_members = @@ -530,12 +560,14 @@ mod tests { use hashes::Hash; use super::*; + use crate::Network; use crate::bls_sig_utils::BLSPublicKey; - use crate::hash_types::ConfirmedHash; + use crate::hash_types::{ConfirmedHash, QuorumVVecHash}; use crate::network::message_qrinfo::QuorumSnapshot; use crate::sml::masternode_list_entry::{ EntryMasternodeType, MasternodeListEntry, MasternodeNetInfo, }; + use crate::transaction::special_transaction::quorum_commitment::QuorumEntry; use crate::{ProTxHash, PubkeyHash}; fn entry(byte: u8) -> QualifiedMasternodeListEntry { @@ -577,6 +609,57 @@ mod tests { quarter.iter().map(|entry| entry.masternode_list_entry.pro_reg_tx_hash).collect() } + fn rotated_quorum(quorum_hash: QuorumHash, quorum_index: i16) -> QualifiedQuorumEntry { + QuorumEntry { + version: 2, + llmq_type: LLMQType::Llmqtype60_75, + quorum_hash, + quorum_index: Some(quorum_index), + signers: vec![true], + valid_members: vec![true], + quorum_public_key: BLSPublicKey::from([0; 48]), + quorum_vvec_hash: QuorumVVecHash::all_zeros(), + threshold_sig: BLSSignature::from([0; 96]), + all_commitment_aggregated_signature: BLSSignature::from([0; 96]), + } + .into() + } + + #[test] + fn unusable_quorum_index_is_rejected_instead_of_underflowing_the_cycle_base() { + let mut engine = MasternodeListEngine::default_for_network(Network::Mainnet); + let negative_index_hash = QuorumHash::from_byte_array([1; 32]); + let index_above_height_hash = QuorumHash::from_byte_array([2; 32]); + engine.block_container.feed_block_height(1000, negative_index_hash); + engine.block_container.feed_block_height(3, index_above_height_hash); + + let quorums = + [rotated_quorum(negative_index_hash, -1), rotated_quorum(index_above_height_hash, 5)]; + + for quorum in quorums.iter() { + let error = engine + .find_rotated_masternodes_for_quorum(quorum) + .expect_err("an index the cycle base cannot absorb must surface as an error"); + assert!( + matches!(error, QuorumValidationError::InvalidQuorumIndex { .. }), + "expected an invalid index error, got {error}" + ); + } + + let borrowed: Vec<&QualifiedQuorumEntry> = quorums.iter().collect(); + let results = engine.find_rotated_masternodes_for_quorums(&borrowed); + assert_eq!(results.len(), 2); + for quorum in quorums.iter() { + let result = results + .get(&quorum.quorum_entry.quorum_hash) + .expect("every quorum must get its own result"); + assert!( + matches!(result, Err(QuorumValidationError::InvalidQuorumIndex { .. })), + "expected an invalid index error, got {result:?}" + ); + } + } + #[test] fn no_skipping_fills_quarters_with_circular_wrap_around() { let entries: Vec = (1..=6).map(entry).collect(); diff --git a/dash/src/sml/quorum_validation_error.rs b/dash/src/sml/quorum_validation_error.rs index 70a055ae7..b8f895d71 100644 --- a/dash/src/sml/quorum_validation_error.rs +++ b/dash/src/sml/quorum_validation_error.rs @@ -93,6 +93,9 @@ pub enum QuorumValidationError { index: i16, }, + #[error("Cycle base height {0} is below the history a rotated quorum reconstruction needs")] + CycleBaseHeightTooLow(CoreBlockHeight), + #[error("Corrupted code execution: {0}")] CorruptedCodeExecution(String), #[error("Expected only rotated quorums, but got quorum {0} of type {1}")] From e543dad4fb7d6681f8c0f822d85e74d09000168c Mon Sep 17 00:00:00 2001 From: xdustinface Date: Mon, 10 Aug 2026 20:09:19 +1000 Subject: [PATCH 08/36] fix(dash): degrade a quorum resting on an inferred ChainLock signature `rotation_cl_sigs_by_work_height` keys a signature group whose quorum heights are all unknown by elimination, presuming it belongs to the diff's newest cycle. A wrong presumption yields a wrong quorum modifier, a wrong reconstructed member set and a failing aggregate check, which `feed_qr_info` then turned into an `Err` that aborted the entire feed. A caller that under-supplied block heights could therefore wedge masternode sync permanently. The keying now reports which work heights it inferred, and a current-cycle entry whose quarter signatures rest on one settles as `Skipped` instead. Corrupt data on an exactly keyed signature still rejects hard, and a `Skipped` entry still cannot enter `rotated_quorums_per_cycle` because the storage gate requires every entry to be `Verified`. The elimination pass also declined a group whose signature value already keyed another work height, treating the repeat as evidence of an older cycle. Core deliberately merges work blocks that share a signature, which is routine while those blocks carry no ChainLock and the signature is all zeroes, so the rule now applies only to non-zero signatures that genuinely identify one block. `rotation_cl_sigs_by_work_height` had no targeted coverage. It gains a unit test over synthetic diffs for exact keying, elimination, ambiguity, the zeroed merged group and the non-zero repeat, plus a fixture-driven test that an inferred key failing validation settles `Skipped` rather than aborting the feed. --- dash/src/sml/masternode_list_engine/mod.rs | 310 +++++++++++++++++++-- 1 file changed, 288 insertions(+), 22 deletions(-) diff --git a/dash/src/sml/masternode_list_engine/mod.rs b/dash/src/sml/masternode_list_engine/mod.rs index 75f832778..136a08163 100644 --- a/dash/src/sml/masternode_list_engine/mod.rs +++ b/dash/src/sml/masternode_list_engine/mod.rs @@ -15,6 +15,8 @@ use crate::network::message_qrinfo::{QRInfo, QuorumSnapshot}; use crate::network::message_sml::MnListDiff; use crate::prelude::CoreBlockHeight; use crate::sml::error::SmlError; +#[cfg(feature = "quorum_validation")] +use crate::sml::llmq_entry_verification::LLMQEntryVerificationSkipStatus; use crate::sml::llmq_entry_verification::LLMQEntryVerificationStatus; use crate::sml::llmq_type::LLMQType; #[cfg(feature = "quorum_validation")] @@ -744,15 +746,22 @@ impl MasternodeListEngine { /// per-diff signature cannot represent them all. /// /// A signature group whose quorum hash heights are all unknown is keyed - /// by elimination: walking diffs oldest first, a group whose signature - /// value already keys an earlier work block belongs to that older cycle, - /// and when a single group remains it is the diff's newest cycle, keyed - /// at the newest work block the diff can carry. Exact keys always win. + /// by elimination: walking diffs oldest first, a group carrying a + /// non-zero signature that already keys an earlier work block belongs to + /// that older cycle, and when a single group remains it is the diff's + /// newest cycle, keyed at the newest work block the diff can carry. Exact + /// keys always win. + /// + /// Returns the map alongside the work heights the elimination pass keyed, + /// so callers can tell an inferred key from an exact one. An inferred key + /// can be wrong, which yields a wrong quorum modifier and a failing + /// aggregate signature check, so a quorum resting on one must degrade + /// rather than count as proof of corrupt data. #[cfg(feature = "quorum_validation")] fn rotation_cl_sigs_by_work_height<'a>( &self, diffs: impl IntoIterator, - ) -> BTreeMap { + ) -> (BTreeMap, BTreeSet) { let mut diffs: Vec<&MnListDiff> = diffs.into_iter().collect(); diffs.sort_by_key(|diff| self.block_container.get_height(&diff.block_hash)); @@ -776,6 +785,7 @@ impl MasternodeListEngine { } } + let mut inferred_work_heights = BTreeSet::new(); for diff in &diffs { let Some(newest_work_height) = self.diff_newest_work_height(diff) else { continue; @@ -819,16 +829,25 @@ impl MasternodeListEngine { if group_resolved || !group_has_unresolved_rotated || hypothesis_mismatch { continue; } - if sigs_by_work_height.values().any(|sig| *sig == sig_obj.signature) { + // A ChainLock signature signs one specific block, so a + // non-zero value already keying a work block identifies that + // same older work block here. A zeroed value carries no such + // identity: Core merges every work block without a ChainLock + // under it, so repetition says nothing about which cycle the + // group belongs to. + if !sig_obj.signature.is_zeroed() + && sigs_by_work_height.values().any(|sig| *sig == sig_obj.signature) + { continue; } candidate_sigs.push(&sig_obj.signature); } if let [only_group_sig] = candidate_sigs.as_slice() { sigs_by_work_height.insert(newest_work_height, **only_group_sig); + inferred_work_heights.insert(newest_work_height); } } - sigs_by_work_height + (sigs_by_work_height, inferred_work_heights) } /// The newest work block whose cycle a diff can carry, defined only for @@ -853,23 +872,42 @@ impl MasternodeListEngine { rotated_cycle_base_height(height, quorum.quorum_index?) } - /// The four quarter ChainLock signatures for the cycle a rotated quorum + /// The four quarter work block heights for the cycle a rotated quorum /// belongs to, ordered oldest quarter first: `[B-3c-8, B-2c-8, B-c-8, /// B-8]` for cycle base `B` and DKG interval `c`. #[cfg(feature = "quorum_validation")] + fn quarter_work_heights(&self, quorum: &QuorumEntry) -> Option<[CoreBlockHeight; 4]> { + let cycle_base = self.rotated_quorum_cycle_base(quorum)?; + let interval = quorum.llmq_type.params().dkg_params.interval; + let height_at = + |cycles_back: u32| cycle_base.checked_sub(cycles_back * interval + WORK_DIFF_DEPTH); + Some([height_at(3)?, height_at(2)?, height_at(1)?, height_at(0)?]) + } + + /// The four quarter ChainLock signatures for the cycle a rotated quorum + /// belongs to, ordered oldest quarter first. + #[cfg(feature = "quorum_validation")] fn quarter_sigs_for_quorum( &self, sigs_by_work_height: &BTreeMap, quorum: &QuorumEntry, ) -> Option<[BLSSignature; 4]> { - let cycle_base = self.rotated_quorum_cycle_base(quorum)?; - let interval = quorum.llmq_type.params().dkg_params.interval; - let sig_at = |cycles_back: u32| { - cycle_base - .checked_sub(cycles_back * interval + WORK_DIFF_DEPTH) - .and_then(|work_height| sigs_by_work_height.get(&work_height).copied()) - }; - Some([sig_at(3)?, sig_at(2)?, sig_at(1)?, sig_at(0)?]) + let [h3, h2, h1, h0] = self.quarter_work_heights(quorum)?; + let sig_at = |work_height: CoreBlockHeight| sigs_by_work_height.get(&work_height).copied(); + Some([sig_at(h3)?, sig_at(h2)?, sig_at(h1)?, sig_at(h0)?]) + } + + /// `true` when any of a quorum's quarter signatures was keyed by the + /// elimination pass rather than derived from a known quorum height. + #[cfg(feature = "quorum_validation")] + fn quarter_sigs_are_inferred( + &self, + inferred_work_heights: &BTreeSet, + quorum: &QuorumEntry, + ) -> bool { + self.quarter_work_heights(quorum).is_some_and(|work_heights| { + work_heights.iter().any(|work_height| inferred_work_heights.contains(work_height)) + }) } /// Cycle hash for an active rotated quorum set: the block hash at the @@ -913,7 +951,7 @@ impl MasternodeListEngine { self.dump_qr_info_capture(&qr_info); #[cfg(feature = "quorum_validation")] - let rotation_sigs_by_work_height = { + let (rotation_sigs_by_work_height, inferred_work_heights) = { let mut diffs: Vec<&MnListDiff> = vec![ &qr_info.mn_list_diff_tip, &qr_info.mn_list_diff_h, @@ -1084,7 +1122,29 @@ impl MasternodeListEngine { .unwrap_or_default(); if let LLMQEntryVerificationStatus::Invalid(ref e) = rotated_quorum.verified { - return Err(e.clone()); + // A quarter signature keyed by elimination may belong to + // another cycle, which reconstructs the wrong member set + // and fails the aggregate check. That is a gap in the + // supplied context, not proof of corrupt data, so the + // entry degrades on its own instead of aborting the feed. + if self.quarter_sigs_are_inferred( + &inferred_work_heights, + &rotated_quorum.quorum_entry, + ) { + tracing::warn!( + "Rotated quorum {} failed validation ({}) under inferred quarter signatures; skipping it", + rotated_quorum.quorum_entry.quorum_hash, + e + ); + rotated_quorum.verified = LLMQEntryVerificationStatus::Skipped( + LLMQEntryVerificationSkipStatus::OtherContext( + "quarter chain lock signatures were inferred by elimination" + .to_string(), + ), + ); + } else { + return Err(e.clone()); + } } } @@ -1552,6 +1612,8 @@ mod tests { use crate::hashes::Hash; use crate::network::message_qrinfo::QRInfo; use crate::network::message_sml::MnListDiff; + #[cfg(feature = "quorum_validation")] + use crate::network::message_sml::QuorumCLSigObject; use crate::prelude::CoreBlockHeight; use crate::sml::llmq_entry_verification::{ LLMQEntryVerificationSkipStatus, LLMQEntryVerificationStatus, @@ -1562,6 +1624,8 @@ mod tests { }; use crate::sml::llmq_type::network::NetworkLLMQExt; use crate::sml::masternode_list::MasternodeList; + #[cfg(feature = "quorum_validation")] + use crate::sml::masternode_list_engine::WORK_DIFF_DEPTH; use crate::sml::masternode_list_engine::{ MasternodeListEngine, MasternodeListEngineBlockContainer, }; @@ -1585,14 +1649,15 @@ mod tests { }; #[cfg(feature = "quorum_validation")] - fn make_qualified_quorum_entry( + fn make_quorum_entry( llmq_type: LLMQType, + quorum_hash: QuorumHash, quorum_index: Option, - ) -> QualifiedQuorumEntry { + ) -> QuorumEntry { QuorumEntry { version: 2, llmq_type, - quorum_hash: QuorumHash::all_zeros(), + quorum_hash, quorum_index, signers: vec![true], valid_members: vec![true], @@ -1601,7 +1666,154 @@ mod tests { threshold_sig: BLSSignature::from([0; 96]), all_commitment_aggregated_signature: BLSSignature::from([0; 96]), } - .into() + } + + #[cfg(feature = "quorum_validation")] + fn make_qualified_quorum_entry( + llmq_type: LLMQType, + quorum_index: Option, + ) -> QualifiedQuorumEntry { + make_quorum_entry(llmq_type, QuorumHash::all_zeros(), quorum_index).into() + } + + /// A diff carrying only what the rotation signature keying reads: its end + /// block, its rotating commitments, and its `quorumsCLSigs` groups. + #[cfg(feature = "quorum_validation")] + fn make_cl_sig_diff( + end_hash: BlockHash, + new_quorums: Vec, + groups: Vec<(BLSSignature, Vec)>, + ) -> MnListDiff { + let diff_bytes: &[u8] = + include_bytes!("../../../tests/data/test_DML_diffs/mn_list_diff_0_2227096.bin"); + let mut diff: MnListDiff = deserialize(diff_bytes).expect("expected to deserialize"); + diff.block_hash = end_hash; + diff.new_quorums = new_quorums; + diff.quorums_chainlock_signatures = groups + .into_iter() + .map(|(signature, index_set)| QuorumCLSigObject { + signature, + index_set, + }) + .collect(); + diff + } + + #[cfg(feature = "quorum_validation")] + fn engine_knowing_blocks(blocks: &[(CoreBlockHeight, BlockHash)]) -> MasternodeListEngine { + let mut engine = MasternodeListEngine::default_for_network(Network::Mainnet); + for (height, block_hash) in blocks { + engine.block_container.feed_block_height(*height, *block_hash); + } + engine + } + + /// Core keys every rotated quorum's ChainLock signature to that quorum's + /// own work block and merges work blocks that share a signature, so the + /// keying has to survive unknown quorum heights, ambiguity, and a + /// signature that legitimately covers more than one cycle. + #[cfg(feature = "quorum_validation")] + #[test] + fn rotation_cl_sigs_by_work_height_keys_each_cycle_to_its_own_work_block() { + let isd_type = Network::Mainnet.isd_llmq_type(); + let interval = isd_type.params().dkg_params.interval; + assert_eq!(interval, 288, "the heights below assume the mainnet DKG interval"); + + let cycle_base = interval * 100; + let diff_end = cycle_base + interval - WORK_DIFF_DEPTH; + let older_diff_end = diff_end - interval; + let work_height = cycle_base - WORK_DIFF_DEPTH; + let older_work_height = work_height - interval; + + let end_hash = BlockHash::from_byte_array([1; 32]); + let older_end_hash = BlockHash::from_byte_array([2; 32]); + let quorum_hash = QuorumHash::from_byte_array([3; 32]); + let other_quorum_hash = QuorumHash::from_byte_array([4; 32]); + let older_quorum_hash = QuorumHash::from_byte_array([5; 32]); + let sig = BLSSignature::from([7; 96]); + let other_sig = BLSSignature::from([8; 96]); + let zero_sig = BLSSignature::from([0; 96]); + + let diff = make_cl_sig_diff( + end_hash, + vec![make_quorum_entry(isd_type, quorum_hash, Some(3))], + vec![(sig, vec![0])], + ); + + // A known quorum height keys the signature exactly, no inference. + let engine = engine_knowing_blocks(&[(diff_end, end_hash), (cycle_base + 3, quorum_hash)]); + let (sigs, inferred) = engine.rotation_cl_sigs_by_work_height([&diff]); + assert_eq!(sigs, BTreeMap::from([(work_height, sig)])); + assert!(inferred.is_empty(), "a known quorum height must key exactly"); + + // Without that height the only remaining group is keyed by + // elimination, and the caller is told the key was inferred. + let engine = engine_knowing_blocks(&[(diff_end, end_hash)]); + let (sigs, inferred) = engine.rotation_cl_sigs_by_work_height([&diff]); + assert_eq!(sigs, BTreeMap::from([(work_height, sig)])); + assert_eq!(inferred, BTreeSet::from([work_height])); + + // Two unresolved groups leave the cycle ambiguous, so nothing is keyed. + let ambiguous = make_cl_sig_diff( + end_hash, + vec![ + make_quorum_entry(isd_type, quorum_hash, Some(3)), + make_quorum_entry(isd_type, other_quorum_hash, Some(5)), + ], + vec![(sig, vec![0]), (other_sig, vec![1])], + ); + let (sigs, inferred) = engine.rotation_cl_sigs_by_work_height([&ambiguous]); + assert!( + sigs.is_empty() && inferred.is_empty(), + "two unresolved groups must resolve to nothing" + ); + + let engine = + engine_knowing_blocks(&[(diff_end, end_hash), (older_diff_end, older_end_hash)]); + + // Work blocks without a ChainLock all carry the zeroed signature, so + // its reappearance in a later diff says nothing about which cycle the + // group belongs to and both work blocks must still be keyed. + let older_zeroed = make_cl_sig_diff( + older_end_hash, + vec![make_quorum_entry(isd_type, older_quorum_hash, Some(3))], + vec![(zero_sig, vec![0])], + ); + let newer_zeroed = make_cl_sig_diff( + end_hash, + vec![make_quorum_entry(isd_type, quorum_hash, Some(3))], + vec![(zero_sig, vec![0])], + ); + let (sigs, inferred) = + engine.rotation_cl_sigs_by_work_height([&older_zeroed, &newer_zeroed]); + assert_eq!( + sigs, + BTreeMap::from([(older_work_height, zero_sig), (work_height, zero_sig)]), + "a zeroed signature repeated across cycles must key both work blocks" + ); + assert_eq!(inferred, BTreeSet::from([older_work_height, work_height])); + + // A real ChainLock signature signs one block, so its reappearance does + // identify the older cycle and the remaining group wins the newer one. + let older = make_cl_sig_diff( + older_end_hash, + vec![make_quorum_entry(isd_type, older_quorum_hash, Some(3))], + vec![(sig, vec![0])], + ); + let newer = make_cl_sig_diff( + end_hash, + vec![ + make_quorum_entry(isd_type, quorum_hash, Some(3)), + make_quorum_entry(isd_type, other_quorum_hash, Some(5)), + ], + vec![(sig, vec![0]), (other_sig, vec![1])], + ); + let (sigs, _) = engine.rotation_cl_sigs_by_work_height([&older, &newer]); + assert_eq!( + sigs, + BTreeMap::from([(older_work_height, sig), (work_height, other_sig)]), + "a repeated non-zero signature belongs to the cycle it already keys" + ); } #[cfg(feature = "quorum_validation")] @@ -2253,6 +2465,60 @@ mod tests { ); } + /// A quarter signature keyed by elimination can belong to another cycle, + /// so a current-cycle quorum resting on one must settle as `Skipped` when + /// it fails to verify. Aborting the feed there would turn a gap in the + /// caller's context into a permanent sync stall. + #[cfg(feature = "quorum_validation")] + #[test] + fn feed_qr_info_skips_a_current_cycle_quorum_resting_on_an_inferred_signature() { + let (mut engine, mut qr_info) = load_qrinfo_2240504_fixture(); + + // The quorums of the cycle based at 2239488 are what exactly key the + // current cycle's oldest quarter. Dropping their heights leaves that + // quarter reachable only by elimination. + let MasternodeListEngineBlockContainer::BTreeMapContainer(container) = + &mut engine.block_container; + for height in 2239488..2239488 + 32 { + if let Some(block_hash) = container.block_hashes.get(&height).copied() { + container.block_heights.remove(&block_hash); + } + } + + let target = qr_info + .last_commitment_per_index + .first() + .expect("fixture must carry at least one rotation commitment") + .quorum_hash; + let llmq_type = qr_info.last_commitment_per_index[0].llmq_type; + qr_info.last_commitment_per_index[0].all_commitment_aggregated_signature = + BLSSignature::from([0u8; 96]); + + let feed_result = engine + .feed_qr_info(qr_info, false, true) + .expect("an inferred quarter signature must not abort the feed") + .expect("expected a feed result"); + + let (_, _, status) = engine + .quorum_statuses + .get(&llmq_type) + .and_then(|statuses| statuses.get(&target)) + .expect("the corrupted quorum must have a recorded status"); + assert!( + matches!( + status, + LLMQEntryVerificationStatus::Skipped( + LLMQEntryVerificationSkipStatus::OtherContext(_) + ) + ), + "a failure under an inferred quarter signature must settle as Skipped, got {status}" + ); + assert!( + feed_result.stored_cycle_height.is_none(), + "a cycle holding a skipped entry must not be stored" + ); + } + /// The previous-cycle path is best-effort enrichment, so a corrupt /// aggregated signature there must only leave that quorum out of the /// stored cycle, never abort the whole feed. The rest of the cycle and From 3c50405021f664bcb097b6b23dc2b4a1ffdfa9ba Mon Sep 17 00:00:00 2001 From: xdustinface Date: Mon, 10 Aug 2026 20:15:19 +1000 Subject: [PATCH 09/36] docs(dash): drop the stale sig-alignment claim from the h work block comment `validate_and_store_previous_cycle_quorums` looks each quorum's quarter signatures up by work height rather than aligning them positionally, so the `h` height is no longer load-bearing for signature alignment. The reason it must stay `h`, that the h-c cycle's quorums live on `masternode_lists[h]`, is unchanged. --- dash/src/sml/masternode_list_engine/mod.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/dash/src/sml/masternode_list_engine/mod.rs b/dash/src/sml/masternode_list_engine/mod.rs index 136a08163..720f0c680 100644 --- a/dash/src/sml/masternode_list_engine/mod.rs +++ b/dash/src/sml/masternode_list_engine/mod.rs @@ -1041,8 +1041,7 @@ impl MasternodeListEngine { let maybe_sig_h_minus_c = self.apply_diff(mn_list_diff_at_h_minus_c, None, false, None)?; // The h-c cycle's rotated quorums live on `masternode_lists[h]` (mined // in the `(h-c, h]` diff range), not on `masternode_lists[h-c]` where - // the cycle two back resides; using h here is load-bearing for the - // sig alignment in `validate_and_store_previous_cycle_quorums`. + // the cycle two back resides. #[cfg(feature = "quorum_validation")] let work_block_hash_h = mn_list_diff_h.block_hash; let maybe_sig_h = self.apply_diff(mn_list_diff_h, None, false, None)?; From c57df942ad4757a3b16741febe5359703647c55b Mon Sep 17 00:00:00 2001 From: xdustinface Date: Mon, 10 Aug 2026 20:18:11 +1000 Subject: [PATCH 10/36] refactor(dash): gate the QRInfo capture hook behind a non-default feature `bincode` is a default feature, so the capture hook shipped compiled in for every downstream release build and a stray `DASH_SML_DUMP_QRINFO_DIR` in the environment would have it write roughly 640KB per QRInfo to an arbitrary path. The new `qrinfo-capture` feature is off by default and pulls `bincode` in when enabled. An unresolvable tip height used to fall back to `0`, which collapsed every such capture onto one pair of file names where each write overwrote the last. Skip the capture instead, and document the environment variable and the file layout on the method. --- dash/Cargo.toml | 1 + dash/src/sml/masternode_list_engine/mod.rs | 27 ++++++++++++++-------- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/dash/Cargo.toml b/dash/Cargo.toml index 22d697b9b..b830df1ee 100644 --- a/dash/Cargo.toml +++ b/dash/Cargo.toml @@ -33,6 +33,7 @@ eddsa = ["ed25519-dalek"] quorum_validation = ["bls"] message_verification = ["bls"] bincode = [ "dep:bincode", "dep:bincode_derive", "dashcore_hashes/bincode", "dash-network/bincode" ] +qrinfo-capture = ["bincode"] test-utils = [] [package.metadata.docs.rs] diff --git a/dash/src/sml/masternode_list_engine/mod.rs b/dash/src/sml/masternode_list_engine/mod.rs index 720f0c680..857ad28b7 100644 --- a/dash/src/sml/masternode_list_engine/mod.rs +++ b/dash/src/sml/masternode_list_engine/mod.rs @@ -34,7 +34,7 @@ use bincode::{Decode, Encode}; use hashes::Hash; #[cfg(feature = "serde")] use serde::{Deserialize, Serialize}; -#[cfg(feature = "bincode")] +#[cfg(feature = "qrinfo-capture")] use std::{env, fs}; /// Depth offset between cycle boundary and work block (matches Dash Core WORK_DIFF_DEPTH) @@ -711,20 +711,29 @@ impl MasternodeListEngine { } /// Best-effort capture of the pre-feed block container and the raw QRInfo - /// for offline reproduction of validation failures. Active only while - /// `DASH_SML_DUMP_QRINFO_DIR` is set, inert otherwise. - #[cfg(feature = "bincode")] + /// for offline reproduction of validation failures. Compiled in only under + /// the `qrinfo-capture` feature, and active only while the environment + /// variable `DASH_SML_DUMP_QRINFO_DIR` names a directory to write into. + /// + /// Each capture writes two bincode encoded files into that directory, + /// `block_container_.dat` and `qrinfo_.dat`, both + /// decodable with `bincode::config::standard()`. A QRInfo whose tip height + /// the block container cannot resolve is not captured at all, since every + /// such capture would land on the same pair of names and overwrite the + /// previous one. + #[cfg(feature = "qrinfo-capture")] fn dump_qr_info_capture(&self, qr_info: &QRInfo) { let Ok(dir) = env::var("DASH_SML_DUMP_QRINFO_DIR") else { return; }; + let Some(tip_height) = + self.block_container.get_height(&qr_info.mn_list_diff_tip.block_hash) + else { + return; + }; if fs::create_dir_all(&dir).is_err() { return; } - let tip_height = self - .block_container - .get_height(&qr_info.mn_list_diff_tip.block_hash) - .unwrap_or_default(); if let Ok(bytes) = bincode::encode_to_vec(&self.block_container, bincode::config::standard()) { @@ -947,7 +956,7 @@ impl MasternodeListEngine { verify_tip_non_rotated_quorums: bool, verify_rotated_quorums: bool, ) -> Result, QuorumValidationError> { - #[cfg(feature = "bincode")] + #[cfg(feature = "qrinfo-capture")] self.dump_qr_info_capture(&qr_info); #[cfg(feature = "quorum_validation")] From 2876db198012acb566e1e1a2e3944f77c02275d9 Mon Sep 17 00:00:00 2001 From: xdustinface Date: Mon, 10 Aug 2026 20:19:23 +1000 Subject: [PATCH 11/36] refactor(dash): share one diff list between `feed_qr_info` and its hash preview `qr_info_referenced_block_hashes` tells callers which block heights to feed before `feed_qr_info` needs them, so the two must walk exactly the same set of diffs. Both built that list inline, leaving the invariant to be maintained by hand in two places. --- dash/src/sml/masternode_list_engine/mod.rs | 51 ++++++++++------------ 1 file changed, 24 insertions(+), 27 deletions(-) diff --git a/dash/src/sml/masternode_list_engine/mod.rs b/dash/src/sml/masternode_list_engine/mod.rs index 857ad28b7..42c7296d7 100644 --- a/dash/src/sml/masternode_list_engine/mod.rs +++ b/dash/src/sml/masternode_list_engine/mod.rs @@ -278,6 +278,27 @@ fn build_cycle_quorum_map( Ok(map) } +/// Every masternode list diff a QRInfo carries: the five named diffs, the +/// optional h-4c diff, and the trailing diff list. +/// +/// [`MasternodeListEngine::qr_info_referenced_block_hashes`] exists to tell a +/// caller which heights to feed before [`MasternodeListEngine::feed_qr_info`] +/// needs them, so both must walk the same set of diffs. +fn qr_info_diffs(qr_info: &QRInfo) -> Vec<&MnListDiff> { + let mut diffs: Vec<&MnListDiff> = vec![ + &qr_info.mn_list_diff_tip, + &qr_info.mn_list_diff_h, + &qr_info.mn_list_diff_at_h_minus_c, + &qr_info.mn_list_diff_at_h_minus_2c, + &qr_info.mn_list_diff_at_h_minus_3c, + ]; + if let Some((_, diff)) = &qr_info.quorum_snapshot_and_mn_list_diff_at_h_minus_4c { + diffs.push(diff); + } + diffs.extend(&qr_info.mn_list_diff_list); + diffs +} + /// Cycle base height, the height of the quorum-index-0 block, for a rotated /// quorum whose commitment sits at `quorum_block_height`. /// @@ -637,19 +658,7 @@ impl MasternodeListEngine { pub fn qr_info_referenced_block_hashes(qr_info: &QRInfo) -> BTreeSet { let mut hashes = BTreeSet::new(); - let mut diffs: Vec<&MnListDiff> = vec![ - &qr_info.mn_list_diff_tip, - &qr_info.mn_list_diff_h, - &qr_info.mn_list_diff_at_h_minus_c, - &qr_info.mn_list_diff_at_h_minus_2c, - &qr_info.mn_list_diff_at_h_minus_3c, - ]; - if let Some((_, diff)) = &qr_info.quorum_snapshot_and_mn_list_diff_at_h_minus_4c { - diffs.push(diff); - } - diffs.extend(&qr_info.mn_list_diff_list); - - for diff in diffs { + for diff in qr_info_diffs(qr_info) { hashes.insert(diff.base_block_hash); hashes.insert(diff.block_hash); for quorum_entry in &diff.new_quorums { @@ -960,20 +969,8 @@ impl MasternodeListEngine { self.dump_qr_info_capture(&qr_info); #[cfg(feature = "quorum_validation")] - let (rotation_sigs_by_work_height, inferred_work_heights) = { - let mut diffs: Vec<&MnListDiff> = vec![ - &qr_info.mn_list_diff_tip, - &qr_info.mn_list_diff_h, - &qr_info.mn_list_diff_at_h_minus_c, - &qr_info.mn_list_diff_at_h_minus_2c, - &qr_info.mn_list_diff_at_h_minus_3c, - ]; - if let Some((_, diff)) = &qr_info.quorum_snapshot_and_mn_list_diff_at_h_minus_4c { - diffs.push(diff); - } - diffs.extend(&qr_info.mn_list_diff_list); - self.rotation_cl_sigs_by_work_height(diffs) - }; + let (rotation_sigs_by_work_height, inferred_work_heights) = + self.rotation_cl_sigs_by_work_height(qr_info_diffs(&qr_info)); #[allow(unused_variables)] let QRInfo { From d59823e8645330fc5a4df683c6d089b8fee95de9 Mon Sep 17 00:00:00 2001 From: xdustinface Date: Mon, 10 Aug 2026 20:21:34 +1000 Subject: [PATCH 12/36] refactor(dash): take the rotation quorum type from the network, not the wire `rotation_quorum_type` drives the masternode list lookups at `h` and the index range `build_cycle_quorum_map` enforces, so deriving it from the first entry of the peer-supplied `last_commitment_per_index` let a peer pick which type the engine reasons about. The surrounding rotation paths already resolve it through `Network::isd_llmq_type`, and the empty-list case already fell back to it. --- dash/src/sml/masternode_list_engine/mod.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/dash/src/sml/masternode_list_engine/mod.rs b/dash/src/sml/masternode_list_engine/mod.rs index 42c7296d7..b2a847790 100644 --- a/dash/src/sml/masternode_list_engine/mod.rs +++ b/dash/src/sml/masternode_list_engine/mod.rs @@ -1014,10 +1014,7 @@ impl MasternodeListEngine { )?; #[cfg(feature = "quorum_validation")] - let rotation_quorum_type = last_commitment_per_index - .first() - .map(|quorum_entry| quorum_entry.llmq_type) - .unwrap_or(self.network.isd_llmq_type()); + let rotation_quorum_type = self.network.isd_llmq_type(); #[cfg(feature = "quorum_validation")] let mut stored_cycle_height: Option = None; From 13d635d7dc383b2fb342eb3a5d1f4dca8ebfc6de Mon Sep 17 00:00:00 2001 From: xdustinface Date: Mon, 10 Aug 2026 20:22:53 +1000 Subject: [PATCH 13/36] fix(dash): keep an unkeyable previous cycle from aborting the QRInfo feed `validate_and_store_previous_cycle_quorums` is documented as best-effort enrichment, yet the index keying it does at the end still propagated `RequiredQuorumIndexNotPresent`, `InvalidQuorumIndex` and the duplicate-index `CorruptedCodeExecution` out of `feed_qr_info`. A duplicate `quorum_index` across two otherwise verified entries would fail the whole feed from the one path that promises not to. The cycle is now logged and left unstored instead, which drops the function's last failure mode and with it its `Result`. The authoritative `lastCommitmentPerIndex` path still rejects hard. --- dash/src/sml/masternode_list_engine/mod.rs | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/dash/src/sml/masternode_list_engine/mod.rs b/dash/src/sml/masternode_list_engine/mod.rs index b2a847790..04d73ec67 100644 --- a/dash/src/sml/masternode_list_engine/mod.rs +++ b/dash/src/sml/masternode_list_engine/mod.rs @@ -566,12 +566,12 @@ impl MasternodeListEngine { &mut self, work_block_hash: BlockHash, sigs_by_work_height: &BTreeMap, - ) -> Result<(), QuorumValidationError> { + ) { let isd_type = self.network.isd_llmq_type(); let Some((cycle_hash, mut entries)) = self.try_load_previous_cycle_entries(work_block_hash, isd_type, sigs_by_work_height) else { - return Ok(()); + return; }; let validation_statuses = self.validate_rotation_cycle_quorums_validation_statuses( @@ -604,7 +604,7 @@ impl MasternodeListEngine { } entries.retain(|entry| matches!(entry.verified, LLMQEntryVerificationStatus::Verified)); if entries.is_empty() { - return Ok(()); + return; } // Mirror statuses into `quorum_statuses` and the MN list. @@ -640,13 +640,22 @@ impl MasternodeListEngine { } } - let cycle_map = build_cycle_quorum_map(entries, isd_type)?; + let cycle_map = match build_cycle_quorum_map(entries, isd_type) { + Ok(cycle_map) => cycle_map, + Err(e) => { + tracing::warn!( + "Previous-cycle rotated quorums at cycle {} could not be keyed by quorum index ({}), leaving the cycle unstored", + cycle_hash, + e + ); + return; + } + }; self.rotated_quorums_per_cycle.insert(cycle_hash, cycle_map); tracing::debug!( "Validated and stored previous-cycle rotated quorums under cycle hash {}", cycle_hash ); - Ok(()) } /// Block hashes referenced by a QRInfo message that the engine needs heights for. @@ -1065,7 +1074,7 @@ impl MasternodeListEngine { self.validate_and_store_previous_cycle_quorums( work_block_hash_h, &rotation_sigs_by_work_height, - )?; + ); } // Each entry gets the quarter signatures of its own cycle. A failed From c8da0f36fe65c918cfdcd6a53d2a38f6d189fc19 Mon Sep 17 00:00:00 2001 From: xdustinface Date: Mon, 10 Aug 2026 20:29:32 +1000 Subject: [PATCH 14/36] fix(dash): let a complete rotation cycle replace a partially stored one `is_cycle_fully_verified` treated any non-empty all-`Verified` map as complete, so a cycle stored with part of its set (the fixture at 2518986 legitimately stores 31 of 32) looked finished and permanently blocked further writes to that cycle key. The missing entries are exactly the ones whose context the storing QRInfo did not carry, which is what a later QRInfo is expected to supply. Requiring one entry per active rotation slot costs nothing on the authoritative current-cycle path, where `lastCommitmentPerIndex` always covers the full set, and re-opens the previous-cycle path for completion. --- dash/src/sml/masternode_list_engine/mod.rs | 43 +++++++++++++++++++--- 1 file changed, 38 insertions(+), 5 deletions(-) diff --git a/dash/src/sml/masternode_list_engine/mod.rs b/dash/src/sml/masternode_list_engine/mod.rs index 04d73ec67..9cf804744 100644 --- a/dash/src/sml/masternode_list_engine/mod.rs +++ b/dash/src/sml/masternode_list_engine/mod.rs @@ -684,14 +684,21 @@ impl MasternodeListEngine { hashes } - /// `true` iff `rotated_quorums_per_cycle` already holds a non-empty cycle - /// for `cycle_hash` whose every entry is `Verified`. Used by the storage - /// gate to refuse downgrading a cycle and by the previous-cycle revalidation - /// path to skip work that would not improve trust. + /// `true` iff `rotated_quorums_per_cycle` already holds a complete cycle + /// for `cycle_hash`: one `Verified` entry for every active rotation slot. + /// Used by the storage gate to refuse downgrading a cycle and by the + /// previous-cycle revalidation path to skip work that would not improve + /// trust. + /// + /// A cycle stored with only part of its set stays open on both counts. The + /// entries it lacks are the ones whose context the QRInfo that stored it + /// did not carry, and a later QRInfo carrying that context must be able to + /// complete the cycle rather than be refused as a downgrade. #[cfg(feature = "quorum_validation")] fn is_cycle_fully_verified(&self, cycle_hash: &BlockHash) -> bool { + let expected = self.network.isd_llmq_type().active_quorum_count() as usize; self.rotated_quorums_per_cycle.get(cycle_hash).is_some_and(|existing| { - !existing.is_empty() + existing.len() == expected && existing .values() .all(|q| matches!(q.verified, LLMQEntryVerificationStatus::Verified)) @@ -2643,5 +2650,31 @@ mod tests { !engine.rotated_quorums_per_cycle.contains_key(&fresh_key), "gate must not write a degraded cycle" ); + + // A cycle stored with only part of its set is not a cycle the gate may + // protect: the entries it lacks are exactly what a later QRInfo is + // expected to supply. + let partial_key = BlockHash::from_byte_array([0xCD; 32]); + let complete_cycle: Vec = original_cycle.values().cloned().collect(); + let partial_cycle: BTreeMap = + original_cycle.iter().skip(1).map(|(index, q)| (*index, q.clone())).collect(); + assert_eq!( + partial_cycle.len() + 1, + complete_cycle.len(), + "the partial cycle must be missing exactly one entry" + ); + engine.rotated_quorums_per_cycle.insert(partial_key, partial_cycle); + engine + .store_cycle_if_fully_verified( + partial_key, + complete_cycle.clone(), + rotation_quorum_type, + ) + .expect("gate must not error when completing a partial cycle"); + assert_eq!( + engine.rotated_quorums_per_cycle.get(&partial_key).map(|cycle| cycle.len()), + Some(complete_cycle.len()), + "a complete cycle must replace a partially stored one" + ); } } From bc790cb7f97a454bfd372543239c268be2c16790 Mon Sep 17 00:00:00 2001 From: xdustinface Date: Mon, 10 Aug 2026 20:32:18 +1000 Subject: [PATCH 15/36] feat(dash): report previous-cycle quorums dropped as invalid to the caller A previous-cycle rotated quorum that fails validation is logged and left out of the stored cycle, so a peer serving forged rotated commitments still got `Ok(...)` back with nothing in the result to act on. `QRInfoFeedResult` now carries the count. `all_fully_verified` is deliberately untouched: it is the trust gate for the current cycle, which the enrichment path does not feed, and dash-spv uses it to decide whether the cycle needs another QRInfo. The count is surfaced in the QRInfo log line and in the `MasternodeStateUpdated` display. --- dash-spv/src/sync/events.rs | 3 +- dash-spv/src/sync/masternodes/sync_manager.rs | 3 +- dash/src/sml/masternode_list_engine/mod.rs | 32 ++++++++++++++++--- 3 files changed, 31 insertions(+), 7 deletions(-) diff --git a/dash-spv/src/sync/events.rs b/dash-spv/src/sync/events.rs index ae2df5c58..76f4afccd 100644 --- a/dash-spv/src/sync/events.rs +++ b/dash-spv/src/sync/events.rs @@ -241,12 +241,13 @@ impl fmt::Display for SyncEvent { } => match qr_info_result { Some(s) => write!( f, - "MasternodeStateUpdated(height={}, qr_info={{stored_cycle_height={:?}, verified={}/{}, newly_qualified={}}})", + "MasternodeStateUpdated(height={}, qr_info={{stored_cycle_height={:?}, verified={}/{}, newly_qualified={}, previous_cycle_invalid={}}})", height, s.stored_cycle_height, s.fully_verified_count, s.rotated_quorum_count, s.newly_qualified_count, + s.previous_cycle_invalid_count, ), None => write!(f, "MasternodeStateUpdated(height={})", height), }, diff --git a/dash-spv/src/sync/masternodes/sync_manager.rs b/dash-spv/src/sync/masternodes/sync_manager.rs index 6dfc846c6..528071036 100644 --- a/dash-spv/src/sync/masternodes/sync_manager.rs +++ b/dash-spv/src/sync/masternodes/sync_manager.rs @@ -296,11 +296,12 @@ impl SyncManager for MasternodesManager { if let Some(ref qr_info_result) = qr_info_result { tracing::info!( - "QRInfo processed: stored_cycle_height={:?}, rotated_quorum_count={}, fully_verified_count={}, newly_qualified_count={}", + "QRInfo processed: stored_cycle_height={:?}, rotated_quorum_count={}, fully_verified_count={}, newly_qualified_count={}, previous_cycle_invalid_count={}", qr_info_result.stored_cycle_height, qr_info_result.rotated_quorum_count, qr_info_result.fully_verified_count, qr_info_result.newly_qualified_count, + qr_info_result.previous_cycle_invalid_count, ); // If every rotated quorum in this QRInfo ended up Verified, // mark the cycle validated so `next_pipeline_mode` will diff --git a/dash/src/sml/masternode_list_engine/mod.rs b/dash/src/sml/masternode_list_engine/mod.rs index 9cf804744..176e74428 100644 --- a/dash/src/sml/masternode_list_engine/mod.rs +++ b/dash/src/sml/masternode_list_engine/mod.rs @@ -66,6 +66,14 @@ pub struct QRInfoFeedResult { /// the cycle hash had no resolvable height. The cycle stored by /// `validate_and_store_previous_cycle_quorums` is not reflected here. pub stored_cycle_height: Option, + /// Previous-cycle rotated quorums that failed validation outright and were + /// left out of the cycle stored by + /// `validate_and_store_previous_cycle_quorums`. That path is best-effort + /// enrichment and never fails the feed, so this is the only signal a + /// caller gets that a peer served rotated commitments which do not verify. + /// Entries left out for missing context are not counted, and + /// `all_fully_verified` is unaffected: it reports on the current cycle. + pub previous_cycle_invalid_count: usize, } impl QRInfoFeedResult { @@ -561,22 +569,27 @@ impl MasternodeListEngine { /// only IS locks selecting exactly that quorum index fail while the rest /// of the cycle verifies. The authoritative rejection of bad /// current-cycle data happens on the `lastCommitmentPerIndex` path. + /// + /// Returns how many entries were left out for failing validation outright, + /// as opposed to lacking the context to be validated at all, so the caller + /// can judge the peer that served them. #[cfg(feature = "quorum_validation")] fn validate_and_store_previous_cycle_quorums( &mut self, work_block_hash: BlockHash, sigs_by_work_height: &BTreeMap, - ) { + ) -> usize { let isd_type = self.network.isd_llmq_type(); let Some((cycle_hash, mut entries)) = self.try_load_previous_cycle_entries(work_block_hash, isd_type, sigs_by_work_height) else { - return; + return 0; }; let validation_statuses = self.validate_rotation_cycle_quorums_validation_statuses( entries.iter().collect::>().as_slice(), ); + let mut invalid_count = 0; for entry in entries.iter_mut() { entry.verified = validation_statuses .get(&entry.quorum_entry.quorum_hash) @@ -585,6 +598,7 @@ impl MasternodeListEngine { match entry.verified { LLMQEntryVerificationStatus::Verified => {} LLMQEntryVerificationStatus::Invalid(_) => { + invalid_count += 1; tracing::warn!( "Previous-cycle quorum {} at cycle {} failed validation ({}); leaving it out", entry.quorum_entry.quorum_hash, @@ -604,7 +618,7 @@ impl MasternodeListEngine { } entries.retain(|entry| matches!(entry.verified, LLMQEntryVerificationStatus::Verified)); if entries.is_empty() { - return; + return invalid_count; } // Mirror statuses into `quorum_statuses` and the MN list. @@ -648,7 +662,7 @@ impl MasternodeListEngine { cycle_hash, e ); - return; + return invalid_count; } }; self.rotated_quorums_per_cycle.insert(cycle_hash, cycle_map); @@ -656,6 +670,7 @@ impl MasternodeListEngine { "Validated and stored previous-cycle rotated quorums under cycle hash {}", cycle_hash ); + invalid_count } /// Block hashes referenced by a QRInfo message that the engine needs heights for. @@ -1040,6 +1055,8 @@ impl MasternodeListEngine { let mut newly_qualified_count: usize = 0; #[cfg(feature = "quorum_validation")] let mut fully_verified_count: usize = 0; + #[cfg(feature = "quorum_validation")] + let mut previous_cycle_invalid_count: usize = 0; if let Some((quorum_snapshot_at_h_minus_4c, mn_list_diff_at_h_minus_4c)) = quorum_snapshot_and_mn_list_diff_at_h_minus_4c { @@ -1078,7 +1095,7 @@ impl MasternodeListEngine { // still missing settle as `Skipped` individually. #[cfg(feature = "quorum_validation")] if can_verify_previous { - self.validate_and_store_previous_cycle_quorums( + previous_cycle_invalid_count = self.validate_and_store_previous_cycle_quorums( work_block_hash_h, &rotation_sigs_by_work_height, ); @@ -1319,6 +1336,7 @@ impl MasternodeListEngine { newly_qualified_count, fully_verified_count, stored_cycle_height, + previous_cycle_invalid_count, })) } #[cfg(not(feature = "quorum_validation"))] @@ -2587,6 +2605,10 @@ mod tests { .all(|q| matches!(q.verified, LLMQEntryVerificationStatus::Verified)), "every stored previous-cycle quorum must be verified" ); + assert_eq!( + feed_result.previous_cycle_invalid_count, 1, + "the dropped previous-cycle quorum must be reported back to the caller" + ); assert!(feed_result.all_fully_verified(), "the current cycle must still verify fully"); assert!( feed_result.stored_cycle_height.is_some(), From 3af7bef16e7c7d4d6aa92550bcbf96855069861a Mon Sep 17 00:00:00 2001 From: xdustinface Date: Mon, 10 Aug 2026 20:36:32 +1000 Subject: [PATCH 16/36] test(dash): tighten the rotated-quorum fixture tests Fold the repeated bincode decode boilerplate into one `decode_fixture` helper, and derive both hand-rolled cycle bases through `rotated_quorum_cycle_base` instead of recomputing height minus index inline. The mainnet DKG interval literal now comes from the network params that name it. `feed_qr_info_degrades_previous_cycle_on_corrupt_aggregate_signature` zeroed the signature, which trips the structural zero check in `validate_structure` and never reaches aggregate verification, so it did not test what its name says. It now substitutes another quorum's signature, which is structurally sound and fails the aggregate check, and asserts the surviving entry count is exactly one lower than the rotated set at `h`, so degradation dropping more than the corrupted quorum would fail. --- dash/src/sml/masternode_list_engine/mod.rs | 102 +++++++++++---------- 1 file changed, 52 insertions(+), 50 deletions(-) diff --git a/dash/src/sml/masternode_list_engine/mod.rs b/dash/src/sml/masternode_list_engine/mod.rs index 176e74428..50c66cc3a 100644 --- a/dash/src/sml/masternode_list_engine/mod.rs +++ b/dash/src/sml/masternode_list_engine/mod.rs @@ -1670,6 +1670,7 @@ mod tests { }; #[cfg(feature = "quorum_validation")] use crate::sml::quorum_validation_error::QuorumValidationError; + use bincode::{Decode, config, decode_from_slice}; use std::collections::BTreeMap; #[cfg(feature = "quorum_validation")] use std::collections::BTreeSet; @@ -2037,6 +2038,10 @@ mod tests { } } + fn decode_fixture>(bytes: &[u8]) -> T { + decode_from_slice(bytes, config::standard()).expect("expected to decode").0 + } + #[cfg(feature = "quorum_validation")] fn load_qrinfo_2240504_fixture() -> (MasternodeListEngine, QRInfo) { let mn_list_diff_bytes: &[u8] = @@ -2049,21 +2054,14 @@ mod tests { let block_container_bytes: &[u8] = include_bytes!("../../../tests/data/test_DML_diffs/block_container_2240504.dat"); let block_container: MasternodeListEngineBlockContainer = - bincode::decode_from_slice(block_container_bytes, bincode::config::standard()) - .expect("expected to decode") - .0; + decode_fixture(block_container_bytes); let mn_list_diffs_bytes: &[u8] = include_bytes!("../../../tests/data/test_DML_diffs/mnlistdiffs_2240504.dat"); let mn_list_diffs: BTreeMap<(CoreBlockHeight, CoreBlockHeight), MnListDiff> = - bincode::decode_from_slice(mn_list_diffs_bytes, bincode::config::standard()) - .expect("expected to decode") - .0; + decode_fixture(mn_list_diffs_bytes); let qr_info_bytes: &[u8] = include_bytes!("../../../tests/data/test_DML_diffs/qrinfo_2240504.dat"); - let qr_info: QRInfo = - bincode::decode_from_slice(qr_info_bytes, bincode::config::standard()) - .expect("expected to decode") - .0; + let qr_info: QRInfo = decode_fixture(qr_info_bytes); engine.block_container = block_container; for ((_start_height, height), diff) in mn_list_diffs.into_iter() { @@ -2084,15 +2082,10 @@ mod tests { let block_container_bytes: &[u8] = include_bytes!("../../../tests/data/test_DML_diffs/block_container_2518986.dat"); let block_container: MasternodeListEngineBlockContainer = - bincode::decode_from_slice(block_container_bytes, bincode::config::standard()) - .expect("expected to decode") - .0; + decode_fixture(block_container_bytes); let qr_info_bytes: &[u8] = include_bytes!("../../../tests/data/test_DML_diffs/qrinfo_2518986.dat"); - let qr_info: QRInfo = - bincode::decode_from_slice(qr_info_bytes, bincode::config::standard()) - .expect("expected to decode") - .0; + let qr_info: QRInfo = decode_fixture(qr_info_bytes); let mut engine = MasternodeListEngine { network: Network::Mainnet, @@ -2115,11 +2108,7 @@ mod tests { let mixed_cycle_bases: BTreeSet = qr_info .last_commitment_per_index .iter() - .filter_map(|q| { - let height = engine.block_container.get_height(&q.quorum_hash)?; - let index = u32::try_from(q.quorum_index?).ok()?; - height.checked_sub(index) - }) + .filter_map(|q| engine.rotated_quorum_cycle_base(q)) .collect(); assert!( mixed_cycle_bases.len() > 1 && mixed_cycle_bases.contains(¤t_cycle_base), @@ -2161,12 +2150,14 @@ mod tests { ); // The previous cycle's active set carries its own straggler at index - // 20 (from one cycle further back), whose quarter masternode lists - // are not shipped in this QRInfo. The verified rest of the set must - // still be stored so IS locks referencing the previous cycle verify. + // 20 (from one cycle further back), whose commitment block has no + // height in the captured container, so its cycle cannot be derived and + // it settles as skipped. The verified rest of the set must still be + // stored so IS locks referencing the previous cycle verify. + let dkg_interval = engine.network.isd_llmq_type().params().dkg_params.interval; let previous_cycle_hash = *engine .block_container - .get_hash(&(current_cycle_base - 288)) + .get_hash(&(current_cycle_base - dkg_interval)) .expect("expected previous cycle hash"); let previous_cycle = engine .rotated_quorums_per_cycle @@ -2244,10 +2235,7 @@ mod tests { let block_hex = include_str!("../../../tests/data/test_DML_diffs/masternode_list_engine.hex"); let data = hex::decode(block_hex).expect("decode hex"); - let mut mn_list_engine: MasternodeListEngine = - bincode::decode_from_slice(&data, bincode::config::standard()) - .expect("expected to decode") - .0; + let mut mn_list_engine: MasternodeListEngine = decode_fixture(&data); assert_eq!(mn_list_engine.masternode_lists.len(), 29); @@ -2280,10 +2268,7 @@ mod tests { let block_hex = include_str!("../../../tests/data/test_DML_diffs/masternode_list_engine.hex"); let data = hex::decode(block_hex).expect("decode hex"); - let mut mn_list_engine: MasternodeListEngine = - bincode::decode_from_slice(&data, bincode::config::standard()) - .expect("expected to decode") - .0; + let mut mn_list_engine: MasternodeListEngine = decode_fixture(&data); assert_eq!(mn_list_engine.masternode_lists.len(), 29); @@ -2315,10 +2300,7 @@ mod tests { let block_hex = include_str!("../../../tests/data/test_DML_diffs/masternode_list_engine.hex"); let data = hex::decode(block_hex).expect("decode hex"); - let mn_list_engine: MasternodeListEngine = - bincode::decode_from_slice(&data, bincode::config::standard()) - .expect("expected to decode") - .0; + let mn_list_engine: MasternodeListEngine = decode_fixture(&data); for (cycle_hash, quorums) in mn_list_engine.rotated_quorums_per_cycle.iter() { for (index, quorum) in quorums.iter() { @@ -2337,10 +2319,7 @@ mod tests { let block_hex = include_str!("../../../tests/data/test_DML_diffs/masternode_list_engine.hex"); let data = hex::decode(block_hex).expect("decode hex"); - let mn_list_engine: MasternodeListEngine = - bincode::decode_from_slice(&data, bincode::config::standard()) - .expect("expected to decode") - .0; + let mn_list_engine: MasternodeListEngine = decode_fixture(&data); for quorums in mn_list_engine.rotated_quorums_per_cycle.values() { mn_list_engine @@ -2574,23 +2553,41 @@ mod tests { qr_info.mn_list_diff_h.new_quorums[corrupt_position].quorum_hash; let previous_cycle_key = { let quorum = &qr_info.mn_list_diff_h.new_quorums[corrupt_position]; - let quorum_height = engine - .block_container - .get_height(&quorum.quorum_hash) - .expect("fixture must carry the corrupted quorum's height"); - let cycle_base = quorum_height - - u32::try_from(quorum.quorum_index.expect("rotated quorums carry an index")) - .unwrap(); + let cycle_base = engine + .rotated_quorum_cycle_base(quorum) + .expect("fixture must carry the corrupted quorum's cycle base"); *engine.block_container.get_hash(&cycle_base).expect("expected cycle base hash") }; + // A zeroed signature would be rejected by the structural check before + // any aggregate verification runs. Another quorum's signature is + // structurally sound and simply does not verify against this + // commitment. + let foreign_signature = qr_info + .mn_list_diff_h + .new_quorums + .iter() + .find(|q| { + q.llmq_type.is_rotating_quorum_type() && q.quorum_hash != corrupted_quorum_hash + }) + .expect("fixture must carry a second rotated quorum in the h diff") + .all_commitment_aggregated_signature; qr_info.mn_list_diff_h.new_quorums[corrupt_position].all_commitment_aggregated_signature = - BLSSignature::from([0u8; 96]); + foreign_signature; + let h_block_hash = qr_info.mn_list_diff_h.block_hash; let feed_result = engine .feed_qr_info(qr_info, true, true) .expect("previous-cycle corruption must not abort the feed") .expect("expected a feed result"); + let h_height = + engine.block_container.get_height(&h_block_hash).expect("expected the h height"); + let rotating_at_h = engine + .masternode_lists + .get(&h_height) + .and_then(|list| list.quorums.get(&engine.network.isd_llmq_type())) + .expect("expected rotated quorums on the list at h") + .len(); let previous_cycle = engine .rotated_quorums_per_cycle .get(&previous_cycle_key) @@ -2599,6 +2596,11 @@ mod tests { !previous_cycle.values().any(|q| q.quorum_entry.quorum_hash == corrupted_quorum_hash), "the corrupted quorum must be left out of the stored cycle" ); + assert_eq!( + previous_cycle.len(), + rotating_at_h - 1, + "degradation must drop the corrupted quorum and nothing else" + ); assert!( previous_cycle .values() From 17fb35dadc3c98b1f5b0f901287fe95c0ae85f41 Mon Sep 17 00:00:00 2001 From: xdustinface Date: Mon, 10 Aug 2026 20:39:20 +1000 Subject: [PATCH 17/36] test(dash): cover rotated quorum hashes outside the h diff in the hash preview `qr_info_referenced_block_hashes` now collects rotating commitment hashes from every diff rather than only from `mn_list_diff_h`, which is what lets the caller resolve each quorum's own cycle base. Nothing in the workspace exercised the widening, and its only consumer is dash-spv. The 2518986 fixture's previous-cycle straggler sits in the h-c diff, so asserting the preview lists it fails against the narrower behaviour. --- dash/src/sml/masternode_list_engine/mod.rs | 33 ++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/dash/src/sml/masternode_list_engine/mod.rs b/dash/src/sml/masternode_list_engine/mod.rs index 50c66cc3a..b69205250 100644 --- a/dash/src/sml/masternode_list_engine/mod.rs +++ b/dash/src/sml/masternode_list_engine/mod.rs @@ -2173,6 +2173,39 @@ mod tests { ); } + /// A rotated quorum's ChainLock signature is keyed by its own cycle base, + /// which is derived from the height of its commitment block, so a caller + /// that pre-feeds exactly what this preview lists must come away with a + /// height for every rotated quorum in every diff. The 2518986 fixture's + /// previous-cycle straggler at index 20 sits in the h-c diff, so a preview + /// that only walked `mn_list_diff_h` would leave its cycle underivable. + #[cfg(feature = "quorum_validation")] + #[test] + fn qr_info_referenced_block_hashes_cover_rotated_quorums_outside_the_h_diff() { + let (_engine, qr_info) = load_qrinfo_2518986_fixture(); + + let straggler = qr_info + .mn_list_diff_at_h_minus_c + .new_quorums + .iter() + .find(|q| q.llmq_type.is_rotating_quorum_type() && q.quorum_index == Some(20)) + .expect("fixture must carry the previous cycle's index 20 quorum in the h-c diff") + .quorum_hash; + assert!( + !qr_info + .mn_list_diff_h + .new_quorums + .iter() + .any(|q| q.llmq_type.is_rotating_quorum_type() && q.quorum_hash == straggler), + "fixture invariant: the straggler must sit outside the h diff or this covers nothing" + ); + + assert!( + MasternodeListEngine::qr_info_referenced_block_hashes(&qr_info).contains(&straggler), + "the commitment block of a rotated quorum outside the h diff must be listed" + ); + } + #[test] fn validate_from_qr_info_and_mn_list_diffs() { let (mut masternode_list_engine, qr_info) = load_qrinfo_2240504_fixture(); From 7f7fd61ed7af99294635cbeb3a0390f883ab92a9 Mon Sep 17 00:00:00 2001 From: xdustinface Date: Mon, 10 Aug 2026 20:40:30 +1000 Subject: [PATCH 18/36] refactor(dash): import what the capture hook encodes with The hook reached for `bincode::encode_to_vec` and `bincode::config::standard` through fully qualified paths where the module can import them. --- dash/src/sml/masternode_list_engine/mod.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dash/src/sml/masternode_list_engine/mod.rs b/dash/src/sml/masternode_list_engine/mod.rs index b69205250..93450ac73 100644 --- a/dash/src/sml/masternode_list_engine/mod.rs +++ b/dash/src/sml/masternode_list_engine/mod.rs @@ -31,6 +31,8 @@ use crate::transaction::special_transaction::quorum_commitment::QuorumEntry; use crate::{BlockHash, QuorumHash}; #[cfg(feature = "bincode")] use bincode::{Decode, Encode}; +#[cfg(feature = "qrinfo-capture")] +use bincode::{config, encode_to_vec}; use hashes::Hash; #[cfg(feature = "serde")] use serde::{Deserialize, Serialize}; @@ -774,12 +776,10 @@ impl MasternodeListEngine { if fs::create_dir_all(&dir).is_err() { return; } - if let Ok(bytes) = - bincode::encode_to_vec(&self.block_container, bincode::config::standard()) - { + if let Ok(bytes) = encode_to_vec(&self.block_container, config::standard()) { let _ = fs::write(format!("{dir}/block_container_{tip_height}.dat"), bytes); } - if let Ok(bytes) = bincode::encode_to_vec(qr_info, bincode::config::standard()) { + if let Ok(bytes) = encode_to_vec(qr_info, config::standard()) { let _ = fs::write(format!("{dir}/qrinfo_{tip_height}.dat"), bytes); } } From 2c799fe7dca847be23c31002dccbebdce850dfd8 Mon Sep 17 00:00:00 2001 From: xdustinface Date: Tue, 11 Aug 2026 00:16:21 +1000 Subject: [PATCH 19/36] fix(dash): merge verified rotation entries into a stored cycle `last_commitment_per_index` is peer controlled and its length is not validated, so storing a cycle by whole-map replacement let a peer serving one genuine commitment from an already-stored cycle drop the other indices and break InstantSend verification for the rest of that cycle. Verified entries now merge per quorum index at both storage sites, with the incoming entry winning a collision. --- dash/src/sml/masternode_list_engine/mod.rs | 30 +++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/dash/src/sml/masternode_list_engine/mod.rs b/dash/src/sml/masternode_list_engine/mod.rs index 93450ac73..454ef5531 100644 --- a/dash/src/sml/masternode_list_engine/mod.rs +++ b/dash/src/sml/masternode_list_engine/mod.rs @@ -667,7 +667,7 @@ impl MasternodeListEngine { return invalid_count; } }; - self.rotated_quorums_per_cycle.insert(cycle_hash, cycle_map); + self.rotated_quorums_per_cycle.entry(cycle_hash).or_default().extend(cycle_map); tracing::debug!( "Validated and stored previous-cycle rotated quorums under cycle hash {}", cycle_hash @@ -731,6 +731,11 @@ impl MasternodeListEngine { /// Skipped entries, and a `verify_rotated_quorums == false` call can leave /// entries unverified, neither of which must downgrade it. /// + /// The number of entries a peer serves is not fixed, so verified entries + /// merge into the stored cycle per quorum index instead of replacing it. + /// A response carrying a subset completes the cycle, it never drops the + /// indices an earlier response already proved. + /// /// Returns the height of the stored cycle, or `None` if storage was /// skipped because the gate did not fire. #[cfg(feature = "quorum_validation")] @@ -748,7 +753,7 @@ impl MasternodeListEngine { } let cycle_map = build_cycle_quorum_map(qualified_last_commitment_per_index, rotation_quorum_type)?; - *self.rotated_quorums_per_cycle.entry(cycle_key).or_default() = cycle_map; + self.rotated_quorums_per_cycle.entry(cycle_key).or_default().extend(cycle_map); Ok(self.block_container.get_height(&cycle_key)) } @@ -2731,7 +2736,26 @@ mod tests { assert_eq!( engine.rotated_quorums_per_cycle.get(&partial_key).map(|cycle| cycle.len()), Some(complete_cycle.len()), - "a complete cycle must replace a partially stored one" + "a complete cycle must complete a partially stored one" + ); + + // Completion only ever adds: a verified set smaller than what is + // already stored must leave the indices it does not carry in place, + // otherwise one genuine commitment served by a peer degrades the rest + // of the cycle. + let shrink_key = BlockHash::from_byte_array([0xEF; 32]); + let stored_before: BTreeMap = + original_cycle.iter().skip(1).map(|(index, q)| (*index, q.clone())).collect(); + engine.rotated_quorums_per_cycle.insert(shrink_key, stored_before.clone()); + let single_entry = + vec![stored_before.values().next().expect("partial cycle non-empty").clone()]; + engine + .store_cycle_if_fully_verified(shrink_key, single_entry, rotation_quorum_type) + .expect("gate must not error when merging a smaller verified set"); + assert_eq!( + engine.rotated_quorums_per_cycle.get(&shrink_key), + Some(&stored_before), + "a smaller verified set must not shrink a larger stored cycle" ); } } From d4bae88bc41d8f293dfd92ffcdb0fada88d2b4b8 Mon Sep 17 00:00:00 2001 From: xdustinface Date: Tue, 11 Aug 2026 00:17:00 +1000 Subject: [PATCH 20/36] fix(dash): classify `CycleBaseHeightTooLow` as skipped, not invalid Insufficient history for a rotation reconstruction is a missing-context condition like every sibling `Required*NotPresent` error, so it must degrade the one quorum rather than abort the whole feed as `Invalid` does. --- dash/src/sml/llmq_entry_verification.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/dash/src/sml/llmq_entry_verification.rs b/dash/src/sml/llmq_entry_verification.rs index 58d85cc3a..dbbaf4444 100644 --- a/dash/src/sml/llmq_entry_verification.rs +++ b/dash/src/sml/llmq_entry_verification.rs @@ -122,6 +122,13 @@ impl From for LLMQEntryVerificationStatus { offset, block_hash, )) } + // A cycle base sitting below the depth a rotation reconstruction + // reaches back to means the quarter lists cannot exist yet. That + // is missing history like its siblings above, so it degrades the + // one quorum instead of rejecting everything served with it. + QuorumValidationError::CycleBaseHeightTooLow(height) => { + Self::Skipped(LLMQEntryVerificationSkipStatus::MissedList(height)) + } other => Self::Invalid(other), } } @@ -208,6 +215,12 @@ mod tests { LLMQEntryVerificationSkipStatus::MissingRotationChainLockSig(2, h4), ), ), + ( + QuorumValidationError::CycleBaseHeightTooLow(5), + LLMQEntryVerificationStatus::Skipped(LLMQEntryVerificationSkipStatus::MissedList( + 5, + )), + ), ( QuorumValidationError::InvalidQuorumPublicKey, LLMQEntryVerificationStatus::Invalid(QuorumValidationError::InvalidQuorumPublicKey), From a81ba131975268394c06fa527cc3c8ce25c6b4aa Mon Sep 17 00:00:00 2001 From: xdustinface Date: Tue, 11 Aug 2026 00:18:24 +1000 Subject: [PATCH 21/36] refactor(dash): give inferred rotation sigs their own skip status `OtherContext` carries a prose string that retry logic cannot dispatch on, unlike every sibling variant. `InferredRotationChainLockSigs` names the condition and carries the quorum hash, and is appended last so existing bincode discriminants keep their values. --- dash/src/sml/llmq_entry_verification.rs | 13 +++++++++++++ dash/src/sml/masternode_list_engine/mod.rs | 9 ++++----- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/dash/src/sml/llmq_entry_verification.rs b/dash/src/sml/llmq_entry_verification.rs index dbbaf4444..3054834e7 100644 --- a/dash/src/sml/llmq_entry_verification.rs +++ b/dash/src/sml/llmq_entry_verification.rs @@ -38,6 +38,12 @@ pub enum LLMQEntryVerificationSkipStatus { /// where the entire 4-sig tuple is absent. MissingRotationChainLockSig(u8, BlockHash), OtherContext(String), + /// At least one of the quarter chain-lock signatures used to reconstruct + /// this quorum was keyed by elimination rather than by a known quorum + /// height, so a verification failure says nothing about the quorum data + /// itself. Retry logic can resolve it by feeding the heights of the + /// rotated quorum hashes the QRInfo carries. + InferredRotationChainLockSigs(QuorumHash), } impl Display for LLMQEntryVerificationSkipStatus { @@ -71,6 +77,9 @@ impl Display for LLMQEntryVerificationSkipStatus { LLMQEntryVerificationSkipStatus::OtherContext(message) => { format!("OtherContext({message})") } + LLMQEntryVerificationSkipStatus::InferredRotationChainLockSigs(quorum_hash) => { + format!("InferredRotationChainLockSigs({})", quorum_hash) + } } .as_str(), ) @@ -250,6 +259,10 @@ mod tests { LLMQEntryVerificationSkipStatus::MissingRotationChainLockSig(2, h), format!("MissingRotationChainLockSig(h - 2, {h})"), ), + ( + LLMQEntryVerificationSkipStatus::InferredRotationChainLockSigs(h), + format!("InferredRotationChainLockSigs({h})"), + ), ]; for (status, expected) in cases { diff --git a/dash/src/sml/masternode_list_engine/mod.rs b/dash/src/sml/masternode_list_engine/mod.rs index 454ef5531..fc7033ea3 100644 --- a/dash/src/sml/masternode_list_engine/mod.rs +++ b/dash/src/sml/masternode_list_engine/mod.rs @@ -1177,9 +1177,8 @@ impl MasternodeListEngine { e ); rotated_quorum.verified = LLMQEntryVerificationStatus::Skipped( - LLMQEntryVerificationSkipStatus::OtherContext( - "quarter chain lock signatures were inferred by elimination" - .to_string(), + LLMQEntryVerificationSkipStatus::InferredRotationChainLockSigs( + rotated_quorum.quorum_entry.quorum_hash, ), ); } else { @@ -2561,8 +2560,8 @@ mod tests { matches!( status, LLMQEntryVerificationStatus::Skipped( - LLMQEntryVerificationSkipStatus::OtherContext(_) - ) + LLMQEntryVerificationSkipStatus::InferredRotationChainLockSigs(hash) + ) if *hash == target ), "a failure under an inferred quarter signature must settle as Skipped, got {status}" ); From 9e2b0e81148b645a535e3cc966993ee26d1011c8 Mon Sep 17 00:00:00 2001 From: xdustinface Date: Tue, 11 Aug 2026 00:21:13 +1000 Subject: [PATCH 22/36] refactor(dash): compute the four quarter work heights in one place The `[B-3c-8, B-2c-8, B-c-8, B-8]` arithmetic had four copies. `cycle_quarter_work_heights` returns the quarters as options so each caller keeps its own reading of an underflow: the required-height survey takes what exists, `quarter_work_heights` needs all four, and the reconstruction reports `CycleBaseHeightTooLow`. The cycle base in `required_cl_sig_heights` stays derived from the height modulo the interval rather than from `quorum_index`, because the index-based form skips a quorum that carries no index where the modulo form still contributes its heights. --- dash/src/sml/masternode_list_engine/mod.rs | 20 +++++-- .../rotated_quorum_construction.rs | 54 ++++++++----------- 2 files changed, 39 insertions(+), 35 deletions(-) diff --git a/dash/src/sml/masternode_list_engine/mod.rs b/dash/src/sml/masternode_list_engine/mod.rs index fc7033ea3..72f05a86d 100644 --- a/dash/src/sml/masternode_list_engine/mod.rs +++ b/dash/src/sml/masternode_list_engine/mod.rs @@ -322,6 +322,21 @@ fn rotated_cycle_base_height( quorum_block_height.checked_sub(u32::try_from(quorum_index).ok()?) } +/// The four quarter work block heights of the rotation cycle based at +/// `cycle_base`, ordered oldest quarter first: `[B-3c-8, B-2c-8, B-c-8, B-8]` +/// for cycle base `B` and DKG interval `c`. +/// +/// A quarter reaching below the genesis block is `None`. Callers differ on +/// what that means, so none is applied here: the required-height survey takes +/// whichever quarters exist, while a reconstruction needs all four. +fn cycle_quarter_work_heights( + cycle_base: CoreBlockHeight, + interval: u32, +) -> [Option; 4] { + [3, 2, 1, 0] + .map(|cycles_back: u32| cycle_base.checked_sub(cycles_back * interval + WORK_DIFF_DEPTH)) +} + impl MasternodeListEngine { /// Creates a new MasternodeListEngine with the specified network configuration. /// @@ -933,9 +948,8 @@ impl MasternodeListEngine { fn quarter_work_heights(&self, quorum: &QuorumEntry) -> Option<[CoreBlockHeight; 4]> { let cycle_base = self.rotated_quorum_cycle_base(quorum)?; let interval = quorum.llmq_type.params().dkg_params.interval; - let height_at = - |cycles_back: u32| cycle_base.checked_sub(cycles_back * interval + WORK_DIFF_DEPTH); - Some([height_at(3)?, height_at(2)?, height_at(1)?, height_at(0)?]) + let [h3, h2, h1, h0] = cycle_quarter_work_heights(cycle_base, interval); + Some([h3?, h2?, h1?, h0?]) } /// The four quarter ChainLock signatures for the cycle a rotated quorum diff --git a/dash/src/sml/masternode_list_engine/rotated_quorum_construction.rs b/dash/src/sml/masternode_list_engine/rotated_quorum_construction.rs index 3c2bfb546..2e9199e49 100644 --- a/dash/src/sml/masternode_list_engine/rotated_quorum_construction.rs +++ b/dash/src/sml/masternode_list_engine/rotated_quorum_construction.rs @@ -7,7 +7,7 @@ use crate::sml::llmq_type::LLMQType; use crate::sml::llmq_type::rotation::{LLMQQuarterReconstructionType, LLMQQuarterUsageType}; use crate::sml::masternode_list::MasternodeList; use crate::sml::masternode_list_engine::{ - MasternodeListEngine, WORK_DIFF_DEPTH, rotated_cycle_base_height, + MasternodeListEngine, cycle_quarter_work_heights, rotated_cycle_base_height, }; use crate::sml::masternode_list_entry::qualified_masternode_list_entry::QualifiedMasternodeListEntry; use crate::sml::quorum_entry::qualified_quorum_entry::{ @@ -183,17 +183,11 @@ impl MasternodeListEngine { "getting required cl_sig heights".to_string(), )); }; - let llmq_params = quorum.llmq_type.params(); - let quorum_index = quorum_block_height % llmq_params.dkg_params.interval; - let cycle_base_height = quorum_block_height - quorum_index; - let cycle_length = llmq_params.dkg_params.interval; - for i in 0..=3 { - if let Some(work_height) = - cycle_base_height.checked_sub(i * cycle_length + WORK_DIFF_DEPTH) - { - required_heights.insert(work_height); - } - } + let cycle_length = quorum.llmq_type.params().dkg_params.interval; + let cycle_base_height = quorum_block_height - quorum_block_height % cycle_length; + required_heights.extend( + cycle_quarter_work_heights(cycle_base_height, cycle_length).iter().flatten(), + ); } // We are going to validate the previous rotation as well if qr_info.quorum_snapshot_and_mn_list_diff_at_h_minus_4c.is_some() { @@ -207,17 +201,14 @@ impl MasternodeListEngine { "getting height for quorum hash for diff at h minus 4c".to_string(), )); }; - let llmq_params = quorum.llmq_type.params(); - let quorum_index = quorum_block_height % llmq_params.dkg_params.interval; - let cycle_base_height = quorum_block_height - quorum_index; - let cycle_length = llmq_params.dkg_params.interval; - for i in 0..=3 { - if let Some(work_height) = - cycle_base_height.checked_sub(i * cycle_length + WORK_DIFF_DEPTH) - { - required_heights.insert(work_height); - } - } + let cycle_length = quorum.llmq_type.params().dkg_params.interval; + let cycle_base_height = + quorum_block_height - quorum_block_height % cycle_length; + required_heights.extend( + cycle_quarter_work_heights(cycle_base_height, cycle_length) + .iter() + .flatten(), + ); } } } @@ -245,30 +236,29 @@ impl MasternodeListEngine { let llmq_params = quorum_llmq_type.params(); let num_quorums = llmq_params.signing_active_quorum_count as usize; let cycle_length = llmq_params.dkg_params.interval; - let work_block_height_for_index = |index: u32| { - cycle_base_height - .checked_sub(index * cycle_length + WORK_DIFF_DEPTH) - .ok_or(QuorumValidationError::CycleBaseHeightTooLow(cycle_base_height)) - }; + let [work_height_3c, work_height_2c, work_height_c, work_height_h] = + cycle_quarter_work_heights(cycle_base_height, cycle_length).map(|work_height| { + work_height.ok_or(QuorumValidationError::CycleBaseHeightTooLow(cycle_base_height)) + }); // Reconstruct quorum members at h - 3c from snapshot let q_h_m_3c = self.quorum_quarter_members_by_reconstruction_type( quorum_llmq_type, LLMQQuarterReconstructionType::Snapshot, - work_block_height_for_index(3)?, + work_height_3c?, chain_lock_sigs[0], )?; // Reconstruct quorum members at h - 2c from snapshot let q_h_m_2c = self.quorum_quarter_members_by_reconstruction_type( quorum_llmq_type, LLMQQuarterReconstructionType::Snapshot, - work_block_height_for_index(2)?, + work_height_2c?, chain_lock_sigs[1], )?; // Reconstruct quorum members at h - c from snapshot let q_h_m_c = self.quorum_quarter_members_by_reconstruction_type( quorum_llmq_type, LLMQQuarterReconstructionType::Snapshot, - work_block_height_for_index(1)?, + work_height_c?, chain_lock_sigs[2], )?; // Determine quorum members at new index @@ -278,7 +268,7 @@ impl MasternodeListEngine { let last_quarter = self.quorum_quarter_members_by_reconstruction_type( quorum_llmq_type, reconstruction_type, - work_block_height_for_index(0)?, + work_height_h?, chain_lock_sigs[3], )?; let mut quorum_members = From 3299a0c05cbe64c3331e751d2482f06bf89a22a7 Mon Sep 17 00:00:00 2001 From: xdustinface Date: Tue, 11 Aug 2026 00:22:18 +1000 Subject: [PATCH 23/36] fix(dash): check the presumed quorum height for overflow The presumed height of an unresolved rotated quorum is derived from a wire-supplied quorum index and work height, the one unchecked addition in a function that is otherwise checked throughout. An overflow now skips the hypothesis check for that quorum, like an unusable index already does. --- dash/src/sml/masternode_list_engine/mod.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/dash/src/sml/masternode_list_engine/mod.rs b/dash/src/sml/masternode_list_engine/mod.rs index 72f05a86d..2e0cbe3c5 100644 --- a/dash/src/sml/masternode_list_engine/mod.rs +++ b/dash/src/sml/masternode_list_engine/mod.rs @@ -888,7 +888,12 @@ impl MasternodeListEngine { else { continue; }; - let presumed_height = newest_work_height + WORK_DIFF_DEPTH + quorum_index; + let Some(presumed_height) = WORK_DIFF_DEPTH + .checked_add(quorum_index) + .and_then(|offset| newest_work_height.checked_add(offset)) + else { + continue; + }; if let Some(block_hash) = self.block_container.get_hash(&presumed_height) && *block_hash != quorum.quorum_hash { From abcc8ed7e3ce47ec787ed0c12b1babe69ff6a8c2 Mon Sep 17 00:00:00 2001 From: xdustinface Date: Tue, 11 Aug 2026 00:25:00 +1000 Subject: [PATCH 24/36] docs(dash): describe the per-quorum signature mechanism the diffs feed The `MissingRotationChainLockSigs` doc still described the deleted per-diff rotation signature, and `qr_info_referenced_block_hashes` claimed to name every hash the feed needs while a straggler's cycle base block is not carried in the message at all. `feed_qr_info_does_not_store_cycle_when_rotation_sigs_missing` derived its expected cycle key from the index-0 commitment, which only coincidentally matches the key production computes, and the two rotation-status tests in `validation.rs` had converged on the same assertions after the batch error path was removed. --- dash/src/sml/llmq_entry_verification.rs | 10 +++--- dash/src/sml/masternode_list_engine/mod.rs | 31 +++++++++++------- .../sml/masternode_list_engine/validation.rs | 32 ++++++------------- 3 files changed, 34 insertions(+), 39 deletions(-) diff --git a/dash/src/sml/llmq_entry_verification.rs b/dash/src/sml/llmq_entry_verification.rs index 3054834e7..bec73d58f 100644 --- a/dash/src/sml/llmq_entry_verification.rs +++ b/dash/src/sml/llmq_entry_verification.rs @@ -25,11 +25,11 @@ pub enum LLMQEntryVerificationSkipStatus { /// fetch. MissingChainLock(CoreBlockHeight, BlockHash), /// The quorum entry came through without an attached - /// `VerifyingChainLockSignaturesType::Rotating`. Typically happens when - /// a QRInfo's historical diff covers a block range in which no rotating - /// DKG successfully committed, so `apply_diff` extracts no - /// `rotation_sig` and `feed_qr_info` can't populate the 4-sig tuple for - /// the quorums in `lastCommitmentPerIndex`. + /// `VerifyingChainLockSignaturesType::Rotating`. Each of the four quarter + /// signatures is looked up by the work height of its quarter in the + /// `quorumsCLSigs` mapping the QRInfo's diffs carry, so a QRInfo that + /// covers none of a quorum's quarter work blocks, or whose quorum hash + /// heights are unknown, leaves the 4-sig tuple unpopulated. MissingRotationChainLockSigs(QuorumHash), /// A specific rotation chain-lock signature at offset `h - n` was not /// present for the masternode diff at the given block hash. The first diff --git a/dash/src/sml/masternode_list_engine/mod.rs b/dash/src/sml/masternode_list_engine/mod.rs index 2e0cbe3c5..53117a4fb 100644 --- a/dash/src/sml/masternode_list_engine/mod.rs +++ b/dash/src/sml/masternode_list_engine/mod.rs @@ -696,6 +696,14 @@ impl MasternodeListEngine { /// carried in the QRInfo. Rotating quorum hashes from every diff are included /// because each quorum's cycle base, and with it the work block its ChainLock /// signature belongs to, is derived from that hash's height. + /// + /// These hashes are what the QRInfo itself names, which is not everything + /// the feed can need. The cycle base block of a straggler from an older + /// cycle keys that cycle in storage, yet the QRInfo carries no hash for + /// it, so no enumeration over the message can produce it. A caller + /// holding its own header chain should additionally feed the heights + /// around each work block, as dash-spv does with + /// `work_height + WORK_DIFF_DEPTH`. pub fn qr_info_referenced_block_hashes(qr_info: &QRInfo) -> BTreeSet { let mut hashes = BTreeSet::new(); @@ -2415,8 +2423,9 @@ mod tests { let (mut engine, mut qr_info) = load_qrinfo_2240504_fixture(); // The post-V20 strict check requires every `new_quorums` slot to have - // a matching `quorums_chainlock_signatures` entry; clearing both keeps - // `apply_diff` happy while ensuring no per-diff rotating sig is captured. + // a matching `quorums_chainlock_signatures` entry, so clearing both + // keeps `apply_diff` happy while leaving no signature that could be + // keyed to a quarter work height. let strip = |diff: &mut MnListDiff| { diff.new_quorums.clear(); diff.quorums_chainlock_signatures.clear(); @@ -2433,13 +2442,13 @@ mod tests { strip(diff); } - // The cycle key from `last_commitment_per_index` must still be present - // so the post-feed assertion is meaningful. - let expected_cycle_key = qr_info - .last_commitment_per_index - .first() - .map(|q| q.quorum_hash) - .expect("fixture has rotation commitments"); + let entries: Vec = + qr_info.last_commitment_per_index.iter().cloned().map(Into::into).collect(); + let expected_cycle_key = engine + .active_set_cycle_hash(entries.iter()) + .expect("fixture must resolve the cycle key of its active set"); + let entry_hash = + entries.first().expect("fixture has rotation commitments").quorum_entry.quorum_hash; let isd_type = engine.network.isd_llmq_type(); @@ -2461,7 +2470,7 @@ mod tests { let entry_status = engine .quorum_statuses .get(&isd_type) - .and_then(|m| m.get(&expected_cycle_key)) + .and_then(|m| m.get(&entry_hash)) .map(|(_, _, status)| status.clone()); assert!( matches!( @@ -2471,7 +2480,7 @@ mod tests { )) ), "expected MissingRotationChainLockSigs skip for {}, got {:?}", - expected_cycle_key, + entry_hash, entry_status ); } diff --git a/dash/src/sml/masternode_list_engine/validation.rs b/dash/src/sml/masternode_list_engine/validation.rs index abd5416b8..32f2e07fd 100644 --- a/dash/src/sml/masternode_list_engine/validation.rs +++ b/dash/src/sml/masternode_list_engine/validation.rs @@ -211,40 +211,26 @@ mod tests { let broken_hash = QuorumHash::from_byte_array([1; 32]); let unknown_hash = QuorumHash::from_byte_array([2; 32]); + let second_unknown_hash = QuorumHash::from_byte_array([3; 32]); let broken = rotating_quorum(broken_hash, 0, false); let unknown_block = rotating_quorum(unknown_hash, 1, true); + let second_unknown_block = rotating_quorum(second_unknown_hash, 2, true); - let statuses = - engine.validate_rotation_cycle_quorums_validation_statuses(&[&broken, &unknown_block]); + let statuses = engine.validate_rotation_cycle_quorums_validation_statuses(&[ + &broken, + &unknown_block, + &second_unknown_block, + ]); assert!( matches!(statuses.get(&broken_hash), Some(LLMQEntryVerificationStatus::Invalid(_))), "structurally-broken quorum must keep an Invalid status, got {:?}", statuses.get(&broken_hash), ); - assert!( - matches!(statuses.get(&unknown_hash), Some(LLMQEntryVerificationStatus::Skipped(_))), - "infrastructure-error quorum must surface as Skipped, got {:?}", - statuses.get(&unknown_hash), - ); - } - - #[test] - fn rotation_cycle_statuses_classify_all_quorums_as_skipped_when_no_pre_existing_invalid() { - let engine = MasternodeListEngine::default(); - - let hash_a = QuorumHash::from_byte_array([3; 32]); - let hash_b = QuorumHash::from_byte_array([4; 32]); - let quorum_a = rotating_quorum(hash_a, 0, true); - let quorum_b = rotating_quorum(hash_b, 1, true); - - let statuses = - engine.validate_rotation_cycle_quorums_validation_statuses(&[&quorum_a, &quorum_b]); - - for hash in [hash_a, hash_b] { + for hash in [unknown_hash, second_unknown_hash] { assert!( matches!(statuses.get(&hash), Some(LLMQEntryVerificationStatus::Skipped(_))), - "every quorum must be Skipped when find_rotated_masternodes_for_quorums errors and no entry was pre-marked Invalid, got {:?} for {:?}", + "each unresolvable quorum must surface as Skipped on its own, got {:?} for {:?}", statuses.get(&hash), hash, ); From 1b5a2f8a096260a16d3a6a40d6bf07d6b3da5b66 Mon Sep 17 00:00:00 2001 From: xdustinface Date: Tue, 11 Aug 2026 00:26:32 +1000 Subject: [PATCH 25/36] refactor(dash): tidy the rotation log strings and test block feeding Rewords three log messages that used a semicolon as a clause separator, routes two tests through `MasternodeListEngine::feed_block_height` instead of reaching into the block container, and drops the block hash alongside the height in the inferred-signature test so it simulates a state the container can actually be in. --- dash/src/sml/masternode_list_engine/mod.rs | 10 +++++----- .../rotated_quorum_construction.rs | 4 ++-- dash/src/sml/masternode_list_engine/validation.rs | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/dash/src/sml/masternode_list_engine/mod.rs b/dash/src/sml/masternode_list_engine/mod.rs index 53117a4fb..d969515ad 100644 --- a/dash/src/sml/masternode_list_engine/mod.rs +++ b/dash/src/sml/masternode_list_engine/mod.rs @@ -617,7 +617,7 @@ impl MasternodeListEngine { LLMQEntryVerificationStatus::Invalid(_) => { invalid_count += 1; tracing::warn!( - "Previous-cycle quorum {} at cycle {} failed validation ({}); leaving it out", + "Previous-cycle quorum {} at cycle {} failed validation ({}), leaving it out", entry.quorum_entry.quorum_hash, cycle_hash, entry.verified @@ -625,7 +625,7 @@ impl MasternodeListEngine { } _ => { tracing::debug!( - "Previous-cycle quorum {} at cycle {} could not be validated ({}); leaving it out", + "Previous-cycle quorum {} at cycle {} could not be validated ({}), leaving it out", entry.quorum_entry.quorum_hash, cycle_hash, entry.verified @@ -1199,7 +1199,7 @@ impl MasternodeListEngine { &rotated_quorum.quorum_entry, ) { tracing::warn!( - "Rotated quorum {} failed validation ({}) under inferred quarter signatures; skipping it", + "Rotated quorum {} failed validation ({}) under inferred quarter signatures, skipping it", rotated_quorum.quorum_entry.quorum_hash, e ); @@ -1771,7 +1771,7 @@ mod tests { fn engine_knowing_blocks(blocks: &[(CoreBlockHeight, BlockHash)]) -> MasternodeListEngine { let mut engine = MasternodeListEngine::default_for_network(Network::Mainnet); for (height, block_hash) in blocks { - engine.block_container.feed_block_height(*height, *block_hash); + engine.feed_block_height(*height, *block_hash); } engine } @@ -2560,7 +2560,7 @@ mod tests { let MasternodeListEngineBlockContainer::BTreeMapContainer(container) = &mut engine.block_container; for height in 2239488..2239488 + 32 { - if let Some(block_hash) = container.block_hashes.get(&height).copied() { + if let Some(block_hash) = container.block_hashes.remove(&height) { container.block_heights.remove(&block_hash); } } diff --git a/dash/src/sml/masternode_list_engine/rotated_quorum_construction.rs b/dash/src/sml/masternode_list_engine/rotated_quorum_construction.rs index 2e9199e49..8d17012ba 100644 --- a/dash/src/sml/masternode_list_engine/rotated_quorum_construction.rs +++ b/dash/src/sml/masternode_list_engine/rotated_quorum_construction.rs @@ -620,8 +620,8 @@ mod tests { let mut engine = MasternodeListEngine::default_for_network(Network::Mainnet); let negative_index_hash = QuorumHash::from_byte_array([1; 32]); let index_above_height_hash = QuorumHash::from_byte_array([2; 32]); - engine.block_container.feed_block_height(1000, negative_index_hash); - engine.block_container.feed_block_height(3, index_above_height_hash); + engine.feed_block_height(1000, negative_index_hash); + engine.feed_block_height(3, index_above_height_hash); let quorums = [rotated_quorum(negative_index_hash, -1), rotated_quorum(index_above_height_hash, 5)]; diff --git a/dash/src/sml/masternode_list_engine/validation.rs b/dash/src/sml/masternode_list_engine/validation.rs index 32f2e07fd..0083ed73d 100644 --- a/dash/src/sml/masternode_list_engine/validation.rs +++ b/dash/src/sml/masternode_list_engine/validation.rs @@ -65,7 +65,7 @@ impl MasternodeListEngine { "expected quorum hash not present".to_string(), ))? .as_ref() - .map_err(|e| e.clone())?; + .map_err(Clone::clone)?; quorum.validate(masternodes.iter().enumerate().filter_map( |(i, qualified_masternode_list_entry)| { if *quorum.quorum_entry.signers.get(i)? { From 9dd347fbc623f81a2a0cd53979ca3db508deb098 Mon Sep 17 00:00:00 2001 From: xdustinface Date: Wed, 12 Aug 2026 16:41:39 +1000 Subject: [PATCH 26/36] fix(dash): require the full active set before reporting a cycle verified `all_fully_verified` compared the verified count against the number of rotated quorums a peer served, and that length is peer-controlled. A peer serving a truncated but genuine `lastCommitmentPerIndex` therefore passed the trust gate, which lets a caller record the cycle as done and stop asking for the rest of it, leaving InstantSend locks from the omitted indices unverifiable for the remainder of the cycle. `QRInfoFeedResult` now carries `expected_rotated_quorum_count`, the active quorum count of the network's rotation quorum type, and the gate additionally requires the served set to cover it. Storage keeps merging verified entries per quorum index, so a later QRInfo carrying the missing indices still completes the cycle. --- dash/src/sml/masternode_list_engine/mod.rs | 42 ++++++++++++++++++---- 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/dash/src/sml/masternode_list_engine/mod.rs b/dash/src/sml/masternode_list_engine/mod.rs index d969515ad..a1870a375 100644 --- a/dash/src/sml/masternode_list_engine/mod.rs +++ b/dash/src/sml/masternode_list_engine/mod.rs @@ -49,6 +49,10 @@ pub const WORK_DIFF_DEPTH: u32 = 8; pub struct QRInfoFeedResult { /// Total number of rotated quorums in `last_commitment_per_index`. pub rotated_quorum_count: usize, + /// Rotated quorums an active set of this network's rotation quorum type + /// holds. The length a peer serves is peer-controlled, so a set shorter + /// than this covers only part of the cycle however well it verifies. + pub expected_rotated_quorum_count: usize, /// Rotated quorums for which no cached `QualifiedQuorumEntry` existed and one /// was constructed fresh. Incremented independently of `verify_rotated_quorums` /// and the final verification outcome. Pair with `fully_verified_count` to @@ -79,13 +83,18 @@ pub struct QRInfoFeedResult { } impl QRInfoFeedResult { - /// Returns true when every rotated quorum in this QRInfo settled as - /// `LLMQEntryVerificationStatus::Verified`, the exact condition under which - /// `feed_qr_info` stores the cycle in `rotated_quorums_per_cycle`. Use this - /// as the trust gate for callers that need to know the cycle is fully - /// validated. + /// Returns true when this QRInfo proved the whole active rotation set: + /// it carried every quorum of the set and each one settled as + /// `LLMQEntryVerificationStatus::Verified`. Use this as the trust gate for + /// callers that need to know the cycle is fully validated. + /// + /// A peer serving a shorter set leaves the omitted indices unproven, and + /// treating that as a validated cycle would stop a caller from asking for + /// the rest until the next cycle, so the length is part of the gate. pub fn all_fully_verified(&self) -> bool { - self.rotated_quorum_count > 0 && self.fully_verified_count == self.rotated_quorum_count + self.expected_rotated_quorum_count > 0 + && self.rotated_quorum_count == self.expected_rotated_quorum_count + && self.fully_verified_count == self.rotated_quorum_count } } @@ -1364,6 +1373,7 @@ impl MasternodeListEngine { { Ok(Some(QRInfoFeedResult { rotated_quorum_count, + expected_rotated_quorum_count: rotation_quorum_type.active_quorum_count() as usize, newly_qualified_count, fully_verified_count, stored_cycle_height, @@ -2202,6 +2212,26 @@ mod tests { .all(|q| matches!(q.verified, LLMQEntryVerificationStatus::Verified)), "every stored previous-cycle quorum must be verified" ); + + // How many commitments a peer serves is up to the peer. A set one + // entry short still verifies entry by entry, yet the index it omits + // stays unproven, so the cycle must not read as fully validated. + let (mut engine, mut qr_info) = load_qrinfo_2518986_fixture(); + qr_info.last_commitment_per_index.pop().expect("fixture must carry commitments"); + let feed_result = engine + .feed_qr_info(qr_info, true, true) + .expect("a truncated active set must still feed cleanly") + .expect("expected a feed result"); + assert_eq!(feed_result.rotated_quorum_count, 31); + assert_eq!( + feed_result.fully_verified_count, 31, + "every served entry of the truncated set must still verify" + ); + assert_eq!(feed_result.expected_rotated_quorum_count, 32); + assert!( + !feed_result.all_fully_verified(), + "a set covering part of the cycle must not read as fully verified" + ); } /// A rotated quorum's ChainLock signature is keyed by its own cycle base, From a38b6250c0dd15040f41a5580309d5fcf4133553 Mon Sep 17 00:00:00 2001 From: xdustinface Date: Wed, 12 Aug 2026 16:45:09 +1000 Subject: [PATCH 27/36] fix(dash): report an active set whose cycle key cannot be resolved A fully verified active set whose cycle base no entry resolves was dropped without a trace: the storage call sat behind an `if let` with no else, so nothing was stored while the result still reported every quorum verified. The two states need different responses, a blocked storage gate wants better data from the peer while an unresolvable key wants more block heights from the caller, and neither was distinguishable. `feed_qr_info` now resolves the cycle key once for both branches, warns when the served set yields none, and reports it as `cycle_key_unresolved` on `QRInfoFeedResult`. --- dash-spv/src/sync/masternodes/sync_manager.rs | 4 +- dash/src/sml/masternode_list_engine/mod.rs | 56 +++++++++++++++++-- 2 files changed, 53 insertions(+), 7 deletions(-) diff --git a/dash-spv/src/sync/masternodes/sync_manager.rs b/dash-spv/src/sync/masternodes/sync_manager.rs index 528071036..ba20b31b7 100644 --- a/dash-spv/src/sync/masternodes/sync_manager.rs +++ b/dash-spv/src/sync/masternodes/sync_manager.rs @@ -296,11 +296,13 @@ impl SyncManager for MasternodesManager { if let Some(ref qr_info_result) = qr_info_result { tracing::info!( - "QRInfo processed: stored_cycle_height={:?}, rotated_quorum_count={}, fully_verified_count={}, newly_qualified_count={}, previous_cycle_invalid_count={}", + "QRInfo processed: stored_cycle_height={:?}, rotated_quorum_count={}/{}, fully_verified_count={}, newly_qualified_count={}, cycle_key_unresolved={}, previous_cycle_invalid_count={}", qr_info_result.stored_cycle_height, qr_info_result.rotated_quorum_count, + qr_info_result.expected_rotated_quorum_count, qr_info_result.fully_verified_count, qr_info_result.newly_qualified_count, + qr_info_result.cycle_key_unresolved, qr_info_result.previous_cycle_invalid_count, ); // If every rotated quorum in this QRInfo ended up Verified, diff --git a/dash/src/sml/masternode_list_engine/mod.rs b/dash/src/sml/masternode_list_engine/mod.rs index a1870a375..055802465 100644 --- a/dash/src/sml/masternode_list_engine/mod.rs +++ b/dash/src/sml/masternode_list_engine/mod.rs @@ -69,9 +69,15 @@ pub struct QRInfoFeedResult { /// the storage gate fired and the cycle was inserted into /// `rotated_quorums_per_cycle`. `None` when storage was skipped because /// `last_commitment_per_index` was empty, the gate blocked the write, or - /// the cycle hash had no resolvable height. The cycle stored by + /// the cycle key was unresolvable, which `cycle_key_unresolved` + /// distinguishes from the other two. The cycle stored by /// `validate_and_store_previous_cycle_quorums` is not reflected here. pub stored_cycle_height: Option, + /// `true` when the served active set has no resolvable cycle base, which + /// leaves the feed without a key to store the cycle under however well it + /// verified. Distinguishes that from a `stored_cycle_height` of `None` + /// caused by the storage gate refusing the write. + pub cycle_key_unresolved: bool, /// Previous-cycle rotated quorums that failed validation outright and were /// left out of the cycle stored by /// `validate_and_store_previous_cycle_quorums`. That path is best-effort @@ -1171,6 +1177,18 @@ impl MasternodeListEngine { }) .collect::, QuorumValidationError>>()?; + #[cfg(feature = "quorum_validation")] + let cycle_key = self.active_set_cycle_hash(qualified_last_commitment_per_index.iter()); + #[cfg(feature = "quorum_validation")] + let cycle_key_unresolved = cycle_key.is_none() && rotated_quorum_count > 0; + #[cfg(feature = "quorum_validation")] + if cycle_key_unresolved { + tracing::warn!( + "None of the {} rotated quorums served resolves a cycle base, so the cycle cannot be stored under any key", + rotated_quorum_count + ); + } + #[cfg(feature = "quorum_validation")] if verify_rotated_quorums { let mut updates: Vec<( @@ -1223,8 +1241,6 @@ impl MasternodeListEngine { } } - let cycle_key = self.active_set_cycle_hash(qualified_last_commitment_per_index.iter()); - for rotated_quorum in qualified_last_commitment_per_index.iter() { let masternode_lists_having_quorum_hash_for_quorum_type = self.quorum_statuses.entry(rotated_quorum.quorum_entry.llmq_type).or_default(); @@ -1348,9 +1364,7 @@ impl MasternodeListEngine { } } } - } else if let Some(cycle_key) = - self.active_set_cycle_hash(qualified_last_commitment_per_index.iter()) - { + } else if let Some(cycle_key) = cycle_key { fully_verified_count = qualified_last_commitment_per_index .iter() .filter(|q| matches!(q.verified, LLMQEntryVerificationStatus::Verified)) @@ -1374,6 +1388,7 @@ impl MasternodeListEngine { Ok(Some(QRInfoFeedResult { rotated_quorum_count, expected_rotated_quorum_count: rotation_quorum_type.active_quorum_count() as usize, + cycle_key_unresolved, newly_qualified_count, fully_verified_count, stored_cycle_height, @@ -2515,6 +2530,35 @@ mod tests { ); } + /// An active set whose cycle base no entry resolves cannot be stored under + /// any key, however well it verified. The caller has to be able to tell + /// that apart from the storage gate refusing a degraded cycle, because + /// only the former is fixed by feeding more block heights. + #[cfg(feature = "quorum_validation")] + #[test] + fn feed_qr_info_reports_an_unresolvable_cycle_key() { + let (mut engine, qr_info) = load_qrinfo_2240504_fixture(); + + let MasternodeListEngineBlockContainer::BTreeMapContainer(container) = + &mut engine.block_container; + for quorum in qr_info.last_commitment_per_index.iter() { + if let Some(height) = container.block_heights.remove(&quorum.quorum_hash) { + container.block_hashes.remove(&height); + } + } + + let feed_result = engine + .feed_qr_info(qr_info, false, false) + .expect("an unresolvable cycle key must not abort the feed") + .expect("expected a feed result"); + + assert!(feed_result.cycle_key_unresolved, "the unresolvable cycle key must be reported"); + assert!( + feed_result.stored_cycle_height.is_none(), + "a cycle without a key must not be stored" + ); + } + /// A QRInfo whose rotated quorum carries a corrupt /// `all_commitment_aggregated_signature` must be rejected with /// `AllCommitmentAggregatedSignatureNotValid` rather than silently From 51e0981c738e09bde74ffb154e195ff37a1ed29f Mon Sep 17 00:00:00 2001 From: xdustinface Date: Wed, 12 Aug 2026 16:48:53 +1000 Subject: [PATCH 28/36] fix(dash): reject a rotated quorum index that misplaces its cycle base Rotation ChainLock signatures are keyed by the work block of the cycle a quorum belongs to, and that cycle base is derived as the commitment block height minus the `quorum_index` the peer sent. Nothing tied the index to the block, so a shifted one moved the base into another cycle and let one crafted entry replace the genuine signature keyed at that cycle's work block, which rebuilds the wrong member set for every quorum of the cycle it hit. `rotated_quorum_cycle_base` now accepts an index only while it names a slot of the active set and lands the base on a DKG interval boundary, which together leave no shift that resolves. An entry failing the check contributes no exact key and falls back to the elimination pass like any other unresolvable one. --- dash/src/sml/masternode_list_engine/mod.rs | 38 +++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/dash/src/sml/masternode_list_engine/mod.rs b/dash/src/sml/masternode_list_engine/mod.rs index 055802465..c0f174b52 100644 --- a/dash/src/sml/masternode_list_engine/mod.rs +++ b/dash/src/sml/masternode_list_engine/mod.rs @@ -963,10 +963,21 @@ impl MasternodeListEngine { /// Cycle base height (the height of the quorum-index-0 block) for a /// rotated quorum, derived from the quorum's own hash and index. + /// + /// The index arrives from the wire and nothing ties it to the block the + /// commitment was mined in, so it is only accepted while it names a slot + /// of the active set and lands the base on a DKG interval boundary. Any + /// other index shifts the base into a cycle the quorum does not belong + /// to, and a base derived from that keys another cycle's work block. #[cfg(feature = "quorum_validation")] fn rotated_quorum_cycle_base(&self, quorum: &QuorumEntry) -> Option { let height = self.block_container.get_height(&quorum.quorum_hash)?; - rotated_cycle_base_height(height, quorum.quorum_index?) + let quorum_index = quorum.quorum_index?; + if u32::try_from(quorum_index).ok()? >= quorum.llmq_type.active_quorum_count() { + return None; + } + let cycle_base = rotated_cycle_base_height(height, quorum_index)?; + (cycle_base % quorum.llmq_type.params().dkg_params.interval == 0).then_some(cycle_base) } /// The four quarter work block heights for the cycle a rotated quorum @@ -1839,6 +1850,31 @@ mod tests { assert_eq!(sigs, BTreeMap::from([(work_height, sig)])); assert!(inferred.is_empty(), "a known quorum height must key exactly"); + // Nothing on the wire ties a `quorum_index` to the block its + // commitment was mined in. Index 4 moves the base one block off the + // cycle boundary, index 3 + c moves it a whole cycle back onto the + // older cycle's work block, and either one exactly-keying would + // replace a genuine signature with this group's. + for shifted_index in [4, 3 + interval as i16] { + let shifted = make_cl_sig_diff( + end_hash, + vec![make_quorum_entry(isd_type, quorum_hash, Some(shifted_index))], + vec![(sig, vec![0])], + ); + let (sigs, inferred) = engine.rotation_cl_sigs_by_work_height([&shifted]); + assert_eq!( + sigs, + BTreeMap::from([(work_height, sig)]), + "index {} must not key a work block of its own choosing", + shifted_index + ); + assert_eq!( + inferred, + BTreeSet::from([work_height]), + "a rejected index leaves only the diff's own cycle to key by elimination" + ); + } + // Without that height the only remaining group is keyed by // elimination, and the caller is told the key was inferred. let engine = engine_knowing_blocks(&[(diff_end, end_hash)]); From b0be898d4dbf1cedacfbba007b03ad4e32da1ad3 Mon Sep 17 00:00:00 2001 From: xdustinface Date: Wed, 12 Aug 2026 16:53:30 +1000 Subject: [PATCH 29/36] fix(dash): cache only a rotated cycle's successful member reconstruction The per-cycle reconstruction cache was filled by whichever quorum of a cycle came first, including when that quorum carried no rotation ChainLock signatures at all. The resulting `RequiredRotatedChainLockSigsNotPresent` was then handed to every sibling of the cycle, so one entry served without signatures made the whole cycle unverifiable even though its siblings carried everything their own verification needs. Only a successful reconstruction is cached now. A quorum that carries no signatures fails on its own account and leaves the cycle open. --- .../rotated_quorum_construction.rs | 106 +++++++++++++----- 1 file changed, 78 insertions(+), 28 deletions(-) diff --git a/dash/src/sml/masternode_list_engine/rotated_quorum_construction.rs b/dash/src/sml/masternode_list_engine/rotated_quorum_construction.rs index 8d17012ba..e043f59f4 100644 --- a/dash/src/sml/masternode_list_engine/rotated_quorum_construction.rs +++ b/dash/src/sml/masternode_list_engine/rotated_quorum_construction.rs @@ -15,6 +15,7 @@ use crate::sml::quorum_entry::qualified_quorum_entry::{ }; use crate::sml::quorum_entry::quorum_modifier_type::LLMQModifierType; use crate::sml::quorum_validation_error::QuorumValidationError; +use std::collections::btree_map::Entry; use std::collections::{BTreeMap, BTreeSet}; impl MasternodeListEngine { @@ -93,10 +94,8 @@ impl MasternodeListEngine { ) -> BTreeMap, QuorumValidationError>> { let mut members_by_quorum_hash = BTreeMap::new(); - let mut cycles: BTreeMap< - CoreBlockHeight, - Result>, QuorumValidationError>, - > = BTreeMap::new(); + let mut cycles: BTreeMap>> = + BTreeMap::new(); for quorum in quorums { let quorum_hash = quorum.quorum_entry.quorum_hash; let Some(quorum_block_height) = self.block_container.get_height(&quorum_hash) else { @@ -129,31 +128,44 @@ impl MasternodeListEngine { ); continue; }; - // Quorums of one cycle share their quarter signatures, so the - // reconstruction result is cached per cycle base height. - let members_by_index = cycles.entry(cycle_base_height).or_insert_with(|| { - let Some(VerifyingChainLockSignaturesType::Rotating(rotating)) = - quorum.verifying_chain_lock_signature - else { - return Err(QuorumValidationError::RequiredRotatedChainLockSigsNotPresent( - quorum_hash, - )); - }; - self.masternode_list_entry_members_for_rotated_quorum( - llmq_type, - cycle_base_height, - rotating, - ) - }); - let result = match members_by_index { - Ok(members_by_index) => members_by_index.get(quorum_index as usize).cloned().ok_or( - QuorumValidationError::CorruptedCodeExecution(format!( - "expected masternode list entry members for {}", - quorum_index - )), - ), - Err(e) => Err(e.clone()), + // Quorums of one cycle share their quarter signatures, so a + // reconstruction is cached per cycle base height. Only a + // successful one is cached: a quorum that carries no signatures + // fails on its own account and must leave the cycle open for the + // siblings that do carry them. + let members_by_index = match cycles.entry(cycle_base_height) { + Entry::Occupied(cached) => cached.into_mut(), + Entry::Vacant(slot) => { + let Some(VerifyingChainLockSignaturesType::Rotating(rotating)) = + quorum.verifying_chain_lock_signature + else { + members_by_quorum_hash.insert( + quorum_hash, + Err(QuorumValidationError::RequiredRotatedChainLockSigsNotPresent( + quorum_hash, + )), + ); + continue; + }; + match self.masternode_list_entry_members_for_rotated_quorum( + llmq_type, + cycle_base_height, + rotating, + ) { + Ok(members_by_index) => slot.insert(members_by_index), + Err(e) => { + members_by_quorum_hash.insert(quorum_hash, Err(e)); + continue; + } + } + } }; + let result = members_by_index.get(quorum_index as usize).cloned().ok_or( + QuorumValidationError::CorruptedCodeExecution(format!( + "expected masternode list entry members for {}", + quorum_index + )), + ); members_by_quorum_hash.insert(quorum_hash, result); } @@ -650,6 +662,44 @@ mod tests { } } + /// Every quorum of a cycle resolves the member sets from its own quarter + /// signatures, and one that carries none cannot stand in for the cycle. + /// Caching its failure would leave every sibling unverifiable on a + /// commitment the sibling itself has everything to verify. + #[test] + fn a_quorum_without_rotating_signatures_leaves_its_cycle_open() { + let mut engine = MasternodeListEngine::default_for_network(Network::Mainnet); + let cycle_base = LLMQType::Llmqtype60_75.params().dkg_params.interval * 100; + let without_sigs_hash = QuorumHash::from_byte_array([1; 32]); + let with_sigs_hash = QuorumHash::from_byte_array([2; 32]); + engine.feed_block_height(cycle_base, without_sigs_hash); + engine.feed_block_height(cycle_base + 1, with_sigs_hash); + + let mut with_sigs = rotated_quorum(with_sigs_hash, 1); + with_sigs.verifying_chain_lock_signature = + Some(VerifyingChainLockSignaturesType::Rotating([BLSSignature::from([1; 96]); 4])); + let quorums = [rotated_quorum(without_sigs_hash, 0), with_sigs]; + let borrowed: Vec<&QualifiedQuorumEntry> = quorums.iter().collect(); + + let results = engine.find_rotated_masternodes_for_quorums(&borrowed); + assert!( + matches!( + results.get(&without_sigs_hash), + Some(Err(QuorumValidationError::RequiredRotatedChainLockSigsNotPresent(_))) + ), + "a quorum without signatures must fail on its own account, got {:?}", + results.get(&without_sigs_hash) + ); + assert!( + matches!( + results.get(&with_sigs_hash), + Some(Err(QuorumValidationError::RequiredBlockHeightNotPresent(_))) + ), + "a sibling carrying signatures must reach the reconstruction, got {:?}", + results.get(&with_sigs_hash) + ); + } + #[test] fn no_skipping_fills_quarters_with_circular_wrap_around() { let entries: Vec = (1..=6).map(entry).collect(); From a98de13ea5cc6b492d8af63abd7e2505c20f3855 Mon Sep 17 00:00:00 2001 From: xdustinface Date: Wed, 12 Aug 2026 17:03:15 +1000 Subject: [PATCH 30/36] fix(dash): stop blaming a peer for an inferred previous-cycle signature A rotation ChainLock signature whose work block was keyed by elimination can belong to a different cycle, which reconstructs the wrong member set and fails the aggregate check on genuine data. The current-cycle path already degrades such a quorum to `Skipped(InferredRotationChainLockSigs)`, but the previous-cycle path counted every failure into `previous_cycle_invalid_count`, the one signal a caller has for judging the peer that served the commitments. On a fresh sync the oldest quarters of the previous cycle are routinely keyed by elimination, so the count reported our own missing context as corruption. `validate_and_store_previous_cycle_quorums` now takes the inferred work heights and settles a failure resting on one as skipped without counting it. --- dash/src/sml/masternode_list_engine/mod.rs | 73 +++++++++++++++++++++- 1 file changed, 71 insertions(+), 2 deletions(-) diff --git a/dash/src/sml/masternode_list_engine/mod.rs b/dash/src/sml/masternode_list_engine/mod.rs index c0f174b52..2847c27ee 100644 --- a/dash/src/sml/masternode_list_engine/mod.rs +++ b/dash/src/sml/masternode_list_engine/mod.rs @@ -83,7 +83,7 @@ pub struct QRInfoFeedResult { /// `validate_and_store_previous_cycle_quorums`. That path is best-effort /// enrichment and never fails the feed, so this is the only signal a /// caller gets that a peer served rotated commitments which do not verify. - /// Entries left out for missing context are not counted, and + /// Entries left out for missing or inferred context are not counted, and /// `all_fully_verified` is unaffected: it reports on the current cycle. pub previous_cycle_invalid_count: usize, } @@ -604,12 +604,15 @@ impl MasternodeListEngine { /// /// Returns how many entries were left out for failing validation outright, /// as opposed to lacking the context to be validated at all, so the caller - /// can judge the peer that served them. + /// can judge the peer that served them. A failure under a quarter + /// signature keyed by elimination is a gap in that context too and is not + /// counted. #[cfg(feature = "quorum_validation")] fn validate_and_store_previous_cycle_quorums( &mut self, work_block_hash: BlockHash, sigs_by_work_height: &BTreeMap, + inferred_work_heights: &BTreeSet, ) -> usize { let isd_type = self.network.isd_llmq_type(); let Some((cycle_hash, mut entries)) = @@ -629,6 +632,26 @@ impl MasternodeListEngine { .unwrap_or_default(); match entry.verified { LLMQEntryVerificationStatus::Verified => {} + // A quarter signature keyed by elimination may belong to + // another cycle, which reconstructs the wrong member set and + // fails the aggregate check. That is a gap in the supplied + // context rather than something the peer can be blamed for. + LLMQEntryVerificationStatus::Invalid(_) + if self + .quarter_sigs_are_inferred(inferred_work_heights, &entry.quorum_entry) => + { + tracing::debug!( + "Previous-cycle quorum {} at cycle {} failed validation ({}) under inferred quarter signatures, leaving it out", + entry.quorum_entry.quorum_hash, + cycle_hash, + entry.verified + ); + entry.verified = LLMQEntryVerificationStatus::Skipped( + LLMQEntryVerificationSkipStatus::InferredRotationChainLockSigs( + entry.quorum_entry.quorum_hash, + ), + ); + } LLMQEntryVerificationStatus::Invalid(_) => { invalid_count += 1; tracing::warn!( @@ -1156,6 +1179,7 @@ impl MasternodeListEngine { previous_cycle_invalid_count = self.validate_and_store_previous_cycle_quorums( work_block_hash_h, &rotation_sigs_by_work_height, + &inferred_work_heights, ); } @@ -1745,6 +1769,7 @@ mod tests { #[cfg(feature = "quorum_validation")] use { super::build_cycle_quorum_map, + super::qr_info_diffs, crate::BlockHash, crate::QuorumHash, crate::bls_sig_utils::{BLSPublicKey, BLSSignature}, @@ -2750,6 +2775,29 @@ mod tests { foreign_signature; let h_block_hash = qr_info.mn_list_diff_h.block_hash; + // The captured container has no height for the commitments of the + // cycle that keys the corrupted quorum's oldest quarter, leaving that + // quarter to the elimination pass. Feeding the height of that cycle's + // index 0 commitment keys it exactly, so the failure below is the + // peer's and not a guess of ours. + let [oldest_quarter, ..] = engine + .quarter_work_heights(&qr_info.mn_list_diff_h.new_quorums[corrupt_position]) + .expect("fixture must resolve the corrupted quorum's quarter work heights"); + let interval = engine.network.isd_llmq_type().params().dkg_params.interval; + let keying_commitment = qr_info_diffs(&qr_info) + .into_iter() + .find(|diff| { + engine.block_container.get_height(&diff.block_hash) + == Some(oldest_quarter + interval) + }) + .expect("fixture must carry the diff holding that cycle's commitments") + .new_quorums + .iter() + .find(|q| q.llmq_type.is_rotating_quorum_type() && q.quorum_index == Some(0)) + .expect("that diff must carry the cycle's index 0 commitment") + .quorum_hash; + engine.feed_block_height(oldest_quarter + WORK_DIFF_DEPTH, keying_commitment); + let feed_result = engine .feed_qr_info(qr_info, true, true) .expect("previous-cycle corruption must not abort the feed") @@ -2791,6 +2839,27 @@ mod tests { feed_result.stored_cycle_height.is_some(), "the current cycle must still be stored" ); + + // Without that height the same quarter is keyed by elimination, and a + // signature that may belong to another cycle rebuilds the wrong member + // set on its own. The identical corruption must then leave the quorum + // out without blaming the peer for it. + let (mut engine, mut qr_info) = load_qrinfo_2240504_fixture(); + qr_info.mn_list_diff_h.new_quorums[corrupt_position].all_commitment_aggregated_signature = + foreign_signature; + let feed_result = engine + .feed_qr_info(qr_info, true, true) + .expect("previous-cycle corruption must not abort the feed") + .expect("expected a feed result"); + assert_eq!( + feed_result.previous_cycle_invalid_count, 0, + "a failure under an inferred quarter signature is a gap in our context, not the peer's fault" + ); + assert_eq!( + engine.rotated_quorums_per_cycle.get(&previous_cycle_key).map(|cycle| cycle.len()), + Some(rotating_at_h - 1), + "the quorum must still be left out of the stored cycle" + ); } /// Direct coverage for the `store_cycle_if_fully_verified` storage gate. From 056973008724199d5a10abfdbe947e91c81bb576 Mon Sep 17 00:00:00 2001 From: xdustinface Date: Wed, 12 Aug 2026 17:09:31 +1000 Subject: [PATCH 31/36] fix(dash): let an unconfigured devnet take its rotation type from the wire `feed_qr_info` keys the active set by the network's configured rotation quorum type, which is right everywhere the deployed type is fixed. A devnet is deployed with whichever DIP24 type it was launched with, and without `set_devnet_isd_type` the configured type is only a guess: `build_cycle_quorum_map` then rejects every quorum index the guessed type has no slot for and the whole feed aborts. `rotation_quorum_type` keeps configuration authoritative on mainnet, testnet, regtest and on a devnet that was told its type, and falls back to the served commitments only on a devnet that was not. Only a rotating type is adopted. --- dash/src/sml/masternode_list_engine/mod.rs | 62 +++++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-) diff --git a/dash/src/sml/masternode_list_engine/mod.rs b/dash/src/sml/masternode_list_engine/mod.rs index 2847c27ee..6fbd218d1 100644 --- a/dash/src/sml/masternode_list_engine/mod.rs +++ b/dash/src/sml/masternode_list_engine/mod.rs @@ -20,6 +20,8 @@ use crate::sml::llmq_entry_verification::LLMQEntryVerificationSkipStatus; use crate::sml::llmq_entry_verification::LLMQEntryVerificationStatus; use crate::sml::llmq_type::LLMQType; #[cfg(feature = "quorum_validation")] +use crate::sml::llmq_type::devnet_isd_type_override; +#[cfg(feature = "quorum_validation")] use crate::sml::llmq_type::network::NetworkLLMQExt; use crate::sml::masternode_list::MasternodeList; use crate::sml::masternode_list::from_diff::TryIntoWithBlockHashLookup; @@ -1040,6 +1042,27 @@ impl MasternodeListEngine { }) } + /// The rotation quorum type an active set is keyed by. + /// + /// Configuration wins wherever the deployed type is fixed: wire data must + /// never decide which type this engine trusts. A devnet is deployed with + /// whichever DIP24 type it was launched with, so without an explicit + /// override there is no configured type to hold against the commitments + /// and the served ones name it instead. Guessing there rejects every + /// quorum index the guessed type has no slot for. + #[cfg(feature = "quorum_validation")] + fn rotation_quorum_type(&self, served: &[QuorumEntry]) -> LLMQType { + let configured = self.network.isd_llmq_type(); + if self.network != Network::Devnet || devnet_isd_type_override().is_some() { + return configured; + } + served + .iter() + .map(|quorum| quorum.llmq_type) + .find(|llmq_type| llmq_type.is_rotating_quorum_type()) + .unwrap_or(configured) + } + /// Cycle hash for an active rotated quorum set: the block hash at the /// newest cycle base among the entries. The entry at quorum index 0 does /// not necessarily belong to the set's own cycle (a failed DKG leaves an @@ -1126,7 +1149,7 @@ impl MasternodeListEngine { )?; #[cfg(feature = "quorum_validation")] - let rotation_quorum_type = self.network.isd_llmq_type(); + let rotation_quorum_type = self.rotation_quorum_type(&last_commitment_per_index); #[cfg(feature = "quorum_validation")] let mut stored_cycle_height: Option = None; @@ -1749,6 +1772,8 @@ mod tests { use crate::sml::llmq_type::LLMQType::{ Llmqtype50_60, Llmqtype60_75, Llmqtype400_60, Llmqtype400_85, }; + #[cfg(feature = "quorum_validation")] + use crate::sml::llmq_type::devnet_isd_type_override; use crate::sml::llmq_type::network::NetworkLLMQExt; use crate::sml::masternode_list::MasternodeList; #[cfg(feature = "quorum_validation")] @@ -1970,6 +1995,41 @@ mod tests { ); } + /// Which rotation type an active set is keyed by decides which quorum + /// indices exist at all, so a wrong one rejects genuine commitments. It + /// comes from configuration wherever the deployment fixes it, and only a + /// devnet that was never told its type reads it off the commitments. + #[cfg(feature = "quorum_validation")] + #[test] + fn rotation_quorum_type_reads_the_served_type_only_on_an_unconfigured_devnet() { + let served = + [make_quorum_entry(LLMQType::LlmqtypeTestDIP0024, QuorumHash::all_zeros(), Some(0))]; + let non_rotating = + [make_quorum_entry(LLMQType::Llmqtype50_60, QuorumHash::all_zeros(), Some(0))]; + + for network in [Network::Mainnet, Network::Testnet, Network::Regtest] { + let engine = MasternodeListEngine::default_for_network(network); + assert_eq!( + engine.rotation_quorum_type(&served), + network.isd_llmq_type(), + "a network with a deployed type must ignore what a peer serves" + ); + } + + // The devnet override is a process-wide `OnceLock` another test in + // this binary may have set, so the expectation follows it. + let engine = MasternodeListEngine::default_for_network(Network::Devnet); + assert_eq!( + engine.rotation_quorum_type(&served), + devnet_isd_type_override().unwrap_or(LLMQType::LlmqtypeTestDIP0024) + ); + assert_eq!( + engine.rotation_quorum_type(&non_rotating), + Network::Devnet.isd_llmq_type(), + "only a rotating type may be adopted from the wire" + ); + } + #[cfg(feature = "quorum_validation")] #[test] fn build_cycle_quorum_map_edge_cases() { From eeda22e587d116f5d08bb43e495f0127d72c8d98 Mon Sep 17 00:00:00 2001 From: xdustinface Date: Wed, 12 Aug 2026 17:12:57 +1000 Subject: [PATCH 32/36] refactor(dash): key rotation signatures only when the feed reads them Every `feed_qr_info` call walked all of the QRInfo's diffs, keyed each `quorumsCLSigs` group to a work block and ran the elimination pass over what was left, including on a re-feed where the engine already holds a qualified quorum for every entry of the active set and no h-4c share opens the previous cycle. The map is unread in that case. The keying is gated on either of those needing it, which is what the per-diff signature collection it replaced used to do. --- dash/src/sml/masternode_list_engine/mod.rs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/dash/src/sml/masternode_list_engine/mod.rs b/dash/src/sml/masternode_list_engine/mod.rs index 6fbd218d1..fef3ddd5f 100644 --- a/dash/src/sml/masternode_list_engine/mod.rs +++ b/dash/src/sml/masternode_list_engine/mod.rs @@ -1103,9 +1103,22 @@ impl MasternodeListEngine { #[cfg(feature = "qrinfo-capture")] self.dump_qr_info_capture(&qr_info); + // Keying every diff's signatures costs a walk over all of them plus + // the elimination pass, and nothing reads the result when the engine + // already holds a qualified quorum for every entry of the active set + // and no h-4c share opens the previous cycle for revalidation. #[cfg(feature = "quorum_validation")] let (rotation_sigs_by_work_height, inferred_work_heights) = - self.rotation_cl_sigs_by_work_height(qr_info_diffs(&qr_info)); + if qr_info.quorum_snapshot_and_mn_list_diff_at_h_minus_4c.is_some() + || qr_info + .last_commitment_per_index + .iter() + .any(|quorum_entry| self.known_qualified_quorum_entry(quorum_entry).is_none()) + { + self.rotation_cl_sigs_by_work_height(qr_info_diffs(&qr_info)) + } else { + Default::default() + }; #[allow(unused_variables)] let QRInfo { From 652a9323936e3116b4219885ebfddf5c305cdf70 Mon Sep 17 00:00:00 2001 From: xdustinface Date: Wed, 12 Aug 2026 17:16:29 +1000 Subject: [PATCH 33/36] refactor(dash): resolve a single rotated quorum through the plural path `find_rotated_masternodes_for_quorum` walked the same four-step resolution as the loop body of `find_rotated_masternodes_for_quorums`, height lookup, quorum index, cycle base and rotating signatures, and built the same errors from it. It delegates to the plural now, which also takes its per-cycle reconstruction cache along. The plural no longer ties the slice it reads to the lifetime of the members it returns, since those borrow the engine rather than the slice. --- .../rotated_quorum_construction.rs | 55 ++++--------------- 1 file changed, 10 insertions(+), 45 deletions(-) diff --git a/dash/src/sml/masternode_list_engine/rotated_quorum_construction.rs b/dash/src/sml/masternode_list_engine/rotated_quorum_construction.rs index e043f59f4..ab58321a4 100644 --- a/dash/src/sml/masternode_list_engine/rotated_quorum_construction.rs +++ b/dash/src/sml/masternode_list_engine/rotated_quorum_construction.rs @@ -34,50 +34,15 @@ impl MasternodeListEngine { &'a self, quorum: &'a QualifiedQuorumEntry, ) -> Result, QuorumValidationError> { - let Some(quorum_block_height) = - self.block_container.get_height(&quorum.quorum_entry.quorum_hash) - else { - return Err(QuorumValidationError::RequiredBlockNotPresent( - quorum.quorum_entry.quorum_hash, - "getting height when finding rotated masternodes for quorum".to_string(), - )); - }; - let llmq_type = quorum.quorum_entry.llmq_type; - let Some(quorum_index) = quorum.quorum_entry.quorum_index else { - return Err(QuorumValidationError::RequiredQuorumIndexNotPresent( - quorum.quorum_entry.quorum_hash, - )); - }; - let Some(cycle_base_height) = rotated_cycle_base_height(quorum_block_height, quorum_index) - else { - return Err(QuorumValidationError::InvalidQuorumIndex { - quorum_hash: quorum.quorum_entry.quorum_hash, - index: quorum_index, - }); - }; - - let Some(VerifyingChainLockSignaturesType::Rotating(rotating)) = - quorum.verifying_chain_lock_signature - else { - return Err(QuorumValidationError::RequiredRotatedChainLockSigsNotPresent( - quorum.quorum_entry.quorum_hash, - )); - }; - - let rotated_members = self - .masternode_list_entry_members_for_rotated_quorum( - llmq_type, - cycle_base_height, - rotating, - )? - .get(quorum_index as usize) - .ok_or(QuorumValidationError::CorruptedCodeExecution(format!( - "expected masternode list entry members for {}", - quorum_index - )))? - .clone(); - - Ok(rotated_members) + let quorum_hash = quorum.quorum_entry.quorum_hash; + self.find_rotated_masternodes_for_quorums(&[quorum]).remove(&quorum_hash).unwrap_or_else( + || { + Err(QuorumValidationError::CorruptedCodeExecution(format!( + "expected a rotated masternode result for {}", + quorum_hash + ))) + }, + ) } /// Resolves the signing member set for each rotated quorum, per quorum. @@ -90,7 +55,7 @@ impl MasternodeListEngine { #[allow(dead_code)] pub(in crate::sml::masternode_list_engine) fn find_rotated_masternodes_for_quorums<'a>( &'a self, - quorums: &'a [&'a QualifiedQuorumEntry], + quorums: &[&'a QualifiedQuorumEntry], ) -> BTreeMap, QuorumValidationError>> { let mut members_by_quorum_hash = BTreeMap::new(); From 3ea8b6e656c23af7f6e4b430503680d2d1801cba Mon Sep 17 00:00:00 2001 From: xdustinface Date: Wed, 12 Aug 2026 17:18:40 +1000 Subject: [PATCH 34/36] refactor(dash): survey a rotated quorum's quarter heights in one place Both loops of `required_cl_sig_heights` resolved a quorum's height, derived its cycle base by modulo and extended the set with the cycle's four quarter work heights, differing only in the context string of the missing-height error. That body lives in `extend_with_quarter_work_heights` now and both loops call it. --- .../rotated_quorum_construction.rs | 62 ++++++++++--------- 1 file changed, 33 insertions(+), 29 deletions(-) diff --git a/dash/src/sml/masternode_list_engine/rotated_quorum_construction.rs b/dash/src/sml/masternode_list_engine/rotated_quorum_construction.rs index ab58321a4..0058a7653 100644 --- a/dash/src/sml/masternode_list_engine/rotated_quorum_construction.rs +++ b/dash/src/sml/masternode_list_engine/rotated_quorum_construction.rs @@ -15,6 +15,7 @@ use crate::sml::quorum_entry::qualified_quorum_entry::{ }; use crate::sml::quorum_entry::quorum_modifier_type::LLMQModifierType; use crate::sml::quorum_validation_error::QuorumValidationError; +use crate::transaction::special_transaction::quorum_commitment::QuorumEntry; use std::collections::btree_map::Entry; use std::collections::{BTreeMap, BTreeSet}; @@ -153,45 +154,49 @@ impl MasternodeListEngine { ) -> Result, QuorumValidationError> { let mut required_heights = BTreeSet::new(); for quorum in &qr_info.last_commitment_per_index { - let Some(quorum_block_height) = self.block_container.get_height(&quorum.quorum_hash) - else { - return Err(QuorumValidationError::RequiredBlockNotPresent( - quorum.quorum_hash, - "getting required cl_sig heights".to_string(), - )); - }; - let cycle_length = quorum.llmq_type.params().dkg_params.interval; - let cycle_base_height = quorum_block_height - quorum_block_height % cycle_length; - required_heights.extend( - cycle_quarter_work_heights(cycle_base_height, cycle_length).iter().flatten(), - ); + self.extend_with_quarter_work_heights( + &mut required_heights, + quorum, + "getting required cl_sig heights", + )?; } // We are going to validate the previous rotation as well if qr_info.quorum_snapshot_and_mn_list_diff_at_h_minus_4c.is_some() { for quorum in &qr_info.mn_list_diff_h.new_quorums { if quorum.llmq_type.is_rotating_quorum_type() { - let Some(quorum_block_height) = - self.block_container.get_height(&quorum.quorum_hash) - else { - return Err(QuorumValidationError::RequiredBlockNotPresent( - quorum.quorum_hash, - "getting height for quorum hash for diff at h minus 4c".to_string(), - )); - }; - let cycle_length = quorum.llmq_type.params().dkg_params.interval; - let cycle_base_height = - quorum_block_height - quorum_block_height % cycle_length; - required_heights.extend( - cycle_quarter_work_heights(cycle_base_height, cycle_length) - .iter() - .flatten(), - ); + self.extend_with_quarter_work_heights( + &mut required_heights, + quorum, + "getting height for quorum hash for diff at h minus 4c", + )?; } } } Ok(required_heights) } + /// Adds the four quarter work block heights of the cycle a rotated quorum + /// sits in to `required_heights`, naming `context` if the quorum's own + /// height is missing. + fn extend_with_quarter_work_heights( + &self, + required_heights: &mut BTreeSet, + quorum: &QuorumEntry, + context: &str, + ) -> Result<(), QuorumValidationError> { + let Some(quorum_block_height) = self.block_container.get_height(&quorum.quorum_hash) else { + return Err(QuorumValidationError::RequiredBlockNotPresent( + quorum.quorum_hash, + context.to_string(), + )); + }; + let cycle_length = quorum.llmq_type.params().dkg_params.interval; + let cycle_base_height = quorum_block_height - quorum_block_height % cycle_length; + required_heights + .extend(cycle_quarter_work_heights(cycle_base_height, cycle_length).iter().flatten()); + Ok(()) + } + /// Retrieves the masternode list members responsible for a rotated quorum at the given cycle base height. /// /// # Arguments @@ -534,7 +539,6 @@ mod tests { use crate::sml::masternode_list_entry::{ EntryMasternodeType, MasternodeListEntry, MasternodeNetInfo, }; - use crate::transaction::special_transaction::quorum_commitment::QuorumEntry; use crate::{ProTxHash, PubkeyHash}; fn entry(byte: u8) -> QualifiedMasternodeListEntry { From 2abdfc8c883b8f3f2de88b855758935fb364d317 Mon Sep 17 00:00:00 2001 From: xdustinface Date: Wed, 12 Aug 2026 17:19:55 +1000 Subject: [PATCH 35/36] docs(dash): state the extra heights a caller feeds without naming one The block hash preview told callers what to feed by pointing at what one particular downstream crate does. Comments do not get to reference their callers, so the contract stands on its own now. --- dash/src/sml/masternode_list_engine/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dash/src/sml/masternode_list_engine/mod.rs b/dash/src/sml/masternode_list_engine/mod.rs index fef3ddd5f..0be111c73 100644 --- a/dash/src/sml/masternode_list_engine/mod.rs +++ b/dash/src/sml/masternode_list_engine/mod.rs @@ -742,7 +742,7 @@ impl MasternodeListEngine { /// cycle keys that cycle in storage, yet the QRInfo carries no hash for /// it, so no enumeration over the message can produce it. A caller /// holding its own header chain should additionally feed the heights - /// around each work block, as dash-spv does with + /// around each work block, above all the cycle base at /// `work_height + WORK_DIFF_DEPTH`. pub fn qr_info_referenced_block_hashes(qr_info: &QRInfo) -> BTreeSet { let mut hashes = BTreeSet::new(); From b4412e81a716f6c9303dc291213de634b714962e Mon Sep 17 00:00:00 2001 From: xdustinface Date: Wed, 12 Aug 2026 21:39:14 +1000 Subject: [PATCH 36/36] test(dash): pin `SkipFirst` offsets as relative to the first skipped index Addresses CodeRabbit review comment on PR #934 https://github.com/dashpay/rust-dashcore/pull/934#discussion_r3765863249 --- .../rotated_quorum_construction.rs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/dash/src/sml/masternode_list_engine/rotated_quorum_construction.rs b/dash/src/sml/masternode_list_engine/rotated_quorum_construction.rs index 0058a7653..81ec89662 100644 --- a/dash/src/sml/masternode_list_engine/rotated_quorum_construction.rs +++ b/dash/src/sml/masternode_list_engine/rotated_quorum_construction.rs @@ -727,20 +727,24 @@ mod tests { let modifier = QuorumModifierHash::from_byte_array([9; 32]); let sorted = score_sorted(&entries, modifier); - // The first skip entry is an absolute index, later entries are - // relative to it: [3, 2] skips absolute indexes 3 and 5. + // The first skip entry is an absolute index. Every later entry is an + // offset from that first skipped index, not from the preceding one, so + // [3, 2, 3] skips absolute indexes 3, 5 and 6, which leaves the second + // quarter one short and wraps it back to the front for its last member. + // Reading the offsets cumulatively instead would skip 3, 5 and 8, + // keeping index 6 and never reaching the wrap. let quarters = MasternodeListEngine::apply_skip_strategy_of_type( - LLMQQuarterUsageType::Snapshot(snapshot(MNSkipListMode::SkipFirst, vec![3, 2])), + LLMQQuarterUsageType::Snapshot(snapshot(MNSkipListMode::SkipFirst, vec![3, 2, 3])), vec![], entries.iter().collect(), modifier, 2, - 2, + 3, ); let expected: Vec> = vec![ - pro_reg_tx_hashes(&[sorted[0], sorted[1]]), - pro_reg_tx_hashes(&[sorted[2], sorted[4]]), + pro_reg_tx_hashes(&[sorted[0], sorted[1], sorted[2]]), + pro_reg_tx_hashes(&[sorted[4], sorted[7], sorted[0]]), ]; let actual: Vec> = quarters.iter().map(|quarter| pro_reg_tx_hashes(quarter)).collect();