From 54b4be1aa2a0928b6f1918d0a799c126710d5090 Mon Sep 17 00:00:00 2001 From: Daniel Liu Date: Tue, 18 Feb 2025 20:52:39 +0800 Subject: [PATCH] cmd, core: add flag mainet and devnet --- cmd/XDC/chaincmd.go | 18 ++++++++++++++++-- cmd/XDC/consolecmd.go | 2 ++ cmd/XDC/main.go | 2 ++ cmd/utils/flags.go | 36 ++++++++++++++++++++++++++++++++++-- core/genesis.go | 18 +++++++++++++++--- 5 files changed, 69 insertions(+), 7 deletions(-) diff --git a/cmd/XDC/chaincmd.go b/cmd/XDC/chaincmd.go index 2b4dc5941c..d41d8aab9e 100644 --- a/cmd/XDC/chaincmd.go +++ b/cmd/XDC/chaincmd.go @@ -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) diff --git a/cmd/XDC/consolecmd.go b/cmd/XDC/consolecmd.go index 8fb64a99c9..77627e7df3 100644 --- a/cmd/XDC/consolecmd.go +++ b/cmd/XDC/consolecmd.go @@ -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") } diff --git a/cmd/XDC/main.go b/cmd/XDC/main.go index f8c85e4746..125887cc37 100644 --- a/cmd/XDC/main.go +++ b/cmd/XDC/main.go @@ -117,7 +117,9 @@ var ( utils.NodeKeyHexFlag, //utils.DeveloperFlag, //utils.DeveloperPeriodFlag, + utils.MainnetFlag, utils.TestnetFlag, + utils.DevnetFlag, //utils.RinkebyFlag, //utils.VMEnableDebugFlag, utils.Enable0xPrefixFlag, diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index b781c20947..bcd6d434a7 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -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): diff --git a/core/genesis.go b/core/genesis.go index 224a47f143..418d77e8f7 100644 --- a/core/genesis.go +++ b/core/genesis.go @@ -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{