aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJimmy Hu <jimmy.hu@dexon.org>2019-04-15 15:45:34 +0800
committerGitHub <noreply@github.com>2019-04-15 15:45:34 +0800
commitd554efde81d4385158c039f906e213bcdfd0313b (patch)
tree419b393c5533a2784ab46dca735cae526816044e
parente9a1d3bca8353ee206d262ab1fad2d7e3e0b24a5 (diff)
downloadtangerine-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.go3
-rw-r--r--core/agreement-state_test.go4
-rw-r--r--core/agreement.go9
-rw-r--r--core/agreement_test.go4
-rw-r--r--core/consensus.go15
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) {