aboutsummaryrefslogtreecommitdiffstats
path: root/simulation/config
diff options
context:
space:
mode:
authorMission Liao <mission.liao@dexon.org>2018-12-26 10:15:51 +0800
committerGitHub <noreply@github.com>2018-12-26 10:15:51 +0800
commitd333dc1a24df26ae8e8e3ffa2d700c1116a93ba2 (patch)
treef615cfa34cca680dd3e4a5930e06a6ff03ac1664 /simulation/config
parentdce509a13ef5873b9cae3c1cabdb97e219b6fb7d (diff)
downloaddexon-consensus-d333dc1a24df26ae8e8e3ffa2d700c1116a93ba2.tar
dexon-consensus-d333dc1a24df26ae8e8e3ffa2d700c1116a93ba2.tar.gz
dexon-consensus-d333dc1a24df26ae8e8e3ffa2d700c1116a93ba2.tar.bz2
dexon-consensus-d333dc1a24df26ae8e8e3ffa2d700c1116a93ba2.tar.lz
dexon-consensus-d333dc1a24df26ae8e8e3ffa2d700c1116a93ba2.tar.xz
dexon-consensus-d333dc1a24df26ae8e8e3ffa2d700c1116a93ba2.tar.zst
dexon-consensus-d333dc1a24df26ae8e8e3ffa2d700c1116a93ba2.zip
simulation: support config change (#381)
Diffstat (limited to 'simulation/config')
-rw-r--r--simulation/config/config.go60
-rw-r--r--simulation/config/utils.go80
2 files changed, 122 insertions, 18 deletions
diff --git a/simulation/config/config.go b/simulation/config/config.go
index 023c4df..797145c 100644
--- a/simulation/config/config.go
+++ b/simulation/config/config.go
@@ -18,24 +18,27 @@
package config
import (
+ "fmt"
"math"
"os"
+ "github.com/dexon-foundation/dexon-consensus/core"
"github.com/dexon-foundation/dexon-consensus/core/test"
"github.com/naoina/toml"
)
// Consensus settings.
type Consensus struct {
- PhiRatio float32
- K int
- ChainNum uint32
- GenesisCRS string `toml:"genesis_crs"`
- LambdaBA int `toml:"lambda_ba"`
- LambdaDKG int `toml:"lambda_dkg"`
- RoundInterval int
- NotarySetSize uint32
- DKGSetSize uint32 `toml:"dkg_set_size"`
+ PhiRatio float32
+ K int
+ NumChains uint32
+ GenesisCRS string `toml:"genesis_crs"`
+ LambdaBA int `toml:"lambda_ba"`
+ LambdaDKG int `toml:"lambda_dkg"`
+ RoundInterval int
+ NotarySetSize uint32
+ DKGSetSize uint32 `toml:"dkg_set_size"`
+ MinBlockInterval int
}
// Legacy config.
@@ -50,6 +53,7 @@ type Node struct {
Legacy Legacy
Num uint32
MaxBlock uint64
+ Changes []Change
}
// Networking config.
@@ -67,6 +71,25 @@ type Scheduler struct {
WorkerNum int
}
+// Change represent future configuration changes.
+type Change struct {
+ Round uint64
+ Type string
+ Value string
+}
+
+// RegisterChange reigster this change to a test.Governance instance.
+func (c Change) RegisterChange(gov *test.Governance) error {
+ if c.Round < core.ConfigRoundShift {
+ panic(fmt.Errorf(
+ "attempt to register config change that never be executed: %v",
+ c.Round))
+ }
+ t := StateChangeTypeFromString(c.Type)
+ return gov.RegisterConfigChange(
+ c.Round, t, StateChangeValueFromString(t, c.Value))
+}
+
// Config represents the configuration for simulation.
type Config struct {
Title string
@@ -87,15 +110,16 @@ func GenerateDefault(path string) error {
Title: "DEXON Consensus Simulation Config",
Node: Node{
Consensus: Consensus{
- PhiRatio: float32(2) / 3,
- K: 1,
- ChainNum: 7,
- GenesisCRS: "In DEXON we trust.",
- LambdaBA: 250,
- LambdaDKG: 1000,
- RoundInterval: 30 * 1000,
- NotarySetSize: 7,
- DKGSetSize: 7,
+ PhiRatio: float32(2) / 3,
+ K: 1,
+ NumChains: 7,
+ GenesisCRS: "In DEXON we trust.",
+ LambdaBA: 250,
+ LambdaDKG: 1000,
+ RoundInterval: 30 * 1000,
+ NotarySetSize: 7,
+ DKGSetSize: 7,
+ MinBlockInterval: 750,
},
Legacy: Legacy{
ProposeIntervalMean: 500,
diff --git a/simulation/config/utils.go b/simulation/config/utils.go
new file mode 100644
index 0000000..9d97fbd
--- /dev/null
+++ b/simulation/config/utils.go
@@ -0,0 +1,80 @@
+// Copyright 2018 The dexon-consensus Authors
+// This file is part of the dexon-consensus library.
+//
+// The dexon-consensus library is free software: you can redistribute it
+// and/or modify it under the terms of the GNU Lesser General Public License as
+// published by the Free Software Foundation, either version 3 of the License,
+// or (at your option) any later version.
+//
+// The dexon-consensus library is distributed in the hope that it will be
+// useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
+// General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with the dexon-consensus library. If not, see
+// <http://www.gnu.org/licenses/>.
+
+package config
+
+import (
+ "fmt"
+ "strconv"
+
+ "github.com/dexon-foundation/dexon-consensus/core/test"
+)
+
+// StateChangeTypeFromString convert a string to test.StateChangeType.
+func StateChangeTypeFromString(s string) test.StateChangeType {
+ switch s {
+ case "num_chains":
+ return test.StateChangeNumChains
+ case "lambda_ba":
+ return test.StateChangeLambdaBA
+ case "lambda_dkg":
+ return test.StateChangeLambdaDKG
+ case "round_interval":
+ return test.StateChangeRoundInterval
+ case "min_block_interval":
+ return test.StateChangeMinBlockInterval
+ case "k":
+ return test.StateChangeK
+ case "phi_ratio":
+ return test.StateChangePhiRatio
+ case "notary_set_size":
+ return test.StateChangeNotarySetSize
+ case "dkg_set_size":
+ return test.StateChangeDKGSetSize
+ }
+ panic(fmt.Errorf("unsupported state change type %s", s))
+}
+
+// StateChangeValueFromString converts a string to a value for state change
+// request.
+func StateChangeValueFromString(
+ t test.StateChangeType, v string) interface{} {
+ switch t {
+ case test.StateChangeNumChains, test.StateChangeNotarySetSize,
+ test.StateChangeDKGSetSize:
+ ret, err := strconv.ParseUint(v, 10, 32)
+ if err != nil {
+ panic(err)
+ }
+ return uint32(ret)
+ case test.StateChangeLambdaBA, test.StateChangeLambdaDKG,
+ test.StateChangeRoundInterval, test.StateChangeMinBlockInterval,
+ test.StateChangeK:
+ ret, err := strconv.ParseInt(v, 10, 32)
+ if err != nil {
+ panic(err)
+ }
+ return int(ret)
+ case test.StateChangePhiRatio:
+ ret, err := strconv.ParseFloat(v, 32)
+ if err != nil {
+ panic(err)
+ }
+ return float32(ret)
+ }
+ panic(fmt.Errorf("unsupported state change type %s", t))
+}