Skip to content

Commit adf73ed

Browse files
authored
fix: avoid re-inserting previous filter header on sync resume (#428)
On restart, `start_download()` unconditionally set `checkpoint_start_height` which caused `process_cfheaders()` to store `previous_filter_header` at an offset that already contained data, triggering a `debug_assert` panic. Only set `checkpoint_start_height` when filter storage is empty not when resuming from existing stored state.
1 parent eca3330 commit adf73ed

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

dash-spv/src/sync/filter_headers/manager.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,8 +138,10 @@ impl<H: BlockHeaderStorage, FH: FilterHeaderStorage> FilterHeadersManager<H, FH>
138138
self.progress.block_header_tip_height()
139139
);
140140

141-
// Track checkpoint start height for storing prev header on first batch
142-
if start_height > 0 {
141+
// Track checkpoint start height for storing prev header on first batch.
142+
// Only needed on fresh checkpoint sync (no existing filter headers).
143+
// On resume, start_height-1 is already stored so re-inserting would panic in debug builds.
144+
if start_height > 0 && filter_headers_tip == 0 {
143145
self.checkpoint_start_height = Some(start_height);
144146
}
145147

0 commit comments

Comments
 (0)