aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cmd/geth/config.go4
-rw-r--r--cmd/geth/main.go1
-rw-r--r--cmd/utils/flags.go4
-rw-r--r--core/genesis.go7
-rw-r--r--eth/backend.go2
-rw-r--r--eth/config.go3
-rw-r--r--les/client.go2
7 files changed, 21 insertions, 2 deletions
diff --git a/cmd/geth/config.go b/cmd/geth/config.go
index 0a63a0277..e2c107ffc 100644
--- a/cmd/geth/config.go
+++ b/cmd/geth/config.go
@@ -20,6 +20,7 @@ import (
"bufio"
"errors"
"fmt"
+ "math/big"
"os"
"reflect"
"unicode"
@@ -150,6 +151,9 @@ func enableWhisper(ctx *cli.Context) bool {
func makeFullNode(ctx *cli.Context) *node.Node {
stack, cfg := makeConfigNode(ctx)
+ if ctx.GlobalIsSet(utils.OverrideIstanbulFlag.Name) {
+ cfg.Eth.OverrideIstanbul = new(big.Int).SetUint64(ctx.GlobalUint64(utils.OverrideIstanbulFlag.Name))
+ }
utils.RegisterEthService(stack, &cfg.Eth)
if ctx.GlobalBool(utils.DashboardEnabledFlag.Name) {
diff --git a/cmd/geth/main.go b/cmd/geth/main.go
index 4c51f092d..019eee605 100644
--- a/cmd/geth/main.go
+++ b/cmd/geth/main.go
@@ -69,6 +69,7 @@ var (
utils.ExternalSignerFlag,
utils.NoUSBFlag,
utils.SmartCardDaemonPathFlag,
+ utils.OverrideIstanbulFlag,
utils.DashboardEnabledFlag,
utils.DashboardAddrFlag,
utils.DashboardPortFlag,
diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go
index 7e46043ff..d553b662c 100644
--- a/cmd/utils/flags.go
+++ b/cmd/utils/flags.go
@@ -223,6 +223,10 @@ var (
Name: "whitelist",
Usage: "Comma separated block number-to-hash mappings to enforce (<number>=<hash>)",
}
+ OverrideIstanbulFlag = cli.Uint64Flag{
+ Name: "override.istanbul",
+ Usage: "Manually specify Istanbul fork-block, overriding the bundled setting",
+ }
// Light server and client settings
LightLegacyServFlag = cli.IntFlag{ // Deprecated in favor of light.serve, remove in 2021
Name: "lightserv",
diff --git a/core/genesis.go b/core/genesis.go
index 5d6311b32..8261c18cc 100644
--- a/core/genesis.go
+++ b/core/genesis.go
@@ -152,6 +152,10 @@ func (e *GenesisMismatchError) Error() string {
//
// The returned chain configuration is never nil.
func SetupGenesisBlock(db ethdb.Database, genesis *Genesis) (*params.ChainConfig, common.Hash, error) {
+ return SetupGenesisBlockWithOverride(db, genesis, nil)
+}
+
+func SetupGenesisBlockWithOverride(db ethdb.Database, genesis *Genesis, overrideIstanbul *big.Int) (*params.ChainConfig, common.Hash, error) {
if genesis != nil && genesis.Config == nil {
return params.AllEthashProtocolChanges, common.Hash{}, errGenesisNoConfig
}
@@ -200,6 +204,9 @@ func SetupGenesisBlock(db ethdb.Database, genesis *Genesis) (*params.ChainConfig
// Get the existing chain configuration.
newcfg := genesis.configOrDefault(stored)
+ if overrideIstanbul != nil {
+ newcfg.IstanbulBlock = overrideIstanbul
+ }
storedcfg := rawdb.ReadChainConfig(db, stored)
if storedcfg == nil {
log.Warn("Found genesis block without chain config")
diff --git a/eth/backend.go b/eth/backend.go
index dc4ff8ade..ce37541f4 100644
--- a/eth/backend.go
+++ b/eth/backend.go
@@ -137,7 +137,7 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) {
if err != nil {
return nil, err
}
- chainConfig, genesisHash, genesisErr := core.SetupGenesisBlock(chainDb, config.Genesis)
+ chainConfig, genesisHash, genesisErr := core.SetupGenesisBlockWithOverride(chainDb, config.Genesis, config.OverrideIstanbul)
if _, ok := genesisErr.(*params.ConfigCompatError); genesisErr != nil && !ok {
return nil, genesisErr
}
diff --git a/eth/config.go b/eth/config.go
index 688787227..5094a533b 100644
--- a/eth/config.go
+++ b/eth/config.go
@@ -154,4 +154,7 @@ type Config struct {
// CheckpointOracle is the configuration for checkpoint oracle.
CheckpointOracle *params.CheckpointOracleConfig `toml:",omitempty"`
+
+ // Istanbul block override (TODO: remove after the fork)
+ OverrideIstanbul *big.Int
}
diff --git a/les/client.go b/les/client.go
index 461baf645..b367681f3 100644
--- a/les/client.go
+++ b/les/client.go
@@ -72,7 +72,7 @@ func New(ctx *node.ServiceContext, config *eth.Config) (*LightEthereum, error) {
if err != nil {
return nil, err
}
- chainConfig, genesisHash, genesisErr := core.SetupGenesisBlock(chainDb, config.Genesis)
+ chainConfig, genesisHash, genesisErr := core.SetupGenesisBlockWithOverride(chainDb, config.Genesis, config.OverrideIstanbul)
if _, isCompat := genesisErr.(*params.ConfigCompatError); genesisErr != nil && !isCompat {
return nil, genesisErr
}