cmd, core: add flag mainet and devnet

This commit is contained in:
Daniel Liu 2025-02-18 20:52:39 +08:00
parent 1d653e57ab
commit 54b4be1aa2
5 changed files with 69 additions and 7 deletions

View file

@ -45,7 +45,9 @@ var (
utils.DataDirFlag, utils.DataDirFlag,
utils.XDCXDataDirFlag, utils.XDCXDataDirFlag,
utils.LightModeFlag, utils.LightModeFlag,
utils.MainnetFlag,
utils.TestnetFlag, utils.TestnetFlag,
utils.DevnetFlag,
}, },
Description: ` Description: `
The init command initializes a new genesis block and definition for the network. The init command initializes a new genesis block and definition for the network.
@ -154,19 +156,31 @@ Use "ethereum dump 0" to dump the genesis block.`,
// initGenesis will initialise the given JSON format genesis file and writes it as // initGenesis will initialise the given JSON format genesis file and writes it as
// the zero'd block (i.e. genesis) or will fail hard if it can't succeed. // the zero'd block (i.e. genesis) or will fail hard if it can't succeed.
func initGenesis(ctx *cli.Context) error { func initGenesis(ctx *cli.Context) error {
utils.CheckExclusive(ctx, utils.MainnetFlag, utils.TestnetFlag, utils.DevnetFlag)
var err error var err error
genesis := new(core.Genesis) genesis := new(core.Genesis)
if ctx.Bool(utils.TestnetFlag.Name) { if ctx.Bool(utils.MainnetFlag.Name) {
if ctx.Args().Len() > 0 {
utils.Fatalf("The mainnet flag and genesis file can't be used at the same time")
}
err = json.Unmarshal(xdc_genesis.TestnetGenesis, &genesis)
} else if ctx.Bool(utils.TestnetFlag.Name) {
if ctx.Args().Len() > 0 { if ctx.Args().Len() > 0 {
utils.Fatalf("The testnet flag and genesis file can't be used at the same time") utils.Fatalf("The testnet flag and genesis file can't be used at the same time")
} }
err = json.Unmarshal(xdc_genesis.TestnetGenesis, &genesis) err = json.Unmarshal(xdc_genesis.TestnetGenesis, &genesis)
} else if ctx.Bool(utils.DevnetFlag.Name) {
if ctx.Args().Len() > 0 {
utils.Fatalf("The devnet flag and genesis file can't be used at the same time")
}
err = json.Unmarshal(xdc_genesis.TestnetGenesis, &genesis)
} else { } else {
if ctx.Args().Len() != 1 { if ctx.Args().Len() != 1 {
utils.Fatalf("need the genesis.json file or the network name [ mainnet | testnet | devnet ] as the only argument") utils.Fatalf("need the genesis.json file or the network name [ mainnet | testnet | devnet ] as the only argument")
} }
genesisPath := ctx.Args().First() genesisPath := ctx.Args().First()
if genesisPath == "mainnet" { if genesisPath == "mainnet" || genesisPath == "xinfin" {
err = json.Unmarshal(xdc_genesis.MainnetGenesis, &genesis) err = json.Unmarshal(xdc_genesis.MainnetGenesis, &genesis)
} else if genesisPath == "testnet" || genesisPath == "apothem" { } else if genesisPath == "testnet" || genesisPath == "apothem" {
err = json.Unmarshal(xdc_genesis.TestnetGenesis, &genesis) err = json.Unmarshal(xdc_genesis.TestnetGenesis, &genesis)

View file

@ -125,6 +125,8 @@ func remoteConsole(ctx *cli.Context) error {
if path != "" { if path != "" {
if ctx.Bool(utils.TestnetFlag.Name) { if ctx.Bool(utils.TestnetFlag.Name) {
path = filepath.Join(path, "testnet") path = filepath.Join(path, "testnet")
} else if ctx.Bool(utils.DevnetFlag.Name) {
path = filepath.Join(path, "devnet")
} else if ctx.Bool(utils.RinkebyFlag.Name) { } else if ctx.Bool(utils.RinkebyFlag.Name) {
path = filepath.Join(path, "rinkeby") path = filepath.Join(path, "rinkeby")
} }

View file

@ -117,7 +117,9 @@ var (
utils.NodeKeyHexFlag, utils.NodeKeyHexFlag,
//utils.DeveloperFlag, //utils.DeveloperFlag,
//utils.DeveloperPeriodFlag, //utils.DeveloperPeriodFlag,
utils.MainnetFlag,
utils.TestnetFlag, utils.TestnetFlag,
utils.DevnetFlag,
//utils.RinkebyFlag, //utils.RinkebyFlag,
//utils.VMEnableDebugFlag, //utils.VMEnableDebugFlag,
utils.Enable0xPrefixFlag, utils.Enable0xPrefixFlag,

View file

@ -104,12 +104,23 @@ var (
Value: ethconfig.Defaults.NetworkId, Value: ethconfig.Defaults.NetworkId,
Category: flags.EthCategory, Category: flags.EthCategory,
} }
MainnetFlag = &cli.BoolFlag{
Name: "mainnet",
Aliases: []string{"xinfin"},
Usage: "XDC xinfin network",
Category: flags.EthCategory,
}
TestnetFlag = &cli.BoolFlag{ TestnetFlag = &cli.BoolFlag{
Name: "testnet", Name: "testnet",
Aliases: []string{"apothem"}, Aliases: []string{"apothem"},
Usage: "XDC apothem network", Usage: "XDC apothem network",
Category: flags.EthCategory, Category: flags.EthCategory,
} }
DevnetFlag = &cli.BoolFlag{
Name: "devnet",
Usage: "XDC develop network",
Category: flags.EthCategory,
}
RinkebyFlag = &cli.BoolFlag{ RinkebyFlag = &cli.BoolFlag{
Name: "rinkeby", Name: "rinkeby",
Usage: "Rinkeby network: pre-configured proof-of-authority test network", Usage: "Rinkeby network: pre-configured proof-of-authority test network",
@ -819,6 +830,9 @@ func MakeDataDir(ctx *cli.Context) string {
if ctx.Bool(TestnetFlag.Name) { if ctx.Bool(TestnetFlag.Name) {
return filepath.Join(path, "testnet") return filepath.Join(path, "testnet")
} }
if ctx.Bool(DevnetFlag.Name) {
return filepath.Join(path, "devnet")
}
if ctx.Bool(RinkebyFlag.Name) { if ctx.Bool(RinkebyFlag.Name) {
return filepath.Join(path, "rinkeby") return filepath.Join(path, "rinkeby")
} }
@ -883,7 +897,7 @@ func setBootstrapNodes(ctx *cli.Context, cfg *p2p.Config) {
switch { switch {
case ctx.Bool(TestnetFlag.Name) || networkID == 51: case ctx.Bool(TestnetFlag.Name) || networkID == 51:
urls = params.TestnetBootnodes urls = params.TestnetBootnodes
case networkID == 551: case ctx.Bool(DevnetFlag.Name) || networkID == 551:
urls = params.DevnetBootnodes urls = params.DevnetBootnodes
} }
} }
@ -916,6 +930,8 @@ func setBootstrapNodesV5(ctx *cli.Context, cfg *p2p.Config) {
urls = SplitAndTrim(ctx.String(BootnodesV5Flag.Name)) urls = SplitAndTrim(ctx.String(BootnodesV5Flag.Name))
case ctx.Bool(TestnetFlag.Name): case ctx.Bool(TestnetFlag.Name):
urls = params.TestnetBootnodes urls = params.TestnetBootnodes
case ctx.Bool(DevnetFlag.Name):
urls = params.DevnetBootnodes
case cfg.BootstrapNodesV5 != nil: case cfg.BootstrapNodesV5 != nil:
return // already set, don't apply defaults. return // already set, don't apply defaults.
} }
@ -1193,6 +1209,8 @@ func SetNodeConfig(ctx *cli.Context, cfg *node.Config) {
cfg.DataDir = "" // unless explicitly requested, use memory databases cfg.DataDir = "" // unless explicitly requested, use memory databases
case ctx.Bool(TestnetFlag.Name): case ctx.Bool(TestnetFlag.Name):
cfg.DataDir = filepath.Join(node.DefaultDataDir(), "testnet") cfg.DataDir = filepath.Join(node.DefaultDataDir(), "testnet")
case ctx.Bool(DevnetFlag.Name):
cfg.DataDir = filepath.Join(node.DefaultDataDir(), "devnet")
case ctx.Bool(RinkebyFlag.Name): case ctx.Bool(RinkebyFlag.Name):
cfg.DataDir = filepath.Join(node.DefaultDataDir(), "rinkeby") cfg.DataDir = filepath.Join(node.DefaultDataDir(), "rinkeby")
} }
@ -1386,7 +1404,7 @@ func SetXDCXConfig(ctx *cli.Context, cfg *XDCx.Config, XDCDataDir string) {
// SetEthConfig applies eth-related command line flags to the config. // SetEthConfig applies eth-related command line flags to the config.
func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) { func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) {
// Avoid conflicting network flags // Avoid conflicting network flags
CheckExclusive(ctx, DeveloperFlag, TestnetFlag, RinkebyFlag) CheckExclusive(ctx, MainnetFlag, TestnetFlag, DevnetFlag, DeveloperFlag, RinkebyFlag)
CheckExclusive(ctx, FastSyncFlag, LightModeFlag, SyncModeFlag) CheckExclusive(ctx, FastSyncFlag, LightModeFlag, SyncModeFlag)
CheckExclusive(ctx, LightServFlag, LightModeFlag) CheckExclusive(ctx, LightServFlag, LightModeFlag)
CheckExclusive(ctx, LightServFlag, SyncModeFlag, "light") CheckExclusive(ctx, LightServFlag, SyncModeFlag, "light")
@ -1489,11 +1507,21 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) {
} }
// Override any default configs for hard coded networks. // Override any default configs for hard coded networks.
switch { switch {
case ctx.Bool(MainnetFlag.Name):
if !ctx.IsSet(NetworkIdFlag.Name) {
cfg.NetworkId = 50
}
cfg.Genesis = core.DefaultGenesisBlock()
case ctx.Bool(TestnetFlag.Name): case ctx.Bool(TestnetFlag.Name):
if !ctx.IsSet(NetworkIdFlag.Name) { if !ctx.IsSet(NetworkIdFlag.Name) {
cfg.NetworkId = 51 cfg.NetworkId = 51
} }
cfg.Genesis = core.DefaultTestnetGenesisBlock() cfg.Genesis = core.DefaultTestnetGenesisBlock()
case ctx.Bool(DevnetFlag.Name):
if !ctx.IsSet(NetworkIdFlag.Name) {
cfg.NetworkId = 551
}
cfg.Genesis = core.DefaultDevnetGenesisBlock()
case ctx.Bool(RinkebyFlag.Name): case ctx.Bool(RinkebyFlag.Name):
if !ctx.IsSet(NetworkIdFlag.Name) { if !ctx.IsSet(NetworkIdFlag.Name) {
cfg.NetworkId = 4 cfg.NetworkId = 4
@ -1618,8 +1646,12 @@ func MakeChainDatabase(ctx *cli.Context, stack *node.Node, readonly bool) ethdb.
func MakeGenesis(ctx *cli.Context) *core.Genesis { func MakeGenesis(ctx *cli.Context) *core.Genesis {
var genesis *core.Genesis var genesis *core.Genesis
switch { switch {
case ctx.Bool(MainnetFlag.Name):
genesis = core.DefaultGenesisBlock()
case ctx.Bool(TestnetFlag.Name): case ctx.Bool(TestnetFlag.Name):
genesis = core.DefaultTestnetGenesisBlock() genesis = core.DefaultTestnetGenesisBlock()
case ctx.Bool(DevnetFlag.Name):
genesis = core.DefaultDevnetGenesisBlock()
case ctx.Bool(RinkebyFlag.Name): case ctx.Bool(RinkebyFlag.Name):
genesis = core.DefaultRinkebyGenesisBlock() genesis = core.DefaultRinkebyGenesisBlock()
case ctx.Bool(DeveloperFlag.Name): case ctx.Bool(DeveloperFlag.Name):

View file

@ -267,11 +267,10 @@ func GenesisBlockForTesting(db ethdb.Database, addr common.Address, balance *big
return g.MustCommit(db) return g.MustCommit(db)
} }
// DefaultGenesisBlock returns the Ethereum main net genesis block. // DefaultGenesisBlock returns the XDC mainnet genesis block.
func DefaultGenesisBlock() *Genesis { func DefaultGenesisBlock() *Genesis {
config := params.XDCMainnetChainConfig
return &Genesis{ return &Genesis{
Config: config, Config: params.XDCMainnetChainConfig,
Nonce: 0, Nonce: 0,
ExtraData: hexutil.MustDecode("0x000000000000000000000000000000000000000000000000000000000000000025c65b4b379ac37cf78357c4915f73677022eaffc7d49d0a2cf198deebd6ce581af465944ec8b2bbcfccdea1006a5cfa7d9484b5b293b46964c265c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"), ExtraData: hexutil.MustDecode("0x000000000000000000000000000000000000000000000000000000000000000025c65b4b379ac37cf78357c4915f73677022eaffc7d49d0a2cf198deebd6ce581af465944ec8b2bbcfccdea1006a5cfa7d9484b5b293b46964c265c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"),
GasLimit: 4700000, GasLimit: 4700000,
@ -294,6 +293,19 @@ func DefaultTestnetGenesisBlock() *Genesis {
} }
} }
// DefaultDevnetGenesisBlock returns the XDC devnet genesis block.
func DefaultDevnetGenesisBlock() *Genesis {
return &Genesis{
Config: params.DevnetChainConfig,
Nonce: 0,
ExtraData: hexutil.MustDecode("0x0000000000000000000000000000000000000000000000000000000000000000311bdf9066246e68559816e7f636435867f824ef442a44a6fc20f5b8dfa8b304d7137581f7e6bef347318441696e9ae962633c16e04d53935272639d537fc89618edae86950e12687a612e15c4786b8473898cc3c5beca5841306b26fdb4e30411392a6a74826141342a4dc33a1045cefa4182b6212ec0317bc30fbeb7208192d1474b5f87ffbc056de43c11888c073313b36cf03cf1f739f39443551ff12bbe8d993351c0e2db739f9bcbfdeda94d73b50b16d3a242960b7ca1937e826bda6c397df74d9f9ab01aa89af636787499e81362e815e36f28763eac120babebf5a6cbe6113780cbe489e3eb0db882381aebaf81190100d82f41ad2c95898195c7a47dc59115bb5ec85408683795da2f604a5c0464868eabfcb6da489a1b4304f49aafaec938c7adc48539470624e1f9c75ce33e568d8fa3ace90497ee0c60dc921eefea93e384a6ccaaf28e33790a2d1b2625bf964dfc087e2622b02b0bb78713e872c02796ef64c8f10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"),
GasLimit: 4700000,
Difficulty: big.NewInt(1),
Alloc: DecodeAllocJson(DevnetAllocData),
Timestamp: 1735513074,
}
}
// DefaultRinkebyGenesisBlock returns the Rinkeby network genesis block. // DefaultRinkebyGenesisBlock returns the Rinkeby network genesis block.
func DefaultRinkebyGenesisBlock() *Genesis { func DefaultRinkebyGenesisBlock() *Genesis {
return &Genesis{ return &Genesis{