mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-27 07:06:42 +00:00
Speed up CalcPastMedianTime by using block headers
This commit is contained in:
parent
02ddc321ff
commit
8afb245c50
1 changed files with 18 additions and 4 deletions
|
|
@ -529,12 +529,12 @@ func (bc *BlockChain) CalcPastMedianTime(number uint64) *big.Int {
|
|||
|
||||
timestamps := make([]*big.Int, medianTimeBlocks)
|
||||
numNodes := 0
|
||||
iterNode := bc.GetBlockByNumber(number)
|
||||
iterNode := bc.GetHeaderByNumber(number)
|
||||
|
||||
ancestors := make(map[common.Hash]*types.Block)
|
||||
for i, ancestor := range bc.GetBlocksFromHash(iterNode.Hash(), medianTimeBlocks) {
|
||||
ancestors := make(map[common.Hash]*types.Header)
|
||||
for i, ancestor := range bc.GetBlockHeadersFromHash(iterNode.Hash(), medianTimeBlocks) {
|
||||
ancestors[ancestor.Hash()] = ancestor
|
||||
timestamps[i] = ancestor.Time()
|
||||
timestamps[i] = ancestor.Time
|
||||
numNodes++
|
||||
}
|
||||
|
||||
|
|
@ -1375,6 +1375,20 @@ func (self *BlockChain) GetBlockHashesFromHash(hash common.Hash, max uint64) []c
|
|||
return self.hc.GetBlockHashesFromHash(hash, max)
|
||||
}
|
||||
|
||||
func (self *BlockChain) GetBlockHeadersFromHash(hash common.Hash, n int) (blockHeaders []*types.Header) {
|
||||
number := self.hc.GetBlockNumber(hash)
|
||||
for i := 0; i < n; i++ {
|
||||
blockHeader := self.GetHeader(hash, number)
|
||||
if blockHeader == nil {
|
||||
break
|
||||
}
|
||||
blockHeaders = append(blockHeaders, blockHeader)
|
||||
hash = blockHeader.ParentHash
|
||||
number--
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// GetHeaderByNumber retrieves a block header from the database by number,
|
||||
// caching it (associated with its hash) if found.
|
||||
func (self *BlockChain) GetHeaderByNumber(number uint64) *types.Header {
|
||||
|
|
|
|||
Loading…
Reference in a new issue