triedb/pathdb: fix panic in recoverable (#29107)

* triedb/pathdb: fix panic in recoverable

* triedb/pathdb: add todo

* triedb/pathdb: rename

* triedb/pathdb: rename
This commit is contained in:
rjl493456442 2024-02-28 20:40:28 +08:00 committed by GitHub
parent 49623bd469
commit 5bae14f9df
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -391,17 +391,23 @@ func (db *Database) Recoverable(root common.Hash) bool {
if *id >= dl.stateID() { if *id >= dl.stateID() {
return false return false
} }
// This is a temporary workaround for the unavailability of the freezer in
// dev mode. As a consequence, the Pathdb loses the ability for deep reorg
// in certain cases.
// TODO(rjl493456442): Implement the in-memory ancient store.
if db.freezer == nil {
return false
}
// Ensure the requested state is a canonical state and all state // Ensure the requested state is a canonical state and all state
// histories in range [id+1, disklayer.ID] are present and complete. // histories in range [id+1, disklayer.ID] are present and complete.
parent := root
return checkHistories(db.freezer, *id+1, dl.stateID()-*id, func(m *meta) error { return checkHistories(db.freezer, *id+1, dl.stateID()-*id, func(m *meta) error {
if m.parent != parent { if m.parent != root {
return errors.New("unexpected state history") return errors.New("unexpected state history")
} }
if len(m.incomplete) > 0 { if len(m.incomplete) > 0 {
return errors.New("incomplete state history") return errors.New("incomplete state history")
} }
parent = m.root root = m.root
return nil return nil
}) == nil }) == nil
} }