From 7db36faceacb33530dcce7c6bfb3893174bed69c Mon Sep 17 00:00:00 2001 From: Jimmy Hu Date: Sat, 30 Mar 2019 22:53:11 +0800 Subject: core/vm: resetDKG if ttoo less qualified (#318) --- core/vm/oracle_contracts.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/core/vm/oracle_contracts.go b/core/vm/oracle_contracts.go index cf9164a5f..fbed2d48d 100644 --- a/core/vm/oracle_contracts.go +++ b/core/vm/oracle_contracts.go @@ -1966,7 +1966,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 -- cgit v1.2.3