// Run the actual import and log any issues
if _, err := f.chain.ProcessBlock(block); err != nil {
log.Info("Propagated block import failed", " from peer: ", peerID, " height: ", block.Height, "err: ", err)
- peer := f.peers.Peer(peerID)
- if ban := peer.addBanScore(50, 0, "block process error"); ban {
- f.sw.AddBannedPeer(peer.getPeer())
- f.sw.StopPeerGracefully(peer.getPeer())
+ fPeer, ok := f.peers.Peer(peerID)
+ if !ok {
+ return
+ }
+ swPeer := fPeer.getPeer()
+ if ban := fPeer.addBanScore(20, 0, "block process error"); ban {
+ f.sw.AddBannedPeer(swPeer)
+ f.sw.StopPeerGracefully(swPeer)
}
return
}
// If import succeeded, broadcast the block
log.Info("success process a block from new mined blocks cache. block height: ", block.Height)
- go f.peers.BroadcastMinedBlock(block)
+ peers, err := f.peers.BroadcastMinedBlock(block)
+ if err != nil {
+ log.Errorf("Broadcast mine block error. %v", err)
+ return
+ }
+ for _, fPeer := range peers {
+ if fPeer == nil {
+ continue
+ }
+ swPeer := fPeer.getPeer()
+ log.Info("Fetcher broadcast block error. Stop peer.")
+ f.sw.StopPeerGracefully(swPeer)
+ }
}
// forgetBlock removes all traces of a queued block from the fetcher's internal