diff --git a/core/kroma_migration.go b/core/kroma_migration.go index 668cec856..69655d0bb 100644 --- a/core/kroma_migration.go +++ b/core/kroma_migration.go @@ -205,3 +205,30 @@ func DeleteStateChanges(db ethdb.KeyValueStore, blockNumber uint64) error { } return batch.Write() } + +func DeleteAllStateChanges(db ethdb.KeyValueStore) error { + batch := db.NewBatch() + deleteFunc := func(prefix []byte) error { + it := db.NewIterator(prefix, nil) + for it.Next() { + err := batch.Delete(it.Key()) + if err != nil { + return err + } + } + if it.Error() != nil { + return it.Error() + } + return nil + } + if err := deleteFunc(destructChangesPrefix); err != nil { + return err + } + if err := deleteFunc(accountChangesPrefix); err != nil { + return err + } + if err := deleteFunc(storageChangesPrefix); err != nil { + return err + } + return batch.Write() +} diff --git a/migration/migrator.go b/migration/migrator.go index acf19ce35..98c8c20f0 100644 --- a/migration/migrator.go +++ b/migration/migrator.go @@ -311,10 +311,18 @@ func (m *StateMigrator) FinalizeTransition(transitionBlock types.Block) { // Write the chain config to disk. genesisHash := rawdb.ReadCanonicalHash(m.db, 0) rawdb.WriteChainConfig(m.db, genesisHash, cfg) + log.Info("Wrote chain config", "bedrock-block", cfg.BedrockBlock, "zktrie", cfg.Zktrie) // Switch trie backend to MPT cfg.Zktrie = false m.backend.BlockChain().TrieDB().SetBackend(false) - log.Info("Wrote chain config", "bedrock-block", cfg.BedrockBlock, "zktrie", cfg.Zktrie) + // Delete all state changes. + go func() { + if err := core.DeleteAllStateChanges(m.db); err != nil { + log.Warn("Failed to delete all state changes for MPT migration", "err", err) + } else { + log.Info("All state changes have been deleted for MPT migration") + } + }() }