diff options
author | Péter Szilágyi <peterke@gmail.com> | 2015-12-29 20:01:08 +0800 |
---|---|---|
committer | Péter Szilágyi <peterke@gmail.com> | 2016-01-04 22:27:23 +0800 |
commit | 9e011ff1cd7fe060e106608d0823e48431ef12e9 (patch) | |
tree | ed17707f94d73f16bec16d97cd368590d38096bb /core/blockchain.go | |
parent | 36137623edc18c086815b653b2eb0291579ffd22 (diff) | |
download | dexon-9e011ff1cd7fe060e106608d0823e48431ef12e9.tar.gz dexon-9e011ff1cd7fe060e106608d0823e48431ef12e9.tar.zst dexon-9e011ff1cd7fe060e106608d0823e48431ef12e9.zip |
core, eth/downloader: ensure state presence in ancestor lookup
Diffstat (limited to 'core/blockchain.go')
-rw-r--r-- | core/blockchain.go | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/core/blockchain.go b/core/blockchain.go index 9d526e352..95ed06d8d 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -587,6 +587,19 @@ func (bc *BlockChain) HasBlock(hash common.Hash) bool { return bc.GetBlock(hash) != nil } +// HasBlockAndState checks if a block and associated state trie is fully present +// in the database or not, caching it if present. +func (bc *BlockChain) HasBlockAndState(hash common.Hash) bool { + // Check first that the block itself is known + block := bc.GetBlock(hash) + if block == nil { + return false + } + // Ensure the associated state is also present + _, err := state.New(block.Root(), bc.chainDb) + return err == nil +} + // GetBlock retrieves a block from the database by hash, caching it if found. func (self *BlockChain) GetBlock(hash common.Hash) *types.Block { // Short circuit if the block's already in the cache, retrieve otherwise |