forked from cerc-io/plugeth
Minor improvement catching up
* When catching up check linked up the chain of hashes
This commit is contained in:
parent
836ed9d6b7
commit
be9bfb5536
@ -1,6 +1,7 @@
|
||||
package eth
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math"
|
||||
"math/big"
|
||||
"sync"
|
||||
@ -51,6 +52,7 @@ func (self *BlockPool) AddHash(hash []byte) {
|
||||
|
||||
func (self *BlockPool) SetBlock(b *ethchain.Block, peer *Peer) {
|
||||
hash := string(b.Hash())
|
||||
fmt.Printf("::SetBlock %x\n", hash)
|
||||
|
||||
if self.pool[hash] == nil {
|
||||
self.pool[hash] = &block{peer, nil}
|
||||
@ -88,13 +90,19 @@ func (self *BlockPool) CheckLinkAndProcess(f func(block *ethchain.Block)) bool {
|
||||
}
|
||||
|
||||
func (self *BlockPool) IsLinked() bool {
|
||||
if len(self.hashPool) == 0 || self.pool[string(self.hashPool[0])] == nil {
|
||||
if len(self.hashPool) == 0 {
|
||||
return false
|
||||
}
|
||||
|
||||
block := self.pool[string(self.hashPool[0])].block
|
||||
if block != nil {
|
||||
return self.eth.BlockChain().HasBlock(block.PrevHash)
|
||||
for i := 0; i < len(self.hashPool); i++ {
|
||||
item := self.pool[string(self.hashPool[i])]
|
||||
if item != nil && item.block != nil {
|
||||
if self.eth.BlockChain().HasBlock(item.block.PrevHash) {
|
||||
self.hashPool = self.hashPool[i:]
|
||||
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
|
Loading…
Reference in New Issue
Block a user