Skip to content

Commit a3513aa

Browse files
authored
fix: delete rolled-back blocks (#567)
Signed-off-by: Aurora Gaffney <[email protected]>
1 parent 8e0ea0c commit a3513aa

File tree

1 file changed

+26
-1
lines changed

1 file changed

+26
-1
lines changed

state/chainsync.go

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,33 @@ func (ls *LedgerState) handleEventBlockfetch(evt event.Event) {
8989
}
9090
}
9191

92-
//nolint:unparam
9392
func (ls *LedgerState) handleEventChainsyncRollback(e ChainsyncEvent) error {
93+
tip, err := ls.chainTip(nil)
94+
if err != nil {
95+
return err
96+
}
97+
// Lookup block number for rollback point
98+
tmpBlock, err := database.BlockByPoint(ls.db, e.Point)
99+
if err != nil {
100+
return err
101+
}
102+
// Delete any rolled-back blocks
103+
for i := tip.BlockNumber; i > tmpBlock.Number; i-- {
104+
txn := ls.db.BlobTxn(true)
105+
err := txn.Do(func(txn *database.Txn) error {
106+
tmpBlock, err := database.BlockByNumberTxn(txn, i)
107+
if err != nil {
108+
return err
109+
}
110+
if err := database.BlockDeleteTxn(txn, tmpBlock); err != nil {
111+
return err
112+
}
113+
return nil
114+
})
115+
if err != nil {
116+
return err
117+
}
118+
}
94119
// Generate event
95120
ls.config.EventBus.Publish(
96121
ChainUpdateEventType,

0 commit comments

Comments
 (0)