Skip to content

Commit 83a9a73

Browse files
holimankaralabe
authored andcommitted
cmd/geth, core, eth: implement Constantinople override flag (#18273)
* geth/core/eth: implement constantinople override flag * les: implemnent constantinople override flag for les clients * cmd/geth, eth, les: fix typo, move flag to experimentals
1 parent 5584574 commit 83a9a73

File tree

7 files changed

+21
-5
lines changed

7 files changed

+21
-5
lines changed

cmd/geth/config.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"errors"
2222
"fmt"
2323
"io"
24+
"math/big"
2425
"os"
2526
"reflect"
2627
"unicode"
@@ -152,7 +153,9 @@ func enableWhisper(ctx *cli.Context) bool {
152153

153154
func makeFullNode(ctx *cli.Context) *node.Node {
154155
stack, cfg := makeConfigNode(ctx)
155-
156+
if ctx.GlobalIsSet(utils.ConstantinopleOverrideFlag.Name) {
157+
cfg.Eth.ConstantinopleOverride = new(big.Int).SetUint64(ctx.GlobalUint64(utils.ConstantinopleOverrideFlag.Name))
158+
}
156159
utils.RegisterEthService(stack, &cfg.Eth)
157160

158161
if ctx.GlobalBool(utils.DashboardEnabledFlag.Name) {

cmd/geth/main.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ var (
123123
utils.RinkebyFlag,
124124
utils.VMEnableDebugFlag,
125125
utils.NetworkIdFlag,
126+
utils.ConstantinopleOverrideFlag,
126127
utils.RPCCORSDomainFlag,
127128
utils.RPCVirtualHostsFlag,
128129
utils.EthStatsURLFlag,

cmd/utils/flags.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,10 @@ var (
140140
Name: "rinkeby",
141141
Usage: "Rinkeby network: pre-configured proof-of-authority test network",
142142
}
143+
ConstantinopleOverrideFlag = cli.Uint64Flag{
144+
Name: "override.constantinople",
145+
Usage: "Manually specify constantinople fork-block, overriding the bundled setting",
146+
}
143147
DeveloperFlag = cli.BoolFlag{
144148
Name: "dev",
145149
Usage: "Ephemeral proof-of-authority network with a pre-funded developer account, mining enabled",
@@ -1178,7 +1182,6 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *eth.Config) {
11781182
if ctx.GlobalIsSet(NetworkIdFlag.Name) {
11791183
cfg.NetworkId = ctx.GlobalUint64(NetworkIdFlag.Name)
11801184
}
1181-
11821185
if ctx.GlobalIsSet(CacheFlag.Name) || ctx.GlobalIsSet(CacheDatabaseFlag.Name) {
11831186
cfg.DatabaseCache = ctx.GlobalInt(CacheFlag.Name) * ctx.GlobalInt(CacheDatabaseFlag.Name) / 100
11841187
}
@@ -1403,7 +1406,6 @@ func MakeGenesis(ctx *cli.Context) *core.Genesis {
14031406
func MakeChain(ctx *cli.Context, stack *node.Node) (chain *core.BlockChain, chainDb ethdb.Database) {
14041407
var err error
14051408
chainDb = MakeChainDatabase(ctx, stack)
1406-
14071409
config, _, err := core.SetupGenesisBlock(chainDb, MakeGenesis(ctx))
14081410
if err != nil {
14091411
Fatalf("%v", err)

core/genesis.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,9 @@ func (e *GenesisMismatchError) Error() string {
151151
//
152152
// The returned chain configuration is never nil.
153153
func SetupGenesisBlock(db ethdb.Database, genesis *Genesis) (*params.ChainConfig, common.Hash, error) {
154+
return SetupGenesisBlockWithOverride(db, genesis, nil)
155+
}
156+
func SetupGenesisBlockWithOverride(db ethdb.Database, genesis *Genesis, constantinopleOverride *big.Int) (*params.ChainConfig, common.Hash, error) {
154157
if genesis != nil && genesis.Config == nil {
155158
return params.AllEthashProtocolChanges, common.Hash{}, errGenesisNoConfig
156159
}
@@ -178,6 +181,9 @@ func SetupGenesisBlock(db ethdb.Database, genesis *Genesis) (*params.ChainConfig
178181

179182
// Get the existing chain configuration.
180183
newcfg := genesis.configOrDefault(stored)
184+
if constantinopleOverride != nil {
185+
newcfg.ConstantinopleBlock = constantinopleOverride
186+
}
181187
storedcfg := rawdb.ReadChainConfig(db, stored)
182188
if storedcfg == nil {
183189
log.Warn("Found genesis block without chain config")

eth/backend.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) {
118118
if err != nil {
119119
return nil, err
120120
}
121-
chainConfig, genesisHash, genesisErr := core.SetupGenesisBlock(chainDb, config.Genesis)
121+
chainConfig, genesisHash, genesisErr := core.SetupGenesisBlockWithOverride(chainDb, config.Genesis, config.ConstantinopleOverride)
122122
if _, ok := genesisErr.(*params.ConfigCompatError); genesisErr != nil && !ok {
123123
return nil, genesisErr
124124
}

eth/config.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,8 +129,12 @@ type Config struct {
129129

130130
// Type of the EWASM interpreter ("" for default)
131131
EWASMInterpreter string
132+
132133
// Type of the EVM interpreter ("" for default)
133134
EVMInterpreter string
135+
136+
// Constantinople block override (TODO: remove after the fork)
137+
ConstantinopleOverride *big.Int
134138
}
135139

136140
type configMarshaling struct {

les/backend.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ func New(ctx *node.ServiceContext, config *eth.Config) (*LightEthereum, error) {
8282
if err != nil {
8383
return nil, err
8484
}
85-
chainConfig, genesisHash, genesisErr := core.SetupGenesisBlock(chainDb, config.Genesis)
85+
chainConfig, genesisHash, genesisErr := core.SetupGenesisBlockWithOverride(chainDb, config.Genesis, config.ConstantinopleOverride)
8686
if _, isCompat := genesisErr.(*params.ConfigCompatError); genesisErr != nil && !isCompat {
8787
return nil, genesisErr
8888
}

0 commit comments

Comments
 (0)