From 21c420db895b1aa48709982cd145a119c74de6fa Mon Sep 17 00:00:00 2001 From: Jimmy Hu <jimmy.hu@dexon.org> Date: Mon, 7 Jan 2019 17:21:08 +0800 Subject: core: BA 3.0 (#408) * Add v3 enum * Add BA leader calculation * Fast BA * Add unittest for Fast BA * Add comment * Select leader in notarySet --- core/utils.go | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'core/utils.go') diff --git a/core/utils.go b/core/utils.go index 0c2d155..3b1069e 100644 --- a/core/utils.go +++ b/core/utils.go @@ -159,8 +159,10 @@ func VerifyAgreementResult( if len(res.Votes) < len(notarySet)/3*2+1 { return ErrNotEnoughVotes } - if len(res.Votes) > len(notarySet) { - return ErrIncorrectVoteProposer + voted := make(map[types.NodeID]struct{}, len(notarySet)) + voteType := res.Votes[0].Type + if voteType != types.VoteFast && voteType != types.VoteCom { + return ErrIncorrectVoteType } for _, vote := range res.Votes { if res.IsEmptyBlock { @@ -172,7 +174,7 @@ func VerifyAgreementResult( return ErrIncorrectVoteBlockHash } } - if vote.Type != types.VoteCom { + if vote.Type != voteType { return ErrIncorrectVoteType } if vote.Position != res.Position { @@ -188,6 +190,10 @@ func VerifyAgreementResult( if !ok { return ErrIncorrectVoteSignature } + voted[vote.ProposerID] = struct{}{} + } + if len(voted) < len(notarySet)/3*2+1 { + return ErrNotEnoughVotes } return nil } -- cgit