@@ -176,9 +176,6 @@ func (m *Manager) tryDecodeHeader(bz []byte, daHeight uint64) *types.SignedHeade
176176 return nil
177177 }
178178
179- // set custom verifier to do correct header verification
180- header .SetCustomVerifierForSyncNode (m .syncNodeSignaturePayloadProvider )
181-
182179 // validate basic header structure only (without data)
183180 if err := header .Header .ValidateBasic (); err != nil {
184181 m .logger .Debug ().Uint64 ("daHeight" , daHeight ).Err (err ).Msg ("blob does not look like a valid header" )
@@ -252,11 +249,32 @@ func (m *Manager) createEmptyData(header *types.SignedHeader) *types.Data {
252249 }
253250}
254251
252+ func (m * Manager ) waitForHeight (ctx context.Context , height uint64 ) error {
253+ for {
254+ currentHeight , err := m .GetStoreHeight (ctx )
255+ if err != nil {
256+ m .logger .Error ().Err (err ).Msg ("failed to get store height" )
257+ return err
258+ }
259+ if currentHeight >= height {
260+ return nil
261+ }
262+
263+ time .Sleep (time .Second )
264+ }
265+ }
266+
255267// sendHeightEventIfValid sends a height event if both header and data are valid and not seen before
256268func (m * Manager ) sendHeightEventIfValid (ctx context.Context , header * types.SignedHeader , data * types.Data , daHeight uint64 ) {
257269 headerHash := header .Hash ().String ()
258270 dataHashStr := data .DACommitment ().String ()
259271
272+ // we need to wait until the previous height has been executed in order to continue syncing
273+ if err := m .waitForHeight (ctx , header .Height ()- 1 ); err != nil {
274+ m .logger .Error ().Err (err ).Msg ("failed to wait for previous height" )
275+ return
276+ }
277+
260278 // Validate header with its data before proceeding
261279 if err := header .ValidateBasicWithData (data ); err != nil {
262280 m .logger .Debug ().Uint64 ("height" , header .Height ()).Err (err ).Msg ("header validation with data failed" )
0 commit comments