diff --git a/block_pool.go b/block_pool.go index dcddca58e..38302a4c7 100644 --- a/block_pool.go +++ b/block_pool.go @@ -13,6 +13,7 @@ import ( "github.com/ethereum/go-ethereum/chain/types" "github.com/ethereum/go-ethereum/ethutil" "github.com/ethereum/go-ethereum/logger" + "github.com/ethereum/go-ethereum/state" "github.com/ethereum/go-ethereum/wire" ) @@ -310,10 +311,6 @@ out: } } - // TODO figure out whether we were catching up - // If caught up and just a new block has been propagated: - // sm.eth.EventMux().Post(NewBlockEvent{block}) - // otherwise process and don't emit anything if len(blocks) > 0 { chainManager := self.eth.ChainManager() // Test and import @@ -335,10 +332,13 @@ out: self.peer = nil } else { if !chain.IsTDError(err) { - chainManager.InsertChain(bchain) - for _, block := range blocks { + chainManager.InsertChain(bchain, func(block *types.Block, messages state.Messages) { + self.eth.EventMux().Post(chain.NewBlockEvent{block}) + self.eth.EventMux().Post(messages) + self.Remove(block.Hash()) - } + }) + } } } diff --git a/chain/chain_manager.go b/chain/chain_manager.go index 11df4e17e..970fa5377 100644 --- a/chain/chain_manager.go +++ b/chain/chain_manager.go @@ -271,14 +271,14 @@ func (self *ChainManager) NewIterator(startHash []byte) *ChainIterator { } // This function assumes you've done your checking. No checking is done at this stage anymore -func (self *ChainManager) InsertChain(chain *BlockChain) { +func (self *ChainManager) InsertChain(chain *BlockChain, call func(*types.Block, state.Messages)) { for e := chain.Front(); e != nil; e = e.Next() { link := e.Value.(*link) self.add(link.block) self.SetTotalDifficulty(link.td) - //self.eth.EventMux().Post(NewBlockEvent{link.block}) - //self.eth.EventMux().Post(link.messages) + + call(link.block, link.messages) } b, e := chain.Front(), chain.Back() diff --git a/miner/miner.go b/miner/miner.go index b25e25357..795385424 100644 --- a/miner/miner.go +++ b/miner/miner.go @@ -29,6 +29,7 @@ import ( "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/ethutil" + "github.com/ethereum/go-ethereum/state" "github.com/ethereum/go-ethereum/chain" "github.com/ethereum/go-ethereum/chain/types" @@ -218,8 +219,10 @@ func (self *Miner) mine() { if err != nil { minerlogger.Infoln(err) } else { - chainMan.InsertChain(lchain) - //self.eth.EventMux().Post(chain.NewBlockEvent{block}) + chainMan.InsertChain(lchain, func(block *types.Block, _ state.Messages) { + self.eth.EventMux().Post(chain.NewBlockEvent{block}) + }) + self.eth.Broadcast(wire.MsgBlockTy, []interface{}{block.Value().Val}) minerlogger.Infof("🔨 Mined block %x\n", block.Hash()) diff --git a/peer.go b/peer.go index fa73da21a..ff3593604 100644 --- a/peer.go +++ b/peer.go @@ -11,6 +11,7 @@ import ( "strings" "sync/atomic" "time" + "github.com/ethereum/go-ethereum/chain/types" "github.com/ethereum/go-ethereum/ethutil" "github.com/ethereum/go-ethereum/logger" @@ -23,7 +24,7 @@ const ( // The size of the output buffer for writing messages outputBufferSize = 50 // Current protocol version - ProtocolVersion = 42 + ProtocolVersion = 43 // Current P2P version P2PVersion = 2 // Ethereum network version