aboutsummaryrefslogtreecommitdiffstats
path: root/core/vm
diff options
context:
space:
mode:
authorWei-Ning Huang <w@dexon.org>2018-10-23 14:12:10 +0800
committerWei-Ning Huang <w@dexon.org>2019-04-09 21:32:50 +0800
commit30c2100b2ce5179f1421f6c37f0397f2c2333284 (patch)
treedf56790e39df8a878871e86c02c298049398db4a /core/vm
parent4395f2b17fcc20f733ee37c3e3e16664821015dc (diff)
downloaddexon-30c2100b2ce5179f1421f6c37f0397f2c2333284.tar
dexon-30c2100b2ce5179f1421f6c37f0397f2c2333284.tar.gz
dexon-30c2100b2ce5179f1421f6c37f0397f2c2333284.tar.bz2
dexon-30c2100b2ce5179f1421f6c37f0397f2c2333284.tar.lz
dexon-30c2100b2ce5179f1421f6c37f0397f2c2333284.tar.xz
dexon-30c2100b2ce5179f1421f6c37f0397f2c2333284.tar.zst
dexon-30c2100b2ce5179f1421f6c37f0397f2c2333284.zip
dex: fix DKG round switching
Diffstat (limited to 'core/vm')
-rw-r--r--core/vm/governance.go24
1 files changed, 18 insertions, 6 deletions
diff --git a/core/vm/governance.go b/core/vm/governance.go
index d30987b11..5c5822261 100644
--- a/core/vm/governance.go
+++ b/core/vm/governance.go
@@ -475,11 +475,11 @@ const abiJSON = `
"constant": false,
"inputs": [
{
- "name": "round",
+ "name": "Round",
"type": "uint256"
},
{
- "name": "height",
+ "name": "Height",
"type": "uint256"
}
],
@@ -493,6 +493,10 @@ const abiJSON = `
"constant": false,
"inputs": [
{
+ "name": "Round",
+ "type": "uint256"
+ },
+ {
"name": "SignedCRS",
"type": "bytes"
}
@@ -658,11 +662,14 @@ func RunGovernanceContract(evm *EVM, input []byte, contract *Contract) (
}
return g.addDKGFinalize(args.Round, args.Finalize)
case "proposeCRS":
- var signedCRS []byte
- if err := method.Inputs.Unpack(&signedCRS, arguments); err != nil {
+ args := struct {
+ Round *big.Int
+ SignedCRS []byte
+ }{}
+ if err := method.Inputs.Unpack(&args, arguments); err != nil {
return nil, errExecutionReverted
}
- return g.proposeCRS(signedCRS)
+ return g.proposeCRS(args.Round, args.SignedCRS)
case "stake":
var publicKey []byte
if err := method.Inputs.Unpack(&publicKey, arguments); err != nil {
@@ -1548,8 +1555,13 @@ func (g *GovernanceContract) unstake() ([]byte, error) {
return nil, nil
}
-func (g *GovernanceContract) proposeCRS(signedCRS []byte) ([]byte, error) {
+func (g *GovernanceContract) proposeCRS(nextRound *big.Int, signedCRS []byte) ([]byte, error) {
round := g.state.Round()
+
+ if nextRound.Cmp(round) <= 0 {
+ return nil, errExecutionReverted
+ }
+
prevCRS := g.state.CRS(round)
// Prepare DKGMasterPublicKeys.