diff options
author | obscuren <geffobscura@gmail.com> | 2014-08-22 20:52:20 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2014-08-22 20:52:20 +0800 |
commit | be9bfb5536c7410bdd9cb3fbd13fb622bfc00a57 (patch) | |
tree | 23ec7bd9267f20a099fbc7a7e5c2759b89fb4fb8 | |
parent | 836ed9d6b70e3ae928624f9ed81ed206a66b85b8 (diff) | |
download | dexon-be9bfb5536c7410bdd9cb3fbd13fb622bfc00a57.tar.gz dexon-be9bfb5536c7410bdd9cb3fbd13fb622bfc00a57.tar.zst dexon-be9bfb5536c7410bdd9cb3fbd13fb622bfc00a57.zip |
Minor improvement catching up
* When catching up check linked up the chain of hashes
-rw-r--r-- | block_pool.go | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/block_pool.go b/block_pool.go index 2be2bc787..e3f0f6ff0 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 |