From f0dc999e1bed55b1a08749b99303f0336164ed5e Mon Sep 17 00:00:00 2001 From: Konstantin <355847+Frozen@users.noreply.github.com> Date: Mon, 26 Feb 2024 15:02:04 -0400 Subject: [PATCH] Get only valid blocks. (#4628) --- consensus/fbft_log.go | 13 +++++++++++-- consensus/view_change_msg.go | 4 +++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/consensus/fbft_log.go b/consensus/fbft_log.go index 982aecab7..34637183a 100644 --- a/consensus/fbft_log.go +++ b/consensus/fbft_log.go @@ -222,11 +222,20 @@ func (log *FBFTLog) GetMessagesByTypeSeqViewHash(typ msg_pb.MessageType, blockNu return found } +func (log *FBFTLog) all(filters []func(*FBFTMessage, *FBFTLog) bool, value *FBFTMessage) bool { + for _, filter := range filters { + if !filter(value, log) { + return false + } + } + return true +} + // GetMessagesByTypeSeq returns pbft messages with matching type, blockNum -func (log *FBFTLog) GetMessagesByTypeSeq(typ msg_pb.MessageType, blockNum uint64) []*FBFTMessage { +func (log *FBFTLog) GetMessagesByTypeSeq(typ msg_pb.MessageType, blockNum uint64, filters ...func(message *FBFTMessage, log *FBFTLog) bool) []*FBFTMessage { var found []*FBFTMessage for _, msg := range log.messages { - if msg.MessageType == typ && msg.BlockNum == blockNum && msg.Verified { + if msg.MessageType == typ && msg.BlockNum == blockNum && msg.Verified && log.all(filters, msg) { found = append(found, msg) } } diff --git a/consensus/view_change_msg.go b/consensus/view_change_msg.go index 6c4b08005..8272134c5 100644 --- a/consensus/view_change_msg.go +++ b/consensus/view_change_msg.go @@ -33,7 +33,9 @@ func (consensus *Consensus) constructViewChangeMessage(priKey *bls.PrivateKeyWra } preparedMsgs := consensus.fBFTLog.GetMessagesByTypeSeq( - msg_pb.MessageType_PREPARED, consensus.getBlockNum(), + msg_pb.MessageType_PREPARED, consensus.getBlockNum(), func(message *FBFTMessage, log *FBFTLog) bool { + return log.IsBlockVerified(message.BlockHash) + }, ) preparedMsg := consensus.fBFTLog.FindMessageByMaxViewID(preparedMsgs)