good morning!!!!

Skip to content
Snippets Groups Projects
Commit f8d0cd99 authored by Jeffrey Wilcke's avatar Jeffrey Wilcke
Browse files

Added a callback mechanism to chain adding.

Not sure if this is the right approach. Why? BlockChain shouldn't need
the "Ethereum" object. BlockChain shouldn't need to worry about
notifying listeners or message propagation.
parent a1b6a9ac
Branches
Tags
No related merge requests found
......@@ -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())
}
})
}
}
}
......
......@@ -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()
......
......@@ -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())
......
......@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment