aboutsummaryrefslogtreecommitdiffstats
path: root/core/blockchain.go
diff options
context:
space:
mode:
authorFelföldi Zsolt <zsfelfoldi@gmail.com>2018-06-12 21:52:54 +0800
committerPéter Szilágyi <peterke@gmail.com>2018-06-12 21:52:54 +0800
commit049f5b357200406c01f7bf2d2e2936d1d28a319b (patch)
treeef73043730c3d77359b9163ab6cbb2f053e5cf86 /core/blockchain.go
parent0255951587ef0eada5d162f3404bc481f70a2ce2 (diff)
downloadgo-tangerine-049f5b357200406c01f7bf2d2e2936d1d28a319b.tar
go-tangerine-049f5b357200406c01f7bf2d2e2936d1d28a319b.tar.gz
go-tangerine-049f5b357200406c01f7bf2d2e2936d1d28a319b.tar.bz2
go-tangerine-049f5b357200406c01f7bf2d2e2936d1d28a319b.tar.lz
go-tangerine-049f5b357200406c01f7bf2d2e2936d1d28a319b.tar.xz
go-tangerine-049f5b357200406c01f7bf2d2e2936d1d28a319b.tar.zst
go-tangerine-049f5b357200406c01f7bf2d2e2936d1d28a319b.zip
core, eth, les: more efficient hash-based header chain retrieval (#16946)
Diffstat (limited to 'core/blockchain.go')
-rw-r--r--core/blockchain.go12
1 files changed, 12 insertions, 0 deletions
diff --git a/core/blockchain.go b/core/blockchain.go
index ea26fa034..34832252a 100644
--- a/core/blockchain.go
+++ b/core/blockchain.go
@@ -1524,6 +1524,18 @@ func (bc *BlockChain) GetBlockHashesFromHash(hash common.Hash, max uint64) []com
return bc.hc.GetBlockHashesFromHash(hash, max)
}
+// GetAncestor retrieves the Nth ancestor of a given block. It assumes that either the given block or
+// a close ancestor of it is canonical. maxNonCanonical points to a downwards counter limiting the
+// number of blocks to be individually checked before we reach the canonical chain.
+//
+// Note: ancestor == 0 returns the same block, 1 returns its parent and so on.
+func (bc *BlockChain) GetAncestor(hash common.Hash, number, ancestor uint64, maxNonCanonical *uint64) (common.Hash, uint64) {
+ bc.chainmu.Lock()
+ defer bc.chainmu.Unlock()
+
+ return bc.hc.GetAncestor(hash, number, ancestor, maxNonCanonical)
+}
+
// GetHeaderByNumber retrieves a block header from the database by number,
// caching it (associated with its hash) if found.
func (bc *BlockChain) GetHeaderByNumber(number uint64) *types.Header {