Skip to content

Commit

Permalink
eth: fix tracing state retrieval if requesting the non-dirty genesis
Browse files Browse the repository at this point in the history
  • Loading branch information
karalabe committed Apr 7, 2021
1 parent 9d10856 commit 2a7c4b6
Showing 1 changed file with 10 additions and 0 deletions.
10 changes: 10 additions & 0 deletions eth/state_accessor.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,16 @@ func (eth *Ethereum) stateAtBlock(block *types.Block, reexec uint64, base *state
// the internal junks created by tracing will be persisted into the disk.
database = state.NewDatabaseWithConfig(eth.chainDb, &trie.Config{Cache: 16})

// If we didn't check the dirty database, do check the clean one, otherwise
// we would rewind past a persisted block (specific corner case is chain
// tracing from the genesis).
if !checkLive {
statedb, err = state.New(current.Root(), database, nil)
if err == nil {
return statedb, nil
}
}
// Database does not have the state for the given block, try to regenerate
for i := uint64(0); i < reexec; i++ {
if current.NumberU64() == 0 {
return nil, errors.New("genesis state is missing")
Expand Down

0 comments on commit 2a7c4b6

Please sign in to comment.