From 4de3ad1712ce0fdc62b1acc27a3922b192e943c6 Mon Sep 17 00:00:00 2001 From: obscuren Date: Wed, 8 Oct 2014 12:29:49 +0200 Subject: [PATCH] New block message --- block_pool.go | 23 +++++++++++++++++------ ethereum.go | 4 ++-- ethpipe/js_pipe.go | 2 -- ethwire/messaging.go | 1 + peer.go | 3 +++ 5 files changed, 23 insertions(+), 10 deletions(-) diff --git a/block_pool.go b/block_pool.go index ea1f3633a..6ad2f5269 100644 --- a/block_pool.go +++ b/block_pool.go @@ -124,6 +124,14 @@ func (self *BlockPool) AddHash(hash []byte, peer *Peer) { } func (self *BlockPool) Add(b *ethchain.Block, peer *Peer) { + self.addBlock(b, peer, false) +} + +func (self *BlockPool) AddNew(b *ethchain.Block, peer *Peer) { + self.addBlock(b, peer, true) +} + +func (self *BlockPool) addBlock(b *ethchain.Block, peer *Peer, newBlock bool) { self.mut.Lock() defer self.mut.Unlock() @@ -135,12 +143,15 @@ func (self *BlockPool) Add(b *ethchain.Block, peer *Peer) { self.hashes = append(self.hashes, b.Hash()) self.pool[hash] = &block{peer, peer, b, time.Now(), 0} - fmt.Println("1.", !self.eth.BlockChain().HasBlock(b.PrevHash), ethutil.Bytes2Hex(b.Hash()[0:4]), ethutil.Bytes2Hex(b.PrevHash[0:4])) - fmt.Println("2.", self.pool[string(b.PrevHash)] == nil) - fmt.Println("3.", !self.fetchingHashes) - if !self.eth.BlockChain().HasBlock(b.PrevHash) && self.pool[string(b.PrevHash)] == nil && !self.fetchingHashes { - poollogger.Infof("Unknown chain, requesting (%x...)\n", b.PrevHash[0:4]) - peer.QueueMessage(ethwire.NewMessage(ethwire.MsgGetBlockHashesTy, []interface{}{b.Hash(), uint32(256)})) + // The following is only performed on an unrequested new block + if newBlock { + fmt.Println("1.", !self.eth.BlockChain().HasBlock(b.PrevHash), ethutil.Bytes2Hex(b.Hash()[0:4]), ethutil.Bytes2Hex(b.PrevHash[0:4])) + fmt.Println("2.", self.pool[string(b.PrevHash)] == nil) + fmt.Println("3.", !self.fetchingHashes) + if !self.eth.BlockChain().HasBlock(b.PrevHash) && self.pool[string(b.PrevHash)] == nil && !self.fetchingHashes { + poollogger.Infof("Unknown chain, requesting (%x...)\n", b.PrevHash[0:4]) + peer.QueueMessage(ethwire.NewMessage(ethwire.MsgGetBlockHashesTy, []interface{}{b.Hash(), uint32(256)})) + } } } else if self.pool[hash] != nil { self.pool[hash].block = b diff --git a/ethereum.go b/ethereum.go index 987cd2016..b83ceb12f 100644 --- a/ethereum.go +++ b/ethereum.go @@ -385,7 +385,7 @@ func (s *Ethereum) RemovePeer(p *Peer) { }) } -func (s *Ethereum) ReapDeadPeerHandler() { +func (s *Ethereum) reapDeadPeerHandler() { reapTimer := time.NewTicker(processReapingTimeout * time.Second) for { @@ -420,7 +420,7 @@ func (s *Ethereum) Start(seed bool) { } // Start the reaping processes - go s.ReapDeadPeerHandler() + go s.reapDeadPeerHandler() go s.update() go s.filterLoop() diff --git a/ethpipe/js_pipe.go b/ethpipe/js_pipe.go index 17c2261c7..24a553dad 100644 --- a/ethpipe/js_pipe.go +++ b/ethpipe/js_pipe.go @@ -3,7 +3,6 @@ package ethpipe import ( "bytes" "encoding/json" - "fmt" "sync/atomic" "github.com/ethereum/eth-go/ethchain" @@ -93,7 +92,6 @@ func (self *JSPipe) NumberToHuman(balance string) string { } func (self *JSPipe) StorageAt(addr, storageAddr string) string { - fmt.Println("get", addr, storageAddr) storage := self.World().SafeGet(ethutil.Hex2Bytes(addr)).Storage(ethutil.Hex2Bytes(storageAddr)) return ethutil.Bytes2Hex(storage.Bytes()) diff --git a/ethwire/messaging.go b/ethwire/messaging.go index 2ef53c003..5013f1a97 100644 --- a/ethwire/messaging.go +++ b/ethwire/messaging.go @@ -40,6 +40,7 @@ const ( MsgBlockHashesTy = 0x14 MsgGetBlocksTy = 0x15 MsgBlockTy = 0x16 + MsgNewBlockTy = 0x17 ) var msgTypeToString = map[MsgType]string{ diff --git a/peer.go b/peer.go index 7ed152696..24dbe88d3 100644 --- a/peer.go +++ b/peer.go @@ -538,7 +538,10 @@ func (p *Peer) HandleInbound() { p.lastBlockReceived = time.Now() } + case ethwire.MsgNewBlockTy: + p.ethereum.blockPool.AddNew(ethchain.NewBlockFromRlpValue(msg.Data), p) } + } } }