diff options
author | Jimmy Hu <jimmy.hu@dexon.org> | 2019-03-30 22:53:11 +0800 |
---|---|---|
committer | Wei-Ning Huang <w@dexon.org> | 2019-04-09 13:50:05 +0800 |
commit | 3931c32289f23a9aaff8e5b86d58aa284eeeeea4 (patch) | |
tree | 332c038930264ffa68c246703821a518b7ae258c | |
parent | 9fc602fc03a22679e361282aefb6e65f19ac18c5 (diff) | |
download | dexon-3931c32289f23a9aaff8e5b86d58aa284eeeeea4.tar dexon-3931c32289f23a9aaff8e5b86d58aa284eeeeea4.tar.gz dexon-3931c32289f23a9aaff8e5b86d58aa284eeeeea4.tar.bz2 dexon-3931c32289f23a9aaff8e5b86d58aa284eeeeea4.tar.lz dexon-3931c32289f23a9aaff8e5b86d58aa284eeeeea4.tar.xz dexon-3931c32289f23a9aaff8e5b86d58aa284eeeeea4.tar.zst dexon-3931c32289f23a9aaff8e5b86d58aa284eeeeea4.zip |
core/vm: resetDKG if ttoo less qualified (#318)
-rw-r--r-- | core/vm/oracle_contracts.go | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/core/vm/oracle_contracts.go b/core/vm/oracle_contracts.go index 4459b95b9..5ea4d4790 100644 --- a/core/vm/oracle_contracts.go +++ b/core/vm/oracle_contracts.go @@ -1968,7 +1968,15 @@ func (g *GovernanceContract) resetDKG(newSignedCRS []byte) ([]byte, error) { // If 2f + 1 of DKG set is finalized, check if DKG succeeded. if g.state.DKGFinalizedsCount().Uint64() >= threshold { - _, err := g.coreDKGUtils.NewGroupPublicKey(&g.state, nextRound, tsigThreshold) + gpk, err := g.coreDKGUtils.NewGroupPublicKey(&g.state, nextRound, tsigThreshold) + if gpk, ok := gpk.(*dkgTypes.GroupPublicKey); ok { + nextRound := new(big.Int).Add(g.evm.Round, big.NewInt(1)) + if len(gpk.QualifyNodeIDs) < coreUtils.GetDKGValidThreshold(&coreTypes.Config{ + NotarySetSize: uint32(g.configNotarySetSize(nextRound).Uint64())}) { + err = dkgTypes.ErrNotReachThreshold + } + } + // DKG success. if err == nil { return nil, errExecutionReverted |