From be9bfb5536c7410bdd9cb3fbd13fb622bfc00a57 Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 22 Aug 2014 14:52:20 +0200 Subject: [PATCH] Minor improvement catching up * When catching up check linked up the chain of hashes --- block_pool.go | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/block_pool.go b/block_pool.go index 2be2bc7870..e3f0f6ff00 100644 --- a/block_pool.go +++ b/block_pool.go @@ -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