@@ -341,8 +341,9 @@ func (h *headersImport) validateChainContinuity() error {
341341
342342 // If import includes genesis block (starts at 0), verify it matches.
343343 if importStartHeight == 0 {
344- err := h .verifyHeadersAtTargetHeight (importStartHeight )
345- if err != nil {
344+ if err := h .verifyHeadersAtTargetHeight (
345+ importStartHeight , verifyBlockAndFilter ,
346+ ); err != nil {
346347 return fmt .Errorf ("genesis header mismatch: %v" , err )
347348 }
348349 log .Infof ("Genesis headers verified, import data will extend " +
@@ -374,7 +375,9 @@ func (h *headersImport) validateChainContinuity() error {
374375// exactly between import and target sources by performing a byte-level
375376// comparison. It retrieves the header from both sources at the given height and
376377// verifies they are identical, returning an error if any discrepancy is found.
377- func (h * headersImport ) verifyHeadersAtTargetHeight (height uint32 ) error {
378+ func (h * headersImport ) verifyHeadersAtTargetHeight (height uint32 ,
379+ verifyMode verifyMode ) error {
380+
378381 // Get header metadata from import souces. We can safely use this header
379382 // metadata for both block headers and filter headers since we've
380383 // already validated that those header metadata are compatible with each
@@ -389,18 +392,37 @@ func (h *headersImport) verifyHeadersAtTargetHeight(height uint32) error {
389392 height , headerMetadata .startHeight ,
390393 )
391394
392- if err := h .verifyBlockHeadersAtTargetHeight (
393- height , importSourceIndex ,
394- ); err != nil {
395- return fmt .Errorf ("failed to verify block headers at target " +
396- "height %d: %w" , height , err )
397- }
395+ switch verifyMode {
396+ case verifyBlockAndFilter :
397+ if err := h .verifyBlockHeadersAtTargetHeight (
398+ height , importSourceIndex ,
399+ ); err != nil {
400+ return fmt .Errorf ("failed to verify block headers at " +
401+ "target height %d: %w" , height , err )
402+ }
398403
399- if err := h .verifyFilterHeadersAtTargetHeight (
400- height , importSourceIndex ,
401- ); err != nil {
402- return fmt .Errorf ("failed to verify filter headers at target " +
403- "height %d: %w" , height , err )
404+ if err := h .verifyFilterHeadersAtTargetHeight (
405+ height , importSourceIndex ,
406+ ); err != nil {
407+ return fmt .Errorf ("failed to verify filter headers at " +
408+ "target height %d: %w" , height , err )
409+ }
410+
411+ case verifyBlockOnly :
412+ if err := h .verifyBlockHeadersAtTargetHeight (
413+ height , importSourceIndex ,
414+ ); err != nil {
415+ return fmt .Errorf ("failed to verify block headers at " +
416+ "target height %d: %w" , height , err )
417+ }
418+
419+ case verifyFilterOnly :
420+ if err := h .verifyFilterHeadersAtTargetHeight (
421+ height , importSourceIndex ,
422+ ); err != nil {
423+ return fmt .Errorf ("failed to verify filter headers at " +
424+ "target height %d: %w" , height , err )
425+ }
404426 }
405427
406428 return nil
0 commit comments