aboutsummaryrefslogtreecommitdiffstats
path: root/core/agreement-mgr.go
diff options
context:
space:
mode:
authorJimmy Hu <jimmy.hu@dexon.org>2019-04-11 16:45:38 +0800
committerGitHub <noreply@github.com>2019-04-11 16:45:38 +0800
commit5b0aad05d7ccc1dabedfd1f3bfc0d584db849e63 (patch)
treebdbecd8695ed5225aa24f56b6a3c0acc7244f68f /core/agreement-mgr.go
parent269fed574986331e07bf931b2c9b1a495c40f8ac (diff)
downloaddexon-consensus-5b0aad05d7ccc1dabedfd1f3bfc0d584db849e63.tar
dexon-consensus-5b0aad05d7ccc1dabedfd1f3bfc0d584db849e63.tar.gz
dexon-consensus-5b0aad05d7ccc1dabedfd1f3bfc0d584db849e63.tar.bz2
dexon-consensus-5b0aad05d7ccc1dabedfd1f3bfc0d584db849e63.tar.lz
dexon-consensus-5b0aad05d7ccc1dabedfd1f3bfc0d584db849e63.tar.xz
dexon-consensus-5b0aad05d7ccc1dabedfd1f3bfc0d584db849e63.tar.zst
dexon-consensus-5b0aad05d7ccc1dabedfd1f3bfc0d584db849e63.zip
core: change CRSSignature with bls (#563)
Diffstat (limited to 'core/agreement-mgr.go')
-rw-r--r--core/agreement-mgr.go20
1 files changed, 18 insertions, 2 deletions
diff --git a/core/agreement-mgr.go b/core/agreement-mgr.go
index af0adf2..ac28955 100644
--- a/core/agreement-mgr.go
+++ b/core/agreement-mgr.go
@@ -36,17 +36,33 @@ var (
ErrRoundOutOfRange = errors.New("round out of range")
ErrInvalidBlock = errors.New("invalid block")
ErrNoValidLeader = errors.New("no valid leader")
+ ErrIncorrectCRSSignature = errors.New("incorrect CRS signature")
+ ErrBlockTooOld = errors.New("block too old")
)
const maxResultCache = 100
// genValidLeader generate a validLeader function for agreement modules.
func genValidLeader(
- mgr *agreementMgr) func(*types.Block) (bool, error) {
- return func(block *types.Block) (bool, error) {
+ mgr *agreementMgr) validLeaderFn {
+ return func(block *types.Block, crs common.Hash) (bool, error) {
if block.Timestamp.After(time.Now()) {
return false, nil
}
+ if block.Position.Round >= DKGDelayRound {
+ if mgr.recv.npks == nil {
+ return false, nil
+ }
+ if block.Position.Round > mgr.recv.npks.Round {
+ return false, nil
+ }
+ if block.Position.Round < mgr.recv.npks.Round {
+ return false, ErrBlockTooOld
+ }
+ }
+ if !utils.VerifyCRSSignature(block, crs, mgr.recv.npks) {
+ return false, ErrIncorrectCRSSignature
+ }
if err := mgr.bcModule.sanityCheck(block); err != nil {
if err == ErrRetrySanityCheckLater {
return false, nil