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.XDCXDataDirFlag,
utils.LightModeFlag,
utils.MainnetFlag,
utils.TestnetFlag,
utils.DevnetFlag,
},
Description: `
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
// the zero'd block (i.e. genesis) or will fail hard if it can't succeed.
func initGenesis(ctx *cli.Context) error {
utils.CheckExclusive(ctx, utils.MainnetFlag, utils.TestnetFlag, utils.DevnetFlag)
var err error
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 {
utils.Fatalf("The testnet flag and genesis file can't be used at the same time")
}
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 {
if ctx.Args().Len() != 1 {
utils.Fatalf("need the genesis.json file or the network name [ mainnet | testnet | devnet ] as the only argument")
}
genesisPath := ctx.Args().First()
if genesisPath == "mainnet" {
if genesisPath == "mainnet" || genesisPath == "xinfin" {
err = json.Unmarshal(xdc_genesis.MainnetGenesis, &genesis)
} else if genesisPath == "testnet" || genesisPath == "apothem" {
err = json.Unmarshal(xdc_genesis.TestnetGenesis, &genesis)

View file

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

View file

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

View file

@ -104,12 +104,23 @@ var (
Value: ethconfig.Defaults.NetworkId,
Category: flags.EthCategory,
}
MainnetFlag = &cli.BoolFlag{
Name: "mainnet",
Aliases: []string{"xinfin"},
Usage: "XDC xinfin network",
Category: flags.EthCategory,
}
TestnetFlag = &cli.BoolFlag{
Name: "testnet",
Aliases: []string{"apothem"},
Usage: "XDC apothem network",
Category: flags.EthCategory,
}
DevnetFlag = &cli.BoolFlag{
Name: "devnet",
Usage: "XDC develop network",
Category: flags.EthCategory,
}
RinkebyFlag = &cli.BoolFlag{
Name: "rinkeby",
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) {
return filepath.Join(path, "testnet")
}
if ctx.Bool(DevnetFlag.Name) {
return filepath.Join(path, "devnet")
}
if ctx.Bool(RinkebyFlag.Name) {
return filepath.Join(path, "rinkeby")
}
@ -883,7 +897,7 @@ func setBootstrapNodes(ctx *cli.Context, cfg *p2p.Config) {
switch {
case ctx.Bool(TestnetFlag.Name) || networkID == 51:
urls = params.TestnetBootnodes
case networkID == 551:
case ctx.Bool(DevnetFlag.Name) || networkID == 551:
urls = params.DevnetBootnodes
}
}
@ -916,6 +930,8 @@ func setBootstrapNodesV5(ctx *cli.Context, cfg *p2p.Config) {
urls = SplitAndTrim(ctx.String(BootnodesV5Flag.Name))
case ctx.Bool(TestnetFlag.Name):
urls = params.TestnetBootnodes
case ctx.Bool(DevnetFlag.Name):
urls = params.DevnetBootnodes
case cfg.BootstrapNodesV5 != nil:
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
case ctx.Bool(TestnetFlag.Name):
cfg.DataDir = filepath.Join(node.DefaultDataDir(), "testnet")
case ctx.Bool(DevnetFlag.Name):
cfg.DataDir = filepath.Join(node.DefaultDataDir(), "devnet")
case ctx.Bool(RinkebyFlag.Name):
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.
func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) {
// Avoid conflicting network flags
CheckExclusive(ctx, DeveloperFlag, TestnetFlag, RinkebyFlag)
CheckExclusive(ctx, MainnetFlag, TestnetFlag, DevnetFlag, DeveloperFlag, RinkebyFlag)
CheckExclusive(ctx, FastSyncFlag, LightModeFlag, SyncModeFlag)
CheckExclusive(ctx, LightServFlag, LightModeFlag)
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.
switch {
case ctx.Bool(MainnetFlag.Name):
if !ctx.IsSet(NetworkIdFlag.Name) {
cfg.NetworkId = 50
}
cfg.Genesis = core.DefaultGenesisBlock()
case ctx.Bool(TestnetFlag.Name):
if !ctx.IsSet(NetworkIdFlag.Name) {
cfg.NetworkId = 51
}
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):
if !ctx.IsSet(NetworkIdFlag.Name) {
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 {
var genesis *core.Genesis
switch {
case ctx.Bool(MainnetFlag.Name):
genesis = core.DefaultGenesisBlock()
case ctx.Bool(TestnetFlag.Name):
genesis = core.DefaultTestnetGenesisBlock()
case ctx.Bool(DevnetFlag.Name):
genesis = core.DefaultDevnetGenesisBlock()
case ctx.Bool(RinkebyFlag.Name):
genesis = core.DefaultRinkebyGenesisBlock()
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)
}
// DefaultGenesisBlock returns the Ethereum main net genesis block.
// DefaultGenesisBlock returns the XDC mainnet genesis block.
func DefaultGenesisBlock() *Genesis {
config := params.XDCMainnetChainConfig
return &Genesis{
Config: config,
Config: params.XDCMainnetChainConfig,
Nonce: 0,
ExtraData: hexutil.MustDecode("0x000000000000000000000000000000000000000000000000000000000000000025c65b4b379ac37cf78357c4915f73677022eaffc7d49d0a2cf198deebd6ce581af465944ec8b2bbcfccdea1006a5cfa7d9484b5b293b46964c265c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"),
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.
func DefaultRinkebyGenesisBlock() *Genesis {
return &Genesis{