aboutsummaryrefslogtreecommitdiffstats
path: root/eth/handler.go
diff options
context:
space:
mode:
authorPéter Szilágyi <peterke@gmail.com>2016-06-02 20:54:07 +0800
committerPéter Szilágyi <peterke@gmail.com>2016-06-06 19:45:38 +0800
commit32559ccad1e0519ce1decc4b90df021fe215a811 (patch)
tree9955f4f42ecc8f946daf064ff68df58c38225801 /eth/handler.go
parent826efc22957bfdc4e23775f71ad77fdeed11fd6e (diff)
downloaddexon-32559ccad1e0519ce1decc4b90df021fe215a811.tar.gz
dexon-32559ccad1e0519ce1decc4b90df021fe215a811.tar.zst
dexon-32559ccad1e0519ce1decc4b90df021fe215a811.zip
eth: don't accept transactions until we sync up with the network
Diffstat (limited to 'eth/handler.go')
-rw-r--r--eth/handler.go14
1 files changed, 10 insertions, 4 deletions
diff --git a/eth/handler.go b/eth/handler.go
index 58869a2ee..1e4dc1289 100644
--- a/eth/handler.go
+++ b/eth/handler.go
@@ -59,7 +59,9 @@ type blockFetcherFn func([]common.Hash) error
type ProtocolManager struct {
networkId int
- fastSync uint32
+ fastSync uint32 // Flag whether fast sync is enabled (gets disabled if we already have blocks)
+ synced uint32 // Flag whether we're considered synchronised (enables transaction processing)
+
txpool txPool
blockchain *core.BlockChain
chaindb ethdb.Database
@@ -161,7 +163,11 @@ func NewProtocolManager(config *core.ChainConfig, fastSync bool, networkId int,
heighter := func() uint64 {
return blockchain.CurrentBlock().NumberU64()
}
- manager.fetcher = fetcher.New(blockchain.GetBlock, validator, manager.BroadcastBlock, heighter, manager.insertChain, manager.removePeer)
+ inserter := func(blocks types.Blocks) (int, error) {
+ atomic.StoreUint32(&manager.synced, 1) // Mark initial sync done on any fetcher import
+ return manager.insertChain(blocks)
+ }
+ manager.fetcher = fetcher.New(blockchain.GetBlock, validator, manager.BroadcastBlock, heighter, inserter, manager.removePeer)
if blockchain.Genesis().Hash().Hex() == defaultGenesisHash && networkId == 1 {
glog.V(logger.Debug).Infoln("Bad Block Reporting is enabled")
@@ -698,8 +704,8 @@ func (pm *ProtocolManager) handleMsg(p *peer) error {
}
case msg.Code == TxMsg:
- // Transactions arrived, make sure we have a valid chain to handle them
- if atomic.LoadUint32(&pm.fastSync) == 1 {
+ // Transactions arrived, make sure we have a valid and fresh chain to handle them
+ if atomic.LoadUint32(&pm.synced) == 0 {
break
}
// Transactions can be processed, parse all of them and deliver to the pool