Minor improvement catching up

* When catching up check linked up the chain of hashes
This commit is contained in:
obscuren 2014-08-22 14:52:20 +02:00
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