From a9f9a594160405737657083476535f3e48df1558 Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 22 Aug 2014 10:58:57 +0200 Subject: Extra checks --- block_pool.go | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'block_pool.go') diff --git a/block_pool.go b/block_pool.go index 3225bdff2..2be2bc787 100644 --- a/block_pool.go +++ b/block_pool.go @@ -49,11 +49,11 @@ func (self *BlockPool) AddHash(hash []byte) { } } -func (self *BlockPool) SetBlock(b *ethchain.Block) { +func (self *BlockPool) SetBlock(b *ethchain.Block, peer *Peer) { hash := string(b.Hash()) - if self.pool[string(hash)] == nil { - self.pool[hash] = &block{nil, nil} + if self.pool[hash] == nil { + self.pool[hash] = &block{peer, nil} } self.pool[hash].block = b @@ -65,6 +65,10 @@ func (self *BlockPool) CheckLinkAndProcess(f func(block *ethchain.Block)) bool { if self.IsLinked() { for i, hash := range self.hashPool { + if self.pool[string(hash)] == nil { + continue + } + block := self.pool[string(hash)].block if block != nil { f(block) @@ -84,7 +88,7 @@ func (self *BlockPool) CheckLinkAndProcess(f func(block *ethchain.Block)) bool { } func (self *BlockPool) IsLinked() bool { - if len(self.hashPool) == 0 { + if len(self.hashPool) == 0 || self.pool[string(self.hashPool[0])] == nil { return false } @@ -104,7 +108,7 @@ func (self *BlockPool) Take(amount int, peer *Peer) (hashes [][]byte) { j := 0 for i := 0; i < len(self.hashPool) && j < num; i++ { hash := string(self.hashPool[i]) - if self.pool[hash].peer == nil || self.pool[hash].peer == peer { + if self.pool[hash] != nil && (self.pool[hash].peer == nil || self.pool[hash].peer == peer) && self.pool[hash].block == nil { self.pool[hash].peer = peer hashes = append(hashes, self.hashPool[i]) -- cgit v1.2.3 From be9bfb5536c7410bdd9cb3fbd13fb622bfc00a57 Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 22 Aug 2014 14:52:20 +0200 Subject: 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(-) (limited to 'block_pool.go') 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 -- cgit v1.2.3 From 56103f07517fe32522e510213c02ea982dfcef42 Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 22 Aug 2014 17:10:18 +0200 Subject: Log --- block_pool.go | 2 -- 1 file changed, 2 deletions(-) (limited to 'block_pool.go') diff --git a/block_pool.go b/block_pool.go index e3f0f6ff0..25627eb5c 100644 --- a/block_pool.go +++ b/block_pool.go @@ -1,7 +1,6 @@ package eth import ( - "fmt" "math" "math/big" "sync" @@ -52,7 +51,6 @@ 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} -- cgit v1.2.3 From 74ef22d8247c08b6b827f5e9f1001f8bcce9d0e0 Mon Sep 17 00:00:00 2001 From: obscuren Date: Sun, 14 Sep 2014 14:30:33 +0200 Subject: add it to the list --- block_pool.go | 1 + 1 file changed, 1 insertion(+) (limited to 'block_pool.go') diff --git a/block_pool.go b/block_pool.go index 25627eb5c..38827242d 100644 --- a/block_pool.go +++ b/block_pool.go @@ -53,6 +53,7 @@ func (self *BlockPool) SetBlock(b *ethchain.Block, peer *Peer) { hash := string(b.Hash()) if self.pool[hash] == nil { + self.hashPool = append(self.hashPool, b.Hash()) self.pool[hash] = &block{peer, nil} } -- cgit v1.2.3 From 33a0dec8a157b9687ca6038f4deb011f3f1f7bdc Mon Sep 17 00:00:00 2001 From: obscuren Date: Mon, 15 Sep 2014 15:42:12 +0200 Subject: Improved catching up and refactored --- block_pool.go | 59 +++++++++++++++++------------------------------------------ 1 file changed, 17 insertions(+), 42 deletions(-) (limited to 'block_pool.go') diff --git a/block_pool.go b/block_pool.go index 38827242d..0a668e111 100644 --- a/block_pool.go +++ b/block_pool.go @@ -52,59 +52,34 @@ func (self *BlockPool) AddHash(hash []byte) { func (self *BlockPool) SetBlock(b *ethchain.Block, peer *Peer) { hash := string(b.Hash()) - if self.pool[hash] == nil { + if self.pool[hash] == nil && !self.eth.BlockChain().HasBlock(b.Hash()) { self.hashPool = append(self.hashPool, b.Hash()) - self.pool[hash] = &block{peer, nil} + self.pool[hash] = &block{peer, b} + } else if self.pool[hash] != nil { + self.pool[hash].block = b } - - self.pool[hash].block = b } -func (self *BlockPool) CheckLinkAndProcess(f func(block *ethchain.Block)) bool { - self.mut.Lock() - defer self.mut.Unlock() - - if self.IsLinked() { - for i, hash := range self.hashPool { - if self.pool[string(hash)] == nil { - continue - } +func (self *BlockPool) CheckLinkAndProcess(f func(block *ethchain.Block)) { - block := self.pool[string(hash)].block - if block != nil { - f(block) - - delete(self.pool, string(hash)) - } else { - self.hashPool = self.hashPool[i:] - - return false - } + var blocks ethchain.Blocks + for _, item := range self.pool { + if item.block != nil { + blocks = append(blocks, item.block) } - - return true } - return false -} - -func (self *BlockPool) IsLinked() bool { - if len(self.hashPool) == 0 { - return false - } + ethchain.BlockBy(ethchain.Number).Sort(blocks) + for _, block := range blocks { + if self.eth.BlockChain().HasBlock(block.PrevHash) { + f(block) - 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 - } + hash := block.Hash() + self.hashPool = ethutil.DeleteFromByteSlice(self.hashPool, hash) + delete(self.pool, string(hash)) } - } - return false + } } func (self *BlockPool) Take(amount int, peer *Peer) (hashes [][]byte) { -- cgit v1.2.3 From a26c479182375a076833068aa6125724fda647fe Mon Sep 17 00:00:00 2001 From: obscuren Date: Wed, 17 Sep 2014 15:58:02 +0200 Subject: Added len --- block_pool.go | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'block_pool.go') diff --git a/block_pool.go b/block_pool.go index 0a668e111..6753308b6 100644 --- a/block_pool.go +++ b/block_pool.go @@ -33,6 +33,10 @@ func NewBlockPool(eth *Ethereum) *BlockPool { } } +func (self *BlockPool) Len() int { + return len(self.hashPool) +} + func (self *BlockPool) HasLatestHash() bool { return self.pool[string(self.eth.BlockChain().CurrentBlock.Hash())] != nil } -- cgit v1.2.3