Selaa lähdekoodia

eth: don't import propagated blocks during fastsync

Péter Szilágyi 8 vuotta sitten
vanhempi
commit
afdd23b5ca
2 muutettua tiedostoa jossa 6 lisäystä ja 0 poistoa
  1. 5 0
      eth/handler.go
  2. 1 0
      eth/sync.go

+ 5 - 0
eth/handler.go

@@ -171,6 +171,11 @@ func NewProtocolManager(config *params.ChainConfig, mode downloader.SyncMode, ne
 		return blockchain.CurrentBlock().NumberU64()
 	}
 	inserter := func(blocks types.Blocks) (int, error) {
+		// If fast sync is running, deny importing weird blocks
+		if atomic.LoadUint32(&manager.fastSync) == 1 {
+			log.Warn("Discarded bad propagated block", "number", blocks[0].Number(), "hash", blocks[0].Hash())
+			return 0, nil
+		}
 		atomic.StoreUint32(&manager.acceptTxs, 1) // Mark initial sync done on any fetcher import
 		return manager.blockchain.InsertChain(blocks)
 	}

+ 1 - 0
eth/sync.go

@@ -183,6 +183,7 @@ func (pm *ProtocolManager) synchronise(peer *peer) {
 		// The only scenario where this can happen is if the user manually (or via a
 		// bad block) rolled back a fast sync node below the sync point. In this case
 		// however it's safe to reenable fast sync.
+		atomic.StoreUint32(&pm.fastSync, 1)
 		mode = downloader.FastSync
 	}
 	if err := pm.downloader.Synchronise(peer.id, pHead, pTd, mode); err != nil {