From d90a653d3332f2e957ae7dcf138494506dc9c179 Mon Sep 17 00:00:00 2001
From: Wei-Ning Huang <w@cobinhood.com>
Date: Thu, 18 Oct 2018 21:22:45 +0800
Subject: params: load blockReward from genesis JSON file

---
 params/config.go            |   7 +++
 params/gen_dexcon_config.go | 103 ++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 110 insertions(+)
 create mode 100644 params/gen_dexcon_config.go

(limited to 'params')

diff --git a/params/config.go b/params/config.go
index 34dba2901..8a9fa1827 100644
--- a/params/config.go
+++ b/params/config.go
@@ -21,6 +21,7 @@ import (
 	"math/big"
 
 	"github.com/dexon-foundation/dexon/common"
+	"github.com/dexon-foundation/dexon/common/math"
 )
 
 // Genesis hashes to enforce below configs on.
@@ -218,6 +219,8 @@ func (c *CliqueConfig) String() string {
 	return "clique"
 }
 
+//go:generate gencodec -type DexconConfig -field-override dexconConfigSpecMarshaling -out gen_dexcon_config.go
+
 // DexconConfig is the consensus engine configs for DEXON consensus.
 type DexconConfig struct {
 	GenesisCRSText   string   `json:"genesisCRSText"`
@@ -234,6 +237,10 @@ type DexconConfig struct {
 	BlockReward      *big.Int `json:"blockReward"`
 }
 
+type dexconConfigSpecMarshaling struct {
+	BlockReward *math.HexOrDecimal256
+}
+
 // String implements the stringer interface, returning the consensus engine details.
 func (d *DexconConfig) String() string {
 	return fmt.Sprintf("{GenesisCRSText: %v NumChains: %v LambdaBA: %v LambdaDKG: %v K: %v PhiRatio: %v NotarySetSize: %v DKGSetSize: %v RoundInterval: %v MinBlockInterval: %v MaxBlockInterval: %v BlockReward: %v",
diff --git a/params/gen_dexcon_config.go b/params/gen_dexcon_config.go
new file mode 100644
index 000000000..bd169584f
--- /dev/null
+++ b/params/gen_dexcon_config.go
@@ -0,0 +1,103 @@
+// Code generated by github.com/fjl/gencodec. DO NOT EDIT.
+
+package params
+
+import (
+	"encoding/json"
+	"math/big"
+
+	"github.com/dexon-foundation/dexon/common/math"
+)
+
+var _ = (*dexconConfigSpecMarshaling)(nil)
+
+// MarshalJSON marshals as JSON.
+func (d DexconConfig) MarshalJSON() ([]byte, error) {
+	type DexconConfig struct {
+		GenesisCRSText   string                `json:"genesisCRSText"`
+		NumChains        uint32                `json:"numChains"`
+		LambdaBA         uint64                `json:"lambdaBA"`
+		LambdaDKG        uint64                `json:"lambdaDKG"`
+		K                int                   `json:"k"`
+		PhiRatio         float32               `json:"phiRatio"`
+		NotarySetSize    uint32                `json:"notarySetSize"`
+		DKGSetSize       uint32                `json:"dkgSetSize"`
+		RoundInterval    uint64                `json:"roundInterval"`
+		MinBlockInterval uint64                `json:"minBlockInterval"`
+		MaxBlockInterval uint64                `json:"maxBlockInterval"`
+		BlockReward      *math.HexOrDecimal256 `json:"blockReward"`
+	}
+	var enc DexconConfig
+	enc.GenesisCRSText = d.GenesisCRSText
+	enc.NumChains = d.NumChains
+	enc.LambdaBA = d.LambdaBA
+	enc.LambdaDKG = d.LambdaDKG
+	enc.K = d.K
+	enc.PhiRatio = d.PhiRatio
+	enc.NotarySetSize = d.NotarySetSize
+	enc.DKGSetSize = d.DKGSetSize
+	enc.RoundInterval = d.RoundInterval
+	enc.MinBlockInterval = d.MinBlockInterval
+	enc.MaxBlockInterval = d.MaxBlockInterval
+	enc.BlockReward = (*math.HexOrDecimal256)(d.BlockReward)
+	return json.Marshal(&enc)
+}
+
+// UnmarshalJSON unmarshals from JSON.
+func (d *DexconConfig) UnmarshalJSON(input []byte) error {
+	type DexconConfig struct {
+		GenesisCRSText   *string               `json:"genesisCRSText"`
+		NumChains        *uint32               `json:"numChains"`
+		LambdaBA         *uint64               `json:"lambdaBA"`
+		LambdaDKG        *uint64               `json:"lambdaDKG"`
+		K                *int                  `json:"k"`
+		PhiRatio         *float32              `json:"phiRatio"`
+		NotarySetSize    *uint32               `json:"notarySetSize"`
+		DKGSetSize       *uint32               `json:"dkgSetSize"`
+		RoundInterval    *uint64               `json:"roundInterval"`
+		MinBlockInterval *uint64               `json:"minBlockInterval"`
+		MaxBlockInterval *uint64               `json:"maxBlockInterval"`
+		BlockReward      *math.HexOrDecimal256 `json:"blockReward"`
+	}
+	var dec DexconConfig
+	if err := json.Unmarshal(input, &dec); err != nil {
+		return err
+	}
+	if dec.GenesisCRSText != nil {
+		d.GenesisCRSText = *dec.GenesisCRSText
+	}
+	if dec.NumChains != nil {
+		d.NumChains = *dec.NumChains
+	}
+	if dec.LambdaBA != nil {
+		d.LambdaBA = *dec.LambdaBA
+	}
+	if dec.LambdaDKG != nil {
+		d.LambdaDKG = *dec.LambdaDKG
+	}
+	if dec.K != nil {
+		d.K = *dec.K
+	}
+	if dec.PhiRatio != nil {
+		d.PhiRatio = *dec.PhiRatio
+	}
+	if dec.NotarySetSize != nil {
+		d.NotarySetSize = *dec.NotarySetSize
+	}
+	if dec.DKGSetSize != nil {
+		d.DKGSetSize = *dec.DKGSetSize
+	}
+	if dec.RoundInterval != nil {
+		d.RoundInterval = *dec.RoundInterval
+	}
+	if dec.MinBlockInterval != nil {
+		d.MinBlockInterval = *dec.MinBlockInterval
+	}
+	if dec.MaxBlockInterval != nil {
+		d.MaxBlockInterval = *dec.MaxBlockInterval
+	}
+	if dec.BlockReward != nil {
+		d.BlockReward = (*big.Int)(dec.BlockReward)
+	}
+	return nil
+}
-- 
cgit v1.2.3