diff options
author | Péter Szilágyi <peterke@gmail.com> | 2018-11-16 19:15:05 +0800 |
---|---|---|
committer | Péter Szilágyi <peterke@gmail.com> | 2018-11-16 19:21:20 +0800 |
commit | accc0fab4f407eaeab428127bd5395a28f371f9f (patch) | |
tree | 33b8721bd8001e80b8250f4a783babf0b5110a68 /core/blockchain.go | |
parent | 51b2f1620cc22aa410dee24a6021bb767e0ff998 (diff) | |
download | go-tangerine-accc0fab4f407eaeab428127bd5395a28f371f9f.tar.gz go-tangerine-accc0fab4f407eaeab428127bd5395a28f371f9f.tar.zst go-tangerine-accc0fab4f407eaeab428127bd5395a28f371f9f.zip |
core, eth/downloader: fix ancestor lookup for fast sync
Diffstat (limited to 'core/blockchain.go')
-rw-r--r-- | core/blockchain.go | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/core/blockchain.go b/core/blockchain.go index 22f130ce6..d173b2de2 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -561,6 +561,17 @@ func (bc *BlockChain) HasBlock(hash common.Hash, number uint64) bool { return rawdb.HasBody(bc.db, hash, number) } +// HasFastBlock checks if a fast block is fully present in the database or not. +func (bc *BlockChain) HasFastBlock(hash common.Hash, number uint64) bool { + if !bc.HasBlock(hash, number) { + return false + } + if bc.receiptsCache.Contains(hash) { + return true + } + return rawdb.HasReceipts(bc.db, hash, number) +} + // HasState checks if state trie is fully present in the database or not. func (bc *BlockChain) HasState(hash common.Hash) bool { _, err := bc.stateCache.OpenTrie(hash) @@ -618,12 +629,10 @@ func (bc *BlockChain) GetReceiptsByHash(hash common.Hash) types.Receipts { if receipts, ok := bc.receiptsCache.Get(hash); ok { return receipts.(types.Receipts) } - number := rawdb.ReadHeaderNumber(bc.db, hash) if number == nil { return nil } - receipts := rawdb.ReadReceipts(bc.db, hash, *number) bc.receiptsCache.Add(hash, receipts) return receipts |