X-Git-Url: http://git.osdn.net/view?p=bytom%2Fvapor.git;a=blobdiff_plain;f=netsync%2Fconsensusmgr%2Fhandle.go;h=702df7209652681e342d3be003a3a30fce1b0a41;hp=2d380f3024fe1e403fd537a142ef4e5a8f9b9151;hb=32605ab49e746065f4b5a68301ce080d1576c6ef;hpb=3605a69afbf9ff5b2bd091b3f5b6eac0d9cefa6f diff --git a/netsync/consensusmgr/handle.go b/netsync/consensusmgr/handle.go index 2d380f30..702df720 100644 --- a/netsync/consensusmgr/handle.go +++ b/netsync/consensusmgr/handle.go @@ -8,6 +8,7 @@ import ( "github.com/vapor/event" "github.com/vapor/netsync/peers" "github.com/vapor/p2p" + "github.com/vapor/p2p/security" "github.com/vapor/protocol/bc" "github.com/vapor/protocol/bc/types" ) @@ -15,8 +16,6 @@ import ( // Switch is the interface for p2p switch. type Switch interface { AddReactor(name string, reactor p2p.Reactor) p2p.Reactor - AddBannedPeer(string) error - ID() [32]byte } // Chain is the interface for Bytom core. @@ -24,7 +23,7 @@ type Chain interface { BestBlockHeight() uint64 GetHeaderByHash(*bc.Hash) (*types.BlockHeader, error) ProcessBlock(*types.Block) (bool, error) - ProcessBlockSignature(signature []byte, pubkey [64]byte, blockHeight uint64, blockHash *bc.Hash) error + ProcessBlockSignature(signature, pubkey []byte, blockHash *bc.Hash) error } type blockMsg struct { @@ -68,7 +67,7 @@ func (m *Manager) processMsg(peerID string, msgType byte, msg ConsensusMessage) return } - logrus.WithFields(logrus.Fields{"module": logModule, "peer": peerID, "type": reflect.TypeOf(msg), "message": msg.String()}).Info("receive message from peer") + logrus.WithFields(logrus.Fields{"module": logModule, "peer": peer.Addr(), "type": reflect.TypeOf(msg), "message": msg.String()}).Info("receive message from peer") switch msg := msg.(type) { case *BlockProposeMsg: @@ -92,18 +91,20 @@ func (m *Manager) handleBlockProposeMsg(peerID string, msg *BlockProposeMsg) { hash := block.Hash() m.peers.MarkBlock(peerID, &hash) m.blockFetcher.processNewBlock(&blockMsg{peerID: peerID, block: block}) + m.peers.SetStatus(peerID, block.Height, &hash) } func (m *Manager) handleBlockSignatureMsg(peerID string, msg *BlockSignatureMsg) { blockHash := bc.NewHash(msg.BlockHash) - if err := m.chain.ProcessBlockSignature(msg.Signature, msg.PubKey, msg.Height, &blockHash); err != nil { - m.peers.AddBanScore(peerID, 20, 0, err.Error()) + if err := m.chain.ProcessBlockSignature(msg.Signature, msg.PubKey, &blockHash); err != nil { + m.peers.ProcessIllegal(peerID, security.LevelMsgIllegal, err.Error()) return } + m.peers.MarkBlockSignature(peerID, msg.Signature) } func (m *Manager) blockProposeMsgBroadcastLoop() { - blockProposeMsgSub, err := m.eventDispatcher.Subscribe(event.NewBlockProposeEvent{}) + blockProposeMsgSub, err := m.eventDispatcher.Subscribe(event.NewProposedBlockEvent{}) if err != nil { logrus.WithFields(logrus.Fields{"module": logModule, "err": err}).Error("failed on subscribe NewBlockProposeEvent") return @@ -118,7 +119,7 @@ func (m *Manager) blockProposeMsgBroadcastLoop() { return } - ev, ok := obj.Data.(event.NewBlockProposeEvent) + ev, ok := obj.Data.(event.NewProposedBlockEvent) if !ok { logrus.WithFields(logrus.Fields{"module": logModule}).Error("event type error") continue @@ -161,16 +162,10 @@ func (m *Manager) blockSignatureMsgBroadcastLoop() { continue } - blockHeader, err := m.chain.GetHeaderByHash(&ev.BlockHash) - if err != nil { - logrus.WithFields(logrus.Fields{"module": logModule, "err": err}).Error("failed on get header by hash from chain.") - return - } - - blockSignatureMsg := NewBroadcastMsg(NewBlockSignatureMsg(ev.BlockHash, blockHeader.Height, ev.Signature, ev.XPub), consensusChannel) + blockSignatureMsg := NewBroadcastMsg(NewBlockSignatureMsg(ev.BlockHash, ev.Signature, ev.XPub), consensusChannel) if err := m.peers.BroadcastMsg(blockSignatureMsg); err != nil { logrus.WithFields(logrus.Fields{"module": logModule, "err": err}).Error("failed on broadcast BlockSignBroadcastMsg.") - return + continue } case <-m.quit: