From af0c1dca02041c52f0d8b0c5574b0774643d1cbb Mon Sep 17 00:00:00 2001 From: ardocrat Date: Wed, 25 Mar 2026 15:29:15 +0300 Subject: [PATCH] pibd: fix check for next required kernel segment (#3822) --- chain/src/txhashset/desegmenter.rs | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/chain/src/txhashset/desegmenter.rs b/chain/src/txhashset/desegmenter.rs index e4bb773c..ca391397 100644 --- a/chain/src/txhashset/desegmenter.rs +++ b/chain/src/txhashset/desegmenter.rs @@ -1069,17 +1069,24 @@ impl Desegmenter { ) }; - // When resuming, we need to ensure we're getting the previous segment if needed - let theoretical_pmmr_size = - SegmentIdentifier::pmmr_size(cur_segment_count, self.default_kernel_segment_height); - if local_kernel_mmr_size < theoretical_pmmr_size { - cur_segment_count -= 1; - } - let total_segment_count = SegmentIdentifier::count_segments_required( self.archive_header.kernel_mmr_size, self.default_kernel_segment_height, ); + + // When resuming, we need to ensure we're getting the previous segment if needed + if total_segment_count != cur_segment_count { + let theoretical_pmmr_size = + SegmentIdentifier::pmmr_size(cur_segment_count, self.default_kernel_segment_height); + if local_kernel_mmr_size < theoretical_pmmr_size { + debug!( + "theoretical_pmmr_size {} is bigger than the current mmr size {}", + theoretical_pmmr_size, local_kernel_mmr_size + ); + cur_segment_count -= 1; + } + } + trace!( "Next required kernel segment is {} of {}", cur_segment_count,