diff options
author | Jimmy Hu <jimmy.hu@dexon.org> | 2019-04-15 15:45:34 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-04-15 15:45:34 +0800 |
commit | d554efde81d4385158c039f906e213bcdfd0313b (patch) | |
tree | 419b393c5533a2784ab46dca735cae526816044e | |
parent | e9a1d3bca8353ee206d262ab1fad2d7e3e0b24a5 (diff) | |
download | tangerine-consensus-d554efde81d4385158c039f906e213bcdfd0313b.tar.gz tangerine-consensus-d554efde81d4385158c039f906e213bcdfd0313b.tar.zst tangerine-consensus-d554efde81d4385158c039f906e213bcdfd0313b.zip |
core: add whether to report to VerifyPSig (#572)
* core: add whether to report to VerifyPSig
* fixup
-rw-r--r-- | core/agreement-mgr.go | 3 | ||||
-rw-r--r-- | core/agreement-state_test.go | 4 | ||||
-rw-r--r-- | core/agreement.go | 9 | ||||
-rw-r--r-- | core/agreement_test.go | 4 | ||||
-rw-r--r-- | core/consensus.go | 15 |
5 files changed, 21 insertions, 14 deletions
diff --git a/core/agreement-mgr.go b/core/agreement-mgr.go index f65903d..ef1730c 100644 --- a/core/agreement-mgr.go +++ b/core/agreement-mgr.go @@ -295,6 +295,9 @@ func (mgr *agreementMgr) processVote(v *types.Vote) (err error) { mgr.baModule.updateFilter(mgr.voteFilter) mgr.voteFilter.AddVote(v) } + if err == ErrSkipButNoError { + err = nil + } return } diff --git a/core/agreement-state_test.go b/core/agreement-state_test.go index 43631ea..6c06ef1 100644 --- a/core/agreement-state_test.go +++ b/core/agreement-state_test.go @@ -43,8 +43,8 @@ type agreementStateTestReceiver struct { leader *leaderSelector } -func (r *agreementStateTestReceiver) VerifyPartialSignature(*types.Vote) bool { - return true +func (r *agreementStateTestReceiver) VerifyPartialSignature(*types.Vote) (bool, bool) { + return true, false } func (r *agreementStateTestReceiver) ProposeVote(vote *types.Vote) { diff --git a/core/agreement.go b/core/agreement.go index cb46771..7830af0 100644 --- a/core/agreement.go +++ b/core/agreement.go @@ -85,7 +85,7 @@ type agreementReceiver interface { PullBlocks(common.Hashes) ReportForkVote(v1, v2 *types.Vote) ReportForkBlock(b1, b2 *types.Block) - VerifyPartialSignature(vote *types.Vote) bool + VerifyPartialSignature(vote *types.Vote) (bool, bool) } type pendingBlock struct { @@ -372,8 +372,11 @@ func (a *agreement) sanityCheck(vote *types.Vote) error { // TODO(jimmy): maybe we can verify partial signature at agreement-mgr. return nil } - if !a.data.recv.VerifyPartialSignature(vote) { - return ErrIncorrectVotePartialSignature + if ok, report := a.data.recv.VerifyPartialSignature(vote); !ok { + if report { + return ErrIncorrectVotePartialSignature + } + return ErrSkipButNoError } return nil } diff --git a/core/agreement_test.go b/core/agreement_test.go index 0854c7e..b784560 100644 --- a/core/agreement_test.go +++ b/core/agreement_test.go @@ -34,8 +34,8 @@ type agreementTestReceiver struct { agreementIndex int } -func (r *agreementTestReceiver) VerifyPartialSignature(*types.Vote) bool { - return true +func (r *agreementTestReceiver) VerifyPartialSignature(*types.Vote) (bool, bool) { + return true, false } func (r *agreementTestReceiver) ProposeVote(vote *types.Vote) { diff --git a/core/consensus.go b/core/consensus.go index ba7d8fd..e7449c2 100644 --- a/core/consensus.go +++ b/core/consensus.go @@ -89,28 +89,29 @@ func (recv *consensusBAReceiver) emptyBlockHash(pos types.Position) ( return hash, nil } -func (recv *consensusBAReceiver) VerifyPartialSignature(vote *types.Vote) bool { +func (recv *consensusBAReceiver) VerifyPartialSignature(vote *types.Vote) ( + bool, bool) { if vote.Position.Round >= DKGDelayRound && vote.BlockHash != types.SkipBlockHash { if vote.Type == types.VoteCom || vote.Type == types.VoteFastCom { if recv.npks == nil { recv.consensus.logger.Debug( "Unable to verify psig, npks is nil", "vote", vote) - return false + return false, false } if vote.Position.Round != recv.npks.Round { recv.consensus.logger.Debug( "Unable to verify psig, round of npks mismatch", "vote", vote, "npksRound", recv.npks.Round) - return false + return false, false } pubKey, exist := recv.npks.PublicKeys[vote.ProposerID] if !exist { recv.consensus.logger.Debug( "Unable to verify psig, proposer is not qualified", "vote", vote) - return false + return false, true } blockHash := vote.BlockHash if blockHash == types.NullBlockHash { @@ -121,14 +122,14 @@ func (recv *consensusBAReceiver) VerifyPartialSignature(vote *types.Vote) bool { "Failed to verify vote for empty block", "position", vote.Position, "error", err) - return false + return false, true } } return pubKey.VerifySignature( - vote.BlockHash, crypto.Signature(vote.PartialSignature)) + blockHash, crypto.Signature(vote.PartialSignature)), true } } - return len(vote.PartialSignature.Signature) == 0 + return len(vote.PartialSignature.Signature) == 0, true } func (recv *consensusBAReceiver) ProposeVote(vote *types.Vote) { |