|
@@ -92,8 +92,6 @@ type ProtocolManager struct {
|
|
|
// wait group is used for graceful shutdowns during downloading
|
|
// wait group is used for graceful shutdowns during downloading
|
|
|
// and processing
|
|
// and processing
|
|
|
wg sync.WaitGroup
|
|
wg sync.WaitGroup
|
|
|
-
|
|
|
|
|
- badBlockReportingEnabled bool
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// NewProtocolManager returns a new ethereum sub protocol manager. The Ethereum sub protocol manages peers capable
|
|
// NewProtocolManager returns a new ethereum sub protocol manager. The Ethereum sub protocol manages peers capable
|
|
@@ -163,7 +161,7 @@ func NewProtocolManager(config *params.ChainConfig, fastSync bool, networkId int
|
|
|
// Construct the different synchronisation mechanisms
|
|
// Construct the different synchronisation mechanisms
|
|
|
manager.downloader = downloader.New(downloader.FullSync, chaindb, manager.eventMux, blockchain.HasHeader, blockchain.HasBlockAndState, blockchain.GetHeaderByHash,
|
|
manager.downloader = downloader.New(downloader.FullSync, chaindb, manager.eventMux, blockchain.HasHeader, blockchain.HasBlockAndState, blockchain.GetHeaderByHash,
|
|
|
blockchain.GetBlockByHash, blockchain.CurrentHeader, blockchain.CurrentBlock, blockchain.CurrentFastBlock, blockchain.FastSyncCommitHead,
|
|
blockchain.GetBlockByHash, blockchain.CurrentHeader, blockchain.CurrentBlock, blockchain.CurrentFastBlock, blockchain.FastSyncCommitHead,
|
|
|
- blockchain.GetTdByHash, blockchain.InsertHeaderChain, manager.insertChain, blockchain.InsertReceiptChain, blockchain.Rollback,
|
|
|
|
|
|
|
+ blockchain.GetTdByHash, blockchain.InsertHeaderChain, manager.blockchain.InsertChain, blockchain.InsertReceiptChain, blockchain.Rollback,
|
|
|
manager.removePeer)
|
|
manager.removePeer)
|
|
|
|
|
|
|
|
validator := func(header *types.Header) error {
|
|
validator := func(header *types.Header) error {
|
|
@@ -174,26 +172,13 @@ func NewProtocolManager(config *params.ChainConfig, fastSync bool, networkId int
|
|
|
}
|
|
}
|
|
|
inserter := func(blocks types.Blocks) (int, error) {
|
|
inserter := func(blocks types.Blocks) (int, error) {
|
|
|
atomic.StoreUint32(&manager.synced, 1) // Mark initial sync done on any fetcher import
|
|
atomic.StoreUint32(&manager.synced, 1) // Mark initial sync done on any fetcher import
|
|
|
- return manager.insertChain(blocks)
|
|
|
|
|
|
|
+ return manager.blockchain.InsertChain(blocks)
|
|
|
}
|
|
}
|
|
|
manager.fetcher = fetcher.New(blockchain.GetBlockByHash, validator, manager.BroadcastBlock, heighter, inserter, manager.removePeer)
|
|
manager.fetcher = fetcher.New(blockchain.GetBlockByHash, validator, manager.BroadcastBlock, heighter, inserter, manager.removePeer)
|
|
|
|
|
|
|
|
- if blockchain.Genesis().Hash().Hex() == defaultGenesisHash && networkId == 1 {
|
|
|
|
|
- log.Debug("Bad block reporting is enabled")
|
|
|
|
|
- manager.badBlockReportingEnabled = true
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
return manager, nil
|
|
return manager, nil
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-func (pm *ProtocolManager) insertChain(blocks types.Blocks) (i int, err error) {
|
|
|
|
|
- i, err = pm.blockchain.InsertChain(blocks)
|
|
|
|
|
- if pm.badBlockReportingEnabled && core.IsValidationErr(err) && i < len(blocks) {
|
|
|
|
|
- go sendBadBlockReport(blocks[i], err)
|
|
|
|
|
- }
|
|
|
|
|
- return i, err
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
func (pm *ProtocolManager) removePeer(id string) {
|
|
func (pm *ProtocolManager) removePeer(id string) {
|
|
|
// Short circuit if the peer was already removed
|
|
// Short circuit if the peer was already removed
|
|
|
peer := pm.peers.Peer(id)
|
|
peer := pm.peers.Peer(id)
|