File tree Expand file tree Collapse file tree 2 files changed +13
-15
lines changed
Expand file tree Collapse file tree 2 files changed +13
-15
lines changed Original file line number Diff line number Diff line change @@ -220,15 +220,22 @@ func (c *Chain) Rollback(point ocommon.Point) error {
220220 }
221221 // Check headers for rollback point
222222 if len (c .headers ) > 0 {
223- for idx , header := range c .headers {
223+ // Iterate backwards to make deletion safe
224+ var header ledger.BlockHeader
225+ for i := len (c .headers ) - 1 ; i >= 0 ; i -- {
226+ header = c .headers [i ]
227+ // Remove headers after rollback slot
228+ if header .SlotNumber () > point .Slot {
229+ c .headers = slices .Delete (c .headers , i , i + 1 )
230+ continue
231+ }
224232 if header .SlotNumber () == point .Slot &&
225233 string (header .Hash ().Bytes ()) == string (point .Hash ) {
226- // Remove headers after rollback point
227- if idx < len (c .headers )- 1 {
228- c .headers = slices .Delete (c .headers , idx + 1 , len (c .headers ))
229- }
230234 return nil
231235 }
236+ if header .SlotNumber () < point .Slot {
237+ return ErrBlockNotFound
238+ }
232239 }
233240 }
234241 // Lookup block for rollback point
Original file line number Diff line number Diff line change @@ -137,16 +137,7 @@ func (ls *LedgerState) handleEventChainsyncBlockHeader(e ChainsyncEvent) error {
137137 }
138138 // Add header to chain
139139 if err := ls .chain .AddBlockHeader (e .BlockHeader ); err != nil {
140- if ! errors .As (err , & chain.BlockNotFitChainTipError {}) {
141- return fmt .Errorf ("failed adding chain block header: %w" , err )
142- }
143- ls .config .Logger .Warn (
144- fmt .Sprintf (
145- "ignoring chainsync block header: %s" ,
146- err ,
147- ),
148- )
149- return nil
140+ return fmt .Errorf ("failed adding chain block header: %w" , err )
150141 }
151142 // Wait for additional block headers before fetching block bodies if we're
152143 // far enough out from upstream tip
You can’t perform that action at this time.
0 commit comments