"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"
)
// 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.
BestBlockHeight() uint64
GetHeaderByHash(*bc.Hash) (*types.BlockHeader, error)
ProcessBlock(*types.Block) (bool, error)
- ProcessBlockSignature(signature, pubkey []byte, blockHeight uint64, blockHash *bc.Hash) error
+ ProcessBlockSignature(signature, pubkey []byte, blockHash *bc.Hash) error
}
type blockMsg struct {
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:
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
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
return
}
- blockSignatureMsg := NewBroadcastMsg(NewBlockSignatureMsg(ev.BlockHash, blockHeader.Height, ev.Signature, m.sw.ID()), consensusChannel)
+ blockSignatureMsg := NewBroadcastMsg(NewBlockSignatureMsg(ev.BlockHash, blockHeader.Height, 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