From de9ed732e29c3eccd5e710f6d7b28539505684de Mon Sep 17 00:00:00 2001 From: Daniel Liu <139250065@qq.com> Date: Sat, 15 Nov 2025 19:20:52 +0800 Subject: [PATCH] cmd, eth: implement flag delete-all-bad-blocks (#1770) --- cmd/XDC/main.go | 1 + cmd/utils/flags.go | 8 ++++++++ eth/backend.go | 14 ++++++++++++++ eth/ethconfig/config.go | 1 + 4 files changed, 24 insertions(+) diff --git a/cmd/XDC/main.go b/cmd/XDC/main.go index 87501c919a..19d30d5dc8 100644 --- a/cmd/XDC/main.go +++ b/cmd/XDC/main.go @@ -138,6 +138,7 @@ var ( utils.AnnounceTxsFlag, utils.StoreRewardFlag, utils.SetHeadFlag, + utils.DeleteAllBadBlocksFlag, utils.XDCSlaveModeFlag, }, utils.NetworkFlags, utils.DatabaseFlags) diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index fb69b24b8b..d5636f3a89 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -806,6 +806,11 @@ var ( } // MISC settings + DeleteAllBadBlocksFlag = &cli.BoolFlag{ + Name: "delete-all-bad-blocks", + Usage: "Delete all bad blocks in the database", + Category: flags.MiscCategory, + } SetHeadFlag = &cli.Uint64Flag{ Name: "set-head", Usage: "Rollback chain to block number", @@ -1553,6 +1558,9 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) { os.Mkdir(common.StoreRewardFolder, os.ModePerm) } } + if ctx.Bool(DeleteAllBadBlocksFlag.Name) { + cfg.DeleteAllBadBlocks = true + } if ctx.IsSet(SetHeadFlag.Name) { common.RollbackNumber = ctx.Uint64(SetHeadFlag.Name) if common.RollbackNumber == 0 { diff --git a/eth/backend.go b/eth/backend.go index 7bcc796182..45f8f61097 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -177,6 +177,20 @@ func New(stack *node.Node, config *ethconfig.Config, XDCXServ *XDCx.XDCX, lendin } } + badBlocks := rawdb.ReadAllBadBlocks(chainDb) + log.Info("Bad blocks in db", "count", len(badBlocks)) + for i, block := range badBlocks { + log.Info("Bad block in db", "i", i, "number", block.Number(), "hash", block.Hash().Hex()) + } + if config.DeleteAllBadBlocks { + if len(badBlocks) == 0 { + log.Warn("No bad blocks in db to delete") + } else { + rawdb.DeleteBadBlocks(chainDb) + log.Info(fmt.Sprintf("Deleted %d bad blocks in db", len(badBlocks))) + } + } + var ( vmConfig = vm.Config{EnablePreimageRecording: config.EnablePreimageRecording} cacheConfig = &core.CacheConfig{ diff --git a/eth/ethconfig/config.go b/eth/ethconfig/config.go index 211ec29425..8b2aeb37fe 100644 --- a/eth/ethconfig/config.go +++ b/eth/ethconfig/config.go @@ -81,6 +81,7 @@ type Config struct { // Database options SkipBcVersionCheck bool `toml:"-"` + DeleteAllBadBlocks bool `toml:"-"` DatabaseHandles int `toml:"-"` DatabaseCache int TrieCleanCache int