aboutsummaryrefslogtreecommitdiffstats
path: root/params
diff options
context:
space:
mode:
authorWei-Ning Huang <w@dexon.org>2019-01-13 16:21:17 +0800
committerWei-Ning Huang <w@byzantine-lab.io>2019-06-12 17:27:21 +0800
commit56680e215e7e27ab8896d782876ee64881cae6ff (patch)
tree40daa411b7f1ee239b702ccc7987b6130892d7e6 /params
parentf82a81c6fa36c8ee6ba6a55e0662930c8f0d2658 (diff)
downloadgo-tangerine-56680e215e7e27ab8896d782876ee64881cae6ff.tar
go-tangerine-56680e215e7e27ab8896d782876ee64881cae6ff.tar.gz
go-tangerine-56680e215e7e27ab8896d782876ee64881cae6ff.tar.bz2
go-tangerine-56680e215e7e27ab8896d782876ee64881cae6ff.tar.lz
go-tangerine-56680e215e7e27ab8896d782876ee64881cae6ff.tar.xz
go-tangerine-56680e215e7e27ab8896d782876ee64881cae6ff.tar.zst
go-tangerine-56680e215e7e27ab8896d782876ee64881cae6ff.zip
consensus: implement DEXON cryptoeconomics v4.0 (#145)
Diffstat (limited to 'params')
-rw-r--r--params/config.go147
-rw-r--r--params/gen_dexcon_config.go82
2 files changed, 126 insertions, 103 deletions
diff --git a/params/config.go b/params/config.go
index c2d729c59..b63215c85 100644
--- a/params/config.go
+++ b/params/config.go
@@ -26,8 +26,8 @@ import (
// Genesis hashes to enforce below configs on.
var (
- MainnetGenesisHash = common.HexToHash("0x4310c4984de8bf7ac1c509232d21511fae2cd73e8a1bb8365fe4e489042bc407")
- TestnetGenesisHash = common.HexToHash("0x1fdd7ca7ccdd7c3a481f4162b8ca02a4db03859b4abaed96f7e259266d818a13")
+ MainnetGenesisHash = common.HexToHash("0xeffc8ddbc16ebd98411bb902290ba74a9cc699a4bd02652afecbf864ae542008")
+ TestnetGenesisHash = common.HexToHash("0xde641c0a52093329aaa5096ed19607243c98390285c5a4f4291c635b9f01301c")
)
// TrustedCheckpoints associates each known checkpoint with the genesis hash of
@@ -52,21 +52,23 @@ var (
ConstantinopleBlock: big.NewInt(0),
PetersburgBlock: big.NewInt(0),
Dexcon: &DexconConfig{
- GenesisCRSText: "In DEXON, we trust.",
- Owner: common.HexToAddress("BF8C48A620bacc46907f9B89732D25E47A2D7Cf7"),
- MinStake: new(big.Int).Mul(big.NewInt(1e18), big.NewInt(1e5)),
- LockupPeriod: 86400 * 3 * 1000,
- BlockReward: big.NewInt(1e18),
- BlockGasLimit: 40000000,
- NumChains: 4,
- LambdaBA: 250,
- LambdaDKG: 2500,
- K: 0,
- PhiRatio: 0.667,
- NotarySetSize: 4,
- DKGSetSize: 4,
- RoundInterval: 600000,
- MinBlockInterval: 900,
+ GenesisCRSText: "In DEXON, we trust.",
+ Owner: common.HexToAddress("BF8C48A620bacc46907f9B89732D25E47A2D7Cf7"),
+ MinStake: new(big.Int).Mul(big.NewInt(1e18), big.NewInt(1e5)),
+ LockupPeriod: 86400 * 3 * 1000,
+ MiningVelocity: 0.1875,
+ NextHalvingSupply: new(big.Int).Mul(big.NewInt(1e18), big.NewInt(2.5e9)),
+ LastHalvedAmount: new(big.Int).Mul(big.NewInt(1e18), big.NewInt(1.5e9)),
+ BlockGasLimit: 40000000,
+ NumChains: 6,
+ LambdaBA: 250,
+ LambdaDKG: 2500,
+ K: 0,
+ PhiRatio: 0.667,
+ NotarySetSize: 4,
+ DKGSetSize: 4,
+ RoundInterval: 600000,
+ MinBlockInterval: 1000,
FineValues: []*big.Int{
new(big.Int).Mul(big.NewInt(1e18), big.NewInt(1e4)),
new(big.Int).Mul(big.NewInt(1e18), big.NewInt(1e4)),
@@ -97,21 +99,23 @@ var (
ConstantinopleBlock: big.NewInt(0),
PetersburgBlock: big.NewInt(0),
Dexcon: &DexconConfig{
- GenesisCRSText: "In DEXON, we trust.",
- Owner: common.HexToAddress("BF8C48A620bacc46907f9B89732D25E47A2D7Cf7"),
- MinStake: new(big.Int).Mul(big.NewInt(1e18), big.NewInt(1e5)),
- LockupPeriod: 86400 * 3 * 1000,
- BlockReward: big.NewInt(1e18),
- BlockGasLimit: 40000000,
- NumChains: 6,
- LambdaBA: 250,
- LambdaDKG: 2500,
- K: 0,
- PhiRatio: 0.667,
- NotarySetSize: 4,
- DKGSetSize: 4,
- RoundInterval: 600000,
- MinBlockInterval: 900,
+ GenesisCRSText: "In DEXON, we trust.",
+ Owner: common.HexToAddress("BF8C48A620bacc46907f9B89732D25E47A2D7Cf7"),
+ MinStake: new(big.Int).Mul(big.NewInt(1e18), big.NewInt(1e5)),
+ LockupPeriod: 86400 * 3 * 1000,
+ MiningVelocity: 0.1875,
+ NextHalvingSupply: new(big.Int).Mul(big.NewInt(1e18), big.NewInt(6e6)),
+ LastHalvedAmount: new(big.Int).Mul(big.NewInt(1e18), big.NewInt(2e6)),
+ BlockGasLimit: 40000000,
+ NumChains: 6,
+ LambdaBA: 250,
+ LambdaDKG: 2500,
+ K: 0,
+ PhiRatio: 0.667,
+ NotarySetSize: 4,
+ DKGSetSize: 4,
+ RoundInterval: 600000,
+ MinBlockInterval: 1000,
FineValues: []*big.Int{
new(big.Int).Mul(big.NewInt(1e18), big.NewInt(1e4)),
new(big.Int).Mul(big.NewInt(1e18), big.NewInt(1e4)),
@@ -133,21 +137,23 @@ var (
ConstantinopleBlock: big.NewInt(0),
PetersburgBlock: big.NewInt(0),
Dexcon: &DexconConfig{
- GenesisCRSText: "In DEXON, we trust.",
- Owner: common.HexToAddress("BF8C48A620bacc46907f9B89732D25E47A2D7Cf7"),
- MinStake: new(big.Int).Mul(big.NewInt(1e18), big.NewInt(1e5)),
- LockupPeriod: 86400 * 3 * 1000,
- BlockReward: big.NewInt(1e18),
- BlockGasLimit: 40000000,
- NumChains: 6,
- LambdaBA: 400,
- LambdaDKG: 10000,
- K: 0,
- PhiRatio: 0.667,
- NotarySetSize: 21,
- DKGSetSize: 13,
- RoundInterval: 3600000,
- MinBlockInterval: 900,
+ GenesisCRSText: "In DEXON, we trust.",
+ Owner: common.HexToAddress("BF8C48A620bacc46907f9B89732D25E47A2D7Cf7"),
+ MinStake: new(big.Int).Mul(big.NewInt(1e18), big.NewInt(1e5)),
+ LockupPeriod: 86400 * 3 * 1000,
+ MiningVelocity: 0.1875,
+ NextHalvingSupply: new(big.Int).Mul(big.NewInt(1e18), big.NewInt(6e6)),
+ LastHalvedAmount: new(big.Int).Mul(big.NewInt(1e18), big.NewInt(2e6)),
+ BlockGasLimit: 40000000,
+ NumChains: 6,
+ LambdaBA: 400,
+ LambdaDKG: 10000,
+ K: 0,
+ PhiRatio: 0.667,
+ NotarySetSize: 21,
+ DKGSetSize: 13,
+ RoundInterval: 3600000,
+ MinBlockInterval: 1000,
FineValues: []*big.Int{
new(big.Int).Mul(big.NewInt(1e18), big.NewInt(1e4)),
new(big.Int).Mul(big.NewInt(1e18), big.NewInt(1e4)),
@@ -281,38 +287,43 @@ func (c *CliqueConfig) String() string {
// DexconConfig is the consensus engine configs for DEXON consensus.
type DexconConfig struct {
- GenesisCRSText string `json:"genesisCRSText"`
- Owner common.Address `json:"owner"`
- MinStake *big.Int `json:"minStake"`
- LockupPeriod uint64 `json:"lockupPeriod"`
- BlockReward *big.Int `json:"blockReward"`
- BlockGasLimit uint64 `json:"blockGasLimit"`
- NumChains uint32 `json:"numChains"`
- LambdaBA uint64 `json:"lambdaBA"`
- LambdaDKG uint64 `json:"lambdaDKG"`
- K uint32 `json:"k"`
- PhiRatio float32 `json:"phiRatio"`
- NotarySetSize uint32 `json:"notarySetSize"`
- DKGSetSize uint32 `json:"dkgSetSize"`
- RoundInterval uint64 `json:"roundInterval"`
- MinBlockInterval uint64 `json:"minBlockInterval"`
- FineValues []*big.Int `json:"fineValues"`
+ GenesisCRSText string `json:"genesisCRSText"`
+ Owner common.Address `json:"owner"`
+ MinStake *big.Int `json:"minStake"`
+ LockupPeriod uint64 `json:"lockupPeriod"`
+ MiningVelocity float32 `json:"miningVelocity"`
+ NextHalvingSupply *big.Int `json:"nextHalvingSupply"`
+ LastHalvedAmount *big.Int `json:"lastHalvedAmount"`
+ BlockGasLimit uint64 `json:"blockGasLimit"`
+ NumChains uint32 `json:"numChains"`
+ LambdaBA uint64 `json:"lambdaBA"`
+ LambdaDKG uint64 `json:"lambdaDKG"`
+ K uint32 `json:"k"`
+ PhiRatio float32 `json:"phiRatio"`
+ NotarySetSize uint32 `json:"notarySetSize"`
+ DKGSetSize uint32 `json:"dkgSetSize"`
+ RoundInterval uint64 `json:"roundInterval"`
+ MinBlockInterval uint64 `json:"minBlockInterval"`
+ FineValues []*big.Int `json:"fineValues"`
}
type dexconConfigSpecMarshaling struct {
- MinStake *math.HexOrDecimal256
- BlockReward *math.HexOrDecimal256
- FineValues []*math.HexOrDecimal256
+ MinStake *math.HexOrDecimal256
+ NextHalvingSupply *math.HexOrDecimal256
+ LastHalvedAmount *math.HexOrDecimal256
+ FineValues []*math.HexOrDecimal256
}
// String implements the stringer interface, returning the consensus engine details.
func (d *DexconConfig) String() string {
- return fmt.Sprintf("{GenesisCRSText: %v Owner: %v MinStake: %v LockupPeriod: %v BlockReward: %v BlockGasLimit: %v NumChains: %v LambdaBA: %v LambdaDKG: %v K: %v PhiRatio: %v NotarySetSize: %v DKGSetSize: %v RoundInterval: %v MinBlockInterval: %v FineValues: %v}",
+ return fmt.Sprintf("{GenesisCRSText: %v Owner: %v MinStake: %v LockupPeriod: %v MiningVelocity: %v NextHalvingSupply: %v LastHalvedAmount: %v BlockGasLimit: %v NumChains: %v LambdaBA: %v LambdaDKG: %v K: %v PhiRatio: %v NotarySetSize: %v DKGSetSize: %v RoundInterval: %v MinBlockInterval: %v FineValues: %v}",
d.GenesisCRSText,
d.Owner,
d.MinStake,
d.LockupPeriod,
- d.BlockReward,
+ d.MiningVelocity,
+ d.NextHalvingSupply,
+ d.LastHalvedAmount,
d.BlockGasLimit,
d.NumChains,
d.LambdaBA,
diff --git a/params/gen_dexcon_config.go b/params/gen_dexcon_config.go
index 4ec55c0c9..29ebf2eaf 100644
--- a/params/gen_dexcon_config.go
+++ b/params/gen_dexcon_config.go
@@ -15,29 +15,33 @@ var _ = (*dexconConfigSpecMarshaling)(nil)
// MarshalJSON marshals as JSON.
func (d DexconConfig) MarshalJSON() ([]byte, error) {
type DexconConfig struct {
- GenesisCRSText string `json:"genesisCRSText"`
- Owner common.Address `json:"owner"`
- MinStake *math.HexOrDecimal256 `json:"minStake"`
- LockupPeriod uint64 `json:"lockupPeriod"`
- BlockReward *math.HexOrDecimal256 `json:"blockReward"`
- BlockGasLimit uint64 `json:"blockGasLimit"`
- NumChains uint32 `json:"numChains"`
- LambdaBA uint64 `json:"lambdaBA"`
- LambdaDKG uint64 `json:"lambdaDKG"`
- K uint32 `json:"k"`
- PhiRatio float32 `json:"phiRatio"`
- NotarySetSize uint32 `json:"notarySetSize"`
- DKGSetSize uint32 `json:"dkgSetSize"`
- RoundInterval uint64 `json:"roundInterval"`
- MinBlockInterval uint64 `json:"minBlockInterval"`
- FineValues []*math.HexOrDecimal256 `json:"fineValues"`
+ GenesisCRSText string `json:"genesisCRSText"`
+ Owner common.Address `json:"owner"`
+ MinStake *math.HexOrDecimal256 `json:"minStake"`
+ LockupPeriod uint64 `json:"lockupPeriod"`
+ MiningVelocity float32 `json:"miningVelocity"`
+ NextHalvingSupply *math.HexOrDecimal256 `json:"nextHalvingSupply"`
+ LastHalvedAmount *math.HexOrDecimal256 `json:"lastHalvedAmount"`
+ BlockGasLimit uint64 `json:"blockGasLimit"`
+ NumChains uint32 `json:"numChains"`
+ LambdaBA uint64 `json:"lambdaBA"`
+ LambdaDKG uint64 `json:"lambdaDKG"`
+ K uint32 `json:"k"`
+ PhiRatio float32 `json:"phiRatio"`
+ NotarySetSize uint32 `json:"notarySetSize"`
+ DKGSetSize uint32 `json:"dkgSetSize"`
+ RoundInterval uint64 `json:"roundInterval"`
+ MinBlockInterval uint64 `json:"minBlockInterval"`
+ FineValues []*math.HexOrDecimal256 `json:"fineValues"`
}
var enc DexconConfig
enc.GenesisCRSText = d.GenesisCRSText
enc.Owner = d.Owner
enc.MinStake = (*math.HexOrDecimal256)(d.MinStake)
enc.LockupPeriod = d.LockupPeriod
- enc.BlockReward = (*math.HexOrDecimal256)(d.BlockReward)
+ enc.MiningVelocity = d.MiningVelocity
+ enc.NextHalvingSupply = (*math.HexOrDecimal256)(d.NextHalvingSupply)
+ enc.LastHalvedAmount = (*math.HexOrDecimal256)(d.LastHalvedAmount)
enc.BlockGasLimit = d.BlockGasLimit
enc.NumChains = d.NumChains
enc.LambdaBA = d.LambdaBA
@@ -60,22 +64,24 @@ func (d DexconConfig) MarshalJSON() ([]byte, error) {
// UnmarshalJSON unmarshals from JSON.
func (d *DexconConfig) UnmarshalJSON(input []byte) error {
type DexconConfig struct {
- GenesisCRSText *string `json:"genesisCRSText"`
- Owner *common.Address `json:"owner"`
- MinStake *math.HexOrDecimal256 `json:"minStake"`
- LockupPeriod *uint64 `json:"lockupPeriod"`
- BlockReward *math.HexOrDecimal256 `json:"blockReward"`
- BlockGasLimit *uint64 `json:"blockGasLimit"`
- NumChains *uint32 `json:"numChains"`
- LambdaBA *uint64 `json:"lambdaBA"`
- LambdaDKG *uint64 `json:"lambdaDKG"`
- K *uint32 `json:"k"`
- PhiRatio *float32 `json:"phiRatio"`
- NotarySetSize *uint32 `json:"notarySetSize"`
- DKGSetSize *uint32 `json:"dkgSetSize"`
- RoundInterval *uint64 `json:"roundInterval"`
- MinBlockInterval *uint64 `json:"minBlockInterval"`
- FineValues []*math.HexOrDecimal256 `json:"fineValues"`
+ GenesisCRSText *string `json:"genesisCRSText"`
+ Owner *common.Address `json:"owner"`
+ MinStake *math.HexOrDecimal256 `json:"minStake"`
+ LockupPeriod *uint64 `json:"lockupPeriod"`
+ MiningVelocity *float32 `json:"miningVelocity"`
+ NextHalvingSupply *math.HexOrDecimal256 `json:"nextHalvingSupply"`
+ LastHalvedAmount *math.HexOrDecimal256 `json:"lastHalvedAmount"`
+ BlockGasLimit *uint64 `json:"blockGasLimit"`
+ NumChains *uint32 `json:"numChains"`
+ LambdaBA *uint64 `json:"lambdaBA"`
+ LambdaDKG *uint64 `json:"lambdaDKG"`
+ K *uint32 `json:"k"`
+ PhiRatio *float32 `json:"phiRatio"`
+ NotarySetSize *uint32 `json:"notarySetSize"`
+ DKGSetSize *uint32 `json:"dkgSetSize"`
+ RoundInterval *uint64 `json:"roundInterval"`
+ MinBlockInterval *uint64 `json:"minBlockInterval"`
+ FineValues []*math.HexOrDecimal256 `json:"fineValues"`
}
var dec DexconConfig
if err := json.Unmarshal(input, &dec); err != nil {
@@ -93,8 +99,14 @@ func (d *DexconConfig) UnmarshalJSON(input []byte) error {
if dec.LockupPeriod != nil {
d.LockupPeriod = *dec.LockupPeriod
}
- if dec.BlockReward != nil {
- d.BlockReward = (*big.Int)(dec.BlockReward)
+ if dec.MiningVelocity != nil {
+ d.MiningVelocity = *dec.MiningVelocity
+ }
+ if dec.NextHalvingSupply != nil {
+ d.NextHalvingSupply = (*big.Int)(dec.NextHalvingSupply)
+ }
+ if dec.LastHalvedAmount != nil {
+ d.LastHalvedAmount = (*big.Int)(dec.LastHalvedAmount)
}
if dec.BlockGasLimit != nil {
d.BlockGasLimit = *dec.BlockGasLimit