aboutsummaryrefslogtreecommitdiffstats
path: root/params
diff options
context:
space:
mode:
authorWei-Ning Huang <w@dexon.org>2019-03-17 09:12:50 +0800
committerJimmy Hu <jimmy.hu@dexon.org>2019-03-17 09:12:50 +0800
commit6091c2de57fee155e5d7f512b326bde53c84c04e (patch)
tree7625cec0e792068b5945d3dda9bb4998457df7b4 /params
parent8ff31f980a7e169dda85cd77f88f56d03788a135 (diff)
downloaddexon-6091c2de57fee155e5d7f512b326bde53c84c04e.tar.gz
dexon-6091c2de57fee155e5d7f512b326bde53c84c04e.tar.zst
dexon-6091c2de57fee155e5d7f512b326bde53c84c04e.zip
dex: implement recovery mechanism (#258)
* dex: implement recovery mechanism The DEXON recovery protocol allows us to use the Ethereum blockchain as a fallback consensus chain to coordinate recovery. * fix
Diffstat (limited to 'params')
-rw-r--r--params/config.go37
-rw-r--r--params/gen_dexcon_config.go12
2 files changed, 39 insertions, 10 deletions
diff --git a/params/config.go b/params/config.go
index 21f0f29e1..aa37ec1c4 100644
--- a/params/config.go
+++ b/params/config.go
@@ -68,6 +68,11 @@ var (
new(big.Int).Mul(big.NewInt(1e18), big.NewInt(1e5)),
},
},
+ Recovery: &RecoveryConfig{
+ Contract: common.HexToAddress("0xcb4bb8ae26b2ebe5a1e2e8d5236020f33ffb2294"),
+ Timeout: 120,
+ Confirmation: 5,
+ },
}
// MainnetTrustedCheckpoint contains the light client trusted checkpoint for the main network.
@@ -114,6 +119,11 @@ var (
new(big.Int).Mul(big.NewInt(1e18), big.NewInt(1e5)),
},
},
+ Recovery: &RecoveryConfig{
+ Contract: common.HexToAddress("0x4ebe3d13ab18b30d815711b7a33ef1226777b66d"),
+ Timeout: 120,
+ Confirmation: 5,
+ },
}
// TaipeiChainConfig contains the chain parameters to run a node on the Taipei test network.
@@ -151,6 +161,11 @@ var (
new(big.Int).Mul(big.NewInt(1e18), big.NewInt(1e5)),
},
},
+ Recovery: &RecoveryConfig{
+ Contract: common.HexToAddress("0xac86ab80ab27007801f36f6622fbe0a9432291a2"),
+ Timeout: 120,
+ Confirmation: 1,
+ },
}
// TestnetTrustedCheckpoint contains the light client trusted checkpoint for the Ropsten test network.
@@ -196,6 +211,11 @@ var (
new(big.Int).Mul(big.NewInt(1e18), big.NewInt(1e5)),
},
},
+ Recovery: &RecoveryConfig{
+ Contract: common.HexToAddress("0x3828134ba7a0629fd52067b80fe696f400eb83dc"),
+ Timeout: 120,
+ Confirmation: 1,
+ },
}
// AllEthashProtocolChanges contains every protocol change (EIPs) introduced
@@ -203,18 +223,18 @@ var (
//
// This configuration is intentionally not using keyed fields to force anyone
// adding flags to the config to also have to set these fields.
- AllEthashProtocolChanges = &ChainConfig{big.NewInt(1337), 0, big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, new(EthashConfig), nil, nil}
+ AllEthashProtocolChanges = &ChainConfig{big.NewInt(1337), 0, big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, new(EthashConfig), nil, nil, nil}
// AllCliqueProtocolChanges contains every protocol change (EIPs) introduced
// and accepted by the Ethereum core developers into the Clique consensus.
//
// This configuration is intentionally not using keyed fields to force anyone
// adding flags to the config to also have to set these fields.
- AllCliqueProtocolChanges = &ChainConfig{big.NewInt(1337), 0, big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, &CliqueConfig{Period: 0, Epoch: 30000}, nil}
+ AllCliqueProtocolChanges = &ChainConfig{big.NewInt(1337), 0, big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, &CliqueConfig{Period: 0, Epoch: 30000}, nil, nil}
- AllDexconProtocolChanges = &ChainConfig{big.NewInt(1337), 0, big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, nil, new(DexconConfig)}
+ AllDexconProtocolChanges = &ChainConfig{big.NewInt(1337), 0, big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, nil, new(DexconConfig), new(RecoveryConfig)}
- TestChainConfig = &ChainConfig{big.NewInt(1), 0, big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, new(EthashConfig), nil, nil}
+ TestChainConfig = &ChainConfig{big.NewInt(1), 0, big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, new(EthashConfig), nil, nil, nil}
TestRules = TestChainConfig.Rules(new(big.Int))
// Ethereum MainnetChainConfig is the chain parameters to run a node on the main network.
@@ -292,6 +312,9 @@ type ChainConfig struct {
Ethash *EthashConfig `json:"ethash,omitempty"`
Clique *CliqueConfig `json:"clique,omitempty"`
Dexcon *DexconConfig `json:"dexcon,omitempty"`
+
+ // Dexcon Recovery
+ Recovery *RecoveryConfig `json:"recovery,omitempty"`
}
// EthashConfig is the consensus engine configs for proof-of-work based sealing.
@@ -365,6 +388,12 @@ func (d *DexconConfig) String() string {
)
}
+type RecoveryConfig struct {
+ Contract common.Address `json:"contract"`
+ Timeout int `json:"timeout"`
+ Confirmation int `json:"confirmation"`
+}
+
// String implements the fmt.Stringer interface.
func (c *ChainConfig) String() string {
var engine interface{}
diff --git a/params/gen_dexcon_config.go b/params/gen_dexcon_config.go
index 1afe11f56..38753916a 100644
--- a/params/gen_dexcon_config.go
+++ b/params/gen_dexcon_config.go
@@ -22,6 +22,7 @@ func (d DexconConfig) MarshalJSON() ([]byte, error) {
MiningVelocity float32 `json:"miningVelocity"`
NextHalvingSupply *math.HexOrDecimal256 `json:"nextHalvingSupply"`
LastHalvedAmount *math.HexOrDecimal256 `json:"lastHalvedAmount"`
+ MinGasPrice *math.HexOrDecimal256 `json:"minGasPrice"`
BlockGasLimit uint64 `json:"blockGasLimit"`
LambdaBA uint64 `json:"lambdaBA"`
LambdaDKG uint64 `json:"lambdaDKG"`
@@ -30,7 +31,6 @@ func (d DexconConfig) MarshalJSON() ([]byte, error) {
RoundLength uint64 `json:"roundLength"`
MinBlockInterval uint64 `json:"minBlockInterval"`
FineValues []*math.HexOrDecimal256 `json:"fineValues"`
- MinGasPrice *math.HexOrDecimal256 `json:"minGasPrice"`
}
var enc DexconConfig
enc.GenesisCRSText = d.GenesisCRSText
@@ -40,6 +40,7 @@ func (d DexconConfig) MarshalJSON() ([]byte, error) {
enc.MiningVelocity = d.MiningVelocity
enc.NextHalvingSupply = (*math.HexOrDecimal256)(d.NextHalvingSupply)
enc.LastHalvedAmount = (*math.HexOrDecimal256)(d.LastHalvedAmount)
+ enc.MinGasPrice = (*math.HexOrDecimal256)(d.MinGasPrice)
enc.BlockGasLimit = d.BlockGasLimit
enc.LambdaBA = d.LambdaBA
enc.LambdaDKG = d.LambdaDKG
@@ -53,7 +54,6 @@ func (d DexconConfig) MarshalJSON() ([]byte, error) {
enc.FineValues[k] = (*math.HexOrDecimal256)(v)
}
}
- enc.MinGasPrice = (*math.HexOrDecimal256)(d.MinGasPrice)
return json.Marshal(&enc)
}
@@ -67,6 +67,7 @@ func (d *DexconConfig) UnmarshalJSON(input []byte) error {
MiningVelocity *float32 `json:"miningVelocity"`
NextHalvingSupply *math.HexOrDecimal256 `json:"nextHalvingSupply"`
LastHalvedAmount *math.HexOrDecimal256 `json:"lastHalvedAmount"`
+ MinGasPrice *math.HexOrDecimal256 `json:"minGasPrice"`
BlockGasLimit *uint64 `json:"blockGasLimit"`
LambdaBA *uint64 `json:"lambdaBA"`
LambdaDKG *uint64 `json:"lambdaDKG"`
@@ -75,7 +76,6 @@ func (d *DexconConfig) UnmarshalJSON(input []byte) error {
RoundLength *uint64 `json:"roundLength"`
MinBlockInterval *uint64 `json:"minBlockInterval"`
FineValues []*math.HexOrDecimal256 `json:"fineValues"`
- MinGasPrice *math.HexOrDecimal256 `json:"minGasPrice"`
}
var dec DexconConfig
if err := json.Unmarshal(input, &dec); err != nil {
@@ -102,6 +102,9 @@ func (d *DexconConfig) UnmarshalJSON(input []byte) error {
if dec.LastHalvedAmount != nil {
d.LastHalvedAmount = (*big.Int)(dec.LastHalvedAmount)
}
+ if dec.MinGasPrice != nil {
+ d.MinGasPrice = (*big.Int)(dec.MinGasPrice)
+ }
if dec.BlockGasLimit != nil {
d.BlockGasLimit = *dec.BlockGasLimit
}
@@ -129,8 +132,5 @@ func (d *DexconConfig) UnmarshalJSON(input []byte) error {
d.FineValues[k] = (*big.Int)(v)
}
}
- if dec.MinGasPrice != nil {
- d.MinGasPrice = (*big.Int)(dec.MinGasPrice)
- }
return nil
}