diff --git a/epoch.go b/epoch.go index 593fac9..3dbda67 100644 --- a/epoch.go +++ b/epoch.go @@ -723,6 +723,13 @@ func (e *Epoch) maybeCollectNotarization() error { return nil } + from := make([]NodeID, 0, voteCount) + for _, vote := range votesForCurrentRound { + from = append(from, vote.Signature.Signer) + } + e.Logger.Verbo("Counting votes", zap.Uint64("round", e.round), + zap.Int("votes", voteCount), zap.String("from", fmt.Sprintf("%s", from))) + // TODO: store votes before receiving the block block := e.rounds[e.round].block @@ -996,7 +1003,7 @@ func (e *Epoch) createBlockVerificationTask(block Block, from NodeID, vote Vote) } round.votes[string(vote.Signature.Signer)] = &vote - if err := e.doProposed(block, vote, from); err != nil { + if err := e.doProposed(block); err != nil { e.Logger.Warn("Failed voting on block", zap.Error(err)) } @@ -1237,7 +1244,7 @@ func (e *Epoch) startRound() error { return e.handleBlockMessage(msgsForRound.proposal, leaderForCurrentRound) } -func (e *Epoch) doProposed(block Block, voteFromLeader Vote, from NodeID) error { +func (e *Epoch) doProposed(block Block) error { vote, err := e.voteOnBlock(block) if err != nil { return err @@ -1260,8 +1267,7 @@ func (e *Epoch) doProposed(block Block, voteFromLeader Vote, from NodeID) error if err := e.handleVoteMessage(&vote, e.ID); err != nil { return err } - - return e.handleVoteMessage(&voteFromLeader, e.ID) + return nil } func (e *Epoch) voteOnBlock(block Block) (Vote, error) { diff --git a/epoch_test.go b/epoch_test.go index 8e7e453..9473f4d 100644 --- a/epoch_test.go +++ b/epoch_test.go @@ -80,6 +80,10 @@ func notarizeAndFinalizeRound(t *testing.T, nodes []NodeID, round uint64, e *Epo // start at one since our node has already voted for i := 1; i < quorum; i++ { + // Skip the vote of the block proposer + if leader.Equals(nodes[i]) { + continue + } injectTestVote(t, e, block, nodes[i]) }