aboutsummaryrefslogtreecommitdiffstats
path: root/core/configuration-chain.go
diff options
context:
space:
mode:
authorJimmy Hu <jimmy.hu@dexon.org>2018-11-18 22:29:39 +0800
committerGitHub <noreply@github.com>2018-11-18 22:29:39 +0800
commit14e7fb10da9160d01f6dda0b86eaf7fe99d40a79 (patch)
tree81c931fccf1e981cfbd46dbfb3106a010882edba /core/configuration-chain.go
parent591c80dbe9dbdea4cec202b07f4da081020f964a (diff)
downloadtangerine-consensus-14e7fb10da9160d01f6dda0b86eaf7fe99d40a79.tar
tangerine-consensus-14e7fb10da9160d01f6dda0b86eaf7fe99d40a79.tar.gz
tangerine-consensus-14e7fb10da9160d01f6dda0b86eaf7fe99d40a79.tar.bz2
tangerine-consensus-14e7fb10da9160d01f6dda0b86eaf7fe99d40a79.tar.lz
tangerine-consensus-14e7fb10da9160d01f6dda0b86eaf7fe99d40a79.tar.xz
tangerine-consensus-14e7fb10da9160d01f6dda0b86eaf7fe99d40a79.tar.zst
tangerine-consensus-14e7fb10da9160d01f6dda0b86eaf7fe99d40a79.zip
core: Handle issues if DKG/CRS is already finished (#334)
Diffstat (limited to 'core/configuration-chain.go')
-rw-r--r--core/configuration-chain.go21
1 files changed, 17 insertions, 4 deletions
diff --git a/core/configuration-chain.go b/core/configuration-chain.go
index 47a40b1..fdfcd13 100644
--- a/core/configuration-chain.go
+++ b/core/configuration-chain.go
@@ -107,6 +107,10 @@ func (cc *configurationChain) runDKG(round uint64) error {
cc.dkgLock.Lock()
defer cc.dkgLock.Unlock()
if cc.dkg == nil || cc.dkg.round != round {
+ if cc.dkg != nil && cc.dkg.round > round {
+ cc.logger.Warn("DKG canceled", "round", round)
+ return nil
+ }
return ErrDKGNotRegistered
}
if func() bool {
@@ -117,6 +121,11 @@ func (cc *configurationChain) runDKG(round uint64) error {
}() {
return nil
}
+ cc.logger.Debug("Calling Governance.IsDKGFinal", "round", round)
+ if cc.gov.IsDKGFinal(round) {
+ cc.logger.Warn("DKG already final", "round", round)
+ return nil
+ }
ticker := newTicker(cc.gov, round, TickerDKG)
cc.dkgLock.Unlock()
@@ -183,10 +192,6 @@ func (cc *configurationChain) runDKG(round uint64) error {
if err != nil {
return err
}
- signer, err := cc.dkg.recoverShareSecret(gpk.qualifyIDs)
- if err != nil {
- return err
- }
qualifies := ""
for nID := range gpk.qualifyNodeIDs {
qualifies += fmt.Sprintf("%s ", nID.String()[:6])
@@ -196,6 +201,14 @@ func (cc *configurationChain) runDKG(round uint64) error {
"round", round,
"count", len(gpk.qualifyIDs),
"qualifies", qualifies)
+ if _, exist := gpk.qualifyNodeIDs[cc.ID]; !exist {
+ cc.logger.Warn("Self is not in Qualify Nodes")
+ return nil
+ }
+ signer, err := cc.dkg.recoverShareSecret(gpk.qualifyIDs)
+ if err != nil {
+ return err
+ }
cc.dkgResult.Lock()
defer cc.dkgResult.Unlock()
cc.dkgSigner[round] = signer