cmd/geth: fix legacy receipt detection for empty db (#25609)

This commit is contained in:
Sina Mahmoodi 2022-08-30 14:38:35 +02:00 committed by GitHub
parent c394c308e6
commit 6e6b5087f1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 3 deletions

View File

@ -175,12 +175,13 @@ func makeFullNode(ctx *cli.Context) (*node.Node, ethapi.Backend) {
if cfg.Eth.NetworkId == 1 && ghash == params.MainnetGenesisHash { if cfg.Eth.NetworkId == 1 && ghash == params.MainnetGenesisHash {
firstIdx = 46147 firstIdx = 46147
} }
isLegacy, _, err := dbHasLegacyReceipts(eth.ChainDb(), firstIdx) isLegacy, firstLegacy, err := dbHasLegacyReceipts(eth.ChainDb(), firstIdx)
if err != nil { if err != nil {
log.Error("Failed to check db for legacy receipts", "err", err) log.Error("Failed to check db for legacy receipts", "err", err)
} else if isLegacy { } else if isLegacy {
stack.Close() stack.Close()
utils.Fatalf("Database has receipts with a legacy format. Please run `geth db freezer-migrate`.") log.Error("Database has receipts with a legacy format", "firstLegacy", firstLegacy)
utils.Fatalf("Aborting. Please run `geth db freezer-migrate`.")
} }
} }

View File

@ -822,11 +822,15 @@ func dbHasLegacyReceipts(db ethdb.Database, firstIdx uint64) (bool, uint64, erro
} }
} }
} }
// Is first non-empty receipt legacy?
first, err := db.Ancient("receipts", firstIdx) first, err := db.Ancient("receipts", firstIdx)
if err != nil { if err != nil {
return false, 0, err return false, 0, err
} }
// We looped over all receipts and they were all empty
if bytes.Equal(first, emptyRLPList) {
return false, 0, nil
}
// Is first non-empty receipt legacy?
legacy, err = types.IsLegacyStoredReceipts(first) legacy, err = types.IsLegacyStoredReceipts(first)
return legacy, firstIdx, err return legacy, firstIdx, err
} }