forked from cerc-io/plugeth
		
	cmd, core, params: add support for the Holesky testnet (#28007)
* cmd, core, params: add support for the Holesky testnet * cmd/devp2p: add support for holesky for the dns crawler
This commit is contained in:
		
							parent
							
								
									5e0eb62a8e
								
							
						
					
					
						commit
						6b98d18789
					
				| @ -44,7 +44,7 @@ set to standard output. The following filters are supported: | |||||||
| - `-limit <N>` limits the output set to N entries, taking the top N nodes by score | - `-limit <N>` limits the output set to N entries, taking the top N nodes by score | ||||||
| - `-ip <CIDR>` filters nodes by IP subnet | - `-ip <CIDR>` filters nodes by IP subnet | ||||||
| - `-min-age <duration>` filters nodes by 'first seen' time | - `-min-age <duration>` filters nodes by 'first seen' time | ||||||
| - `-eth-network <mainnet/goerli/sepolia>` filters nodes by "eth" ENR entry | - `-eth-network <mainnet/goerli/sepolia/holesky>` filters nodes by "eth" ENR entry | ||||||
| - `-les-server` filters nodes by LES server support | - `-les-server` filters nodes by LES server support | ||||||
| - `-snap` filters nodes by snap protocol support | - `-snap` filters nodes by snap protocol support | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -233,6 +233,8 @@ func ethFilter(args []string) (nodeFilter, error) { | |||||||
| 		filter = forkid.NewStaticFilter(params.GoerliChainConfig, params.GoerliGenesisHash) | 		filter = forkid.NewStaticFilter(params.GoerliChainConfig, params.GoerliGenesisHash) | ||||||
| 	case "sepolia": | 	case "sepolia": | ||||||
| 		filter = forkid.NewStaticFilter(params.SepoliaChainConfig, params.SepoliaGenesisHash) | 		filter = forkid.NewStaticFilter(params.SepoliaChainConfig, params.SepoliaGenesisHash) | ||||||
|  | 	case "holesky": | ||||||
|  | 		filter = forkid.NewStaticFilter(params.HoleskyChainConfig, params.HoleskyGenesisHash) | ||||||
| 	default: | 	default: | ||||||
| 		return nil, fmt.Errorf("unknown network %q", args[0]) | 		return nil, fmt.Errorf("unknown network %q", args[0]) | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -275,6 +275,9 @@ func prepare(ctx *cli.Context) { | |||||||
| 	case ctx.IsSet(utils.SepoliaFlag.Name): | 	case ctx.IsSet(utils.SepoliaFlag.Name): | ||||||
| 		log.Info("Starting Geth on Sepolia testnet...") | 		log.Info("Starting Geth on Sepolia testnet...") | ||||||
| 
 | 
 | ||||||
|  | 	case ctx.IsSet(utils.HoleskyFlag.Name): | ||||||
|  | 		log.Info("Starting Geth on Holesky testnet...") | ||||||
|  | 
 | ||||||
| 	case ctx.IsSet(utils.DeveloperFlag.Name): | 	case ctx.IsSet(utils.DeveloperFlag.Name): | ||||||
| 		log.Info("Starting Geth in ephemeral dev mode...") | 		log.Info("Starting Geth in ephemeral dev mode...") | ||||||
| 		log.Warn(`You are running Geth in --dev mode. Please note the following: | 		log.Warn(`You are running Geth in --dev mode. Please note the following: | ||||||
| @ -299,7 +302,8 @@ func prepare(ctx *cli.Context) { | |||||||
| 	// If we're a full node on mainnet without --cache specified, bump default cache allowance
 | 	// If we're a full node on mainnet without --cache specified, bump default cache allowance
 | ||||||
| 	if ctx.String(utils.SyncModeFlag.Name) != "light" && !ctx.IsSet(utils.CacheFlag.Name) && !ctx.IsSet(utils.NetworkIdFlag.Name) { | 	if ctx.String(utils.SyncModeFlag.Name) != "light" && !ctx.IsSet(utils.CacheFlag.Name) && !ctx.IsSet(utils.NetworkIdFlag.Name) { | ||||||
| 		// Make sure we're not on any supported preconfigured testnet either
 | 		// Make sure we're not on any supported preconfigured testnet either
 | ||||||
| 		if !ctx.IsSet(utils.SepoliaFlag.Name) && | 		if !ctx.IsSet(utils.HoleskyFlag.Name) && | ||||||
|  | 			!ctx.IsSet(utils.SepoliaFlag.Name) && | ||||||
| 			!ctx.IsSet(utils.GoerliFlag.Name) && | 			!ctx.IsSet(utils.GoerliFlag.Name) && | ||||||
| 			!ctx.IsSet(utils.DeveloperFlag.Name) { | 			!ctx.IsSet(utils.DeveloperFlag.Name) { | ||||||
| 			// Nope, we're really on mainnet. Bump that cache up!
 | 			// Nope, we're really on mainnet. Bump that cache up!
 | ||||||
|  | |||||||
| @ -136,7 +136,7 @@ var ( | |||||||
| 	} | 	} | ||||||
| 	NetworkIdFlag = &cli.Uint64Flag{ | 	NetworkIdFlag = &cli.Uint64Flag{ | ||||||
| 		Name:     "networkid", | 		Name:     "networkid", | ||||||
| 		Usage:    "Explicitly set network id (integer)(For testnets: use --goerli, --sepolia instead)", | 		Usage:    "Explicitly set network id (integer)(For testnets: use --goerli, --sepolia, --holesky instead)", | ||||||
| 		Value:    ethconfig.Defaults.NetworkId, | 		Value:    ethconfig.Defaults.NetworkId, | ||||||
| 		Category: flags.EthCategory, | 		Category: flags.EthCategory, | ||||||
| 	} | 	} | ||||||
| @ -155,7 +155,11 @@ var ( | |||||||
| 		Usage:    "Sepolia network: pre-configured proof-of-work test network", | 		Usage:    "Sepolia network: pre-configured proof-of-work test network", | ||||||
| 		Category: flags.EthCategory, | 		Category: flags.EthCategory, | ||||||
| 	} | 	} | ||||||
| 
 | 	HoleskyFlag = &cli.BoolFlag{ | ||||||
|  | 		Name:     "holesky", | ||||||
|  | 		Usage:    "Holesky network: pre-configured proof-of-stake test network", | ||||||
|  | 		Category: flags.EthCategory, | ||||||
|  | 	} | ||||||
| 	// Dev mode
 | 	// Dev mode
 | ||||||
| 	DeveloperFlag = &cli.BoolFlag{ | 	DeveloperFlag = &cli.BoolFlag{ | ||||||
| 		Name:     "dev", | 		Name:     "dev", | ||||||
| @ -952,6 +956,7 @@ var ( | |||||||
| 	TestnetFlags = []cli.Flag{ | 	TestnetFlags = []cli.Flag{ | ||||||
| 		GoerliFlag, | 		GoerliFlag, | ||||||
| 		SepoliaFlag, | 		SepoliaFlag, | ||||||
|  | 		HoleskyFlag, | ||||||
| 	} | 	} | ||||||
| 	// NetworkFlags is the flag group of all built-in supported networks.
 | 	// NetworkFlags is the flag group of all built-in supported networks.
 | ||||||
| 	NetworkFlags = append([]cli.Flag{MainnetFlag}, TestnetFlags...) | 	NetworkFlags = append([]cli.Flag{MainnetFlag}, TestnetFlags...) | ||||||
| @ -982,6 +987,9 @@ func MakeDataDir(ctx *cli.Context) string { | |||||||
| 		if ctx.Bool(SepoliaFlag.Name) { | 		if ctx.Bool(SepoliaFlag.Name) { | ||||||
| 			return filepath.Join(path, "sepolia") | 			return filepath.Join(path, "sepolia") | ||||||
| 		} | 		} | ||||||
|  | 		if ctx.Bool(HoleskyFlag.Name) { | ||||||
|  | 			return filepath.Join(path, "holesky") | ||||||
|  | 		} | ||||||
| 		return path | 		return path | ||||||
| 	} | 	} | ||||||
| 	Fatalf("Cannot determine default data directory, please set manually (--datadir)") | 	Fatalf("Cannot determine default data directory, please set manually (--datadir)") | ||||||
| @ -1028,6 +1036,8 @@ func setBootstrapNodes(ctx *cli.Context, cfg *p2p.Config) { | |||||||
| 	switch { | 	switch { | ||||||
| 	case ctx.IsSet(BootnodesFlag.Name): | 	case ctx.IsSet(BootnodesFlag.Name): | ||||||
| 		urls = SplitAndTrim(ctx.String(BootnodesFlag.Name)) | 		urls = SplitAndTrim(ctx.String(BootnodesFlag.Name)) | ||||||
|  | 	case ctx.Bool(HoleskyFlag.Name): | ||||||
|  | 		urls = params.HoleskyBootnodes | ||||||
| 	case ctx.Bool(SepoliaFlag.Name): | 	case ctx.Bool(SepoliaFlag.Name): | ||||||
| 		urls = params.SepoliaBootnodes | 		urls = params.SepoliaBootnodes | ||||||
| 	case ctx.Bool(GoerliFlag.Name): | 	case ctx.Bool(GoerliFlag.Name): | ||||||
| @ -1480,6 +1490,8 @@ func SetDataDir(ctx *cli.Context, cfg *node.Config) { | |||||||
| 		cfg.DataDir = filepath.Join(node.DefaultDataDir(), "goerli") | 		cfg.DataDir = filepath.Join(node.DefaultDataDir(), "goerli") | ||||||
| 	case ctx.Bool(SepoliaFlag.Name) && cfg.DataDir == node.DefaultDataDir(): | 	case ctx.Bool(SepoliaFlag.Name) && cfg.DataDir == node.DefaultDataDir(): | ||||||
| 		cfg.DataDir = filepath.Join(node.DefaultDataDir(), "sepolia") | 		cfg.DataDir = filepath.Join(node.DefaultDataDir(), "sepolia") | ||||||
|  | 	case ctx.Bool(HoleskyFlag.Name) && cfg.DataDir == node.DefaultDataDir(): | ||||||
|  | 		cfg.DataDir = filepath.Join(node.DefaultDataDir(), "holesky") | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -1636,7 +1648,7 @@ func CheckExclusive(ctx *cli.Context, args ...interface{}) { | |||||||
| // 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, MainnetFlag, DeveloperFlag, GoerliFlag, SepoliaFlag) | 	CheckExclusive(ctx, MainnetFlag, DeveloperFlag, GoerliFlag, SepoliaFlag, HoleskyFlag) | ||||||
| 	CheckExclusive(ctx, LightServeFlag, SyncModeFlag, "light") | 	CheckExclusive(ctx, LightServeFlag, SyncModeFlag, "light") | ||||||
| 	CheckExclusive(ctx, DeveloperFlag, ExternalSignerFlag) // Can't use both ephemeral unlocked and external signer
 | 	CheckExclusive(ctx, DeveloperFlag, ExternalSignerFlag) // Can't use both ephemeral unlocked and external signer
 | ||||||
| 
 | 
 | ||||||
| @ -1789,6 +1801,12 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) { | |||||||
| 		} | 		} | ||||||
| 		cfg.Genesis = core.DefaultGenesisBlock() | 		cfg.Genesis = core.DefaultGenesisBlock() | ||||||
| 		SetDNSDiscoveryDefaults(cfg, params.MainnetGenesisHash) | 		SetDNSDiscoveryDefaults(cfg, params.MainnetGenesisHash) | ||||||
|  | 	case ctx.Bool(HoleskyFlag.Name): | ||||||
|  | 		if !ctx.IsSet(NetworkIdFlag.Name) { | ||||||
|  | 			cfg.NetworkId = 17000 | ||||||
|  | 		} | ||||||
|  | 		cfg.Genesis = core.DefaultHoleskyGenesisBlock() | ||||||
|  | 		SetDNSDiscoveryDefaults(cfg, params.HoleskyGenesisHash) | ||||||
| 	case ctx.Bool(SepoliaFlag.Name): | 	case ctx.Bool(SepoliaFlag.Name): | ||||||
| 		if !ctx.IsSet(NetworkIdFlag.Name) { | 		if !ctx.IsSet(NetworkIdFlag.Name) { | ||||||
| 			cfg.NetworkId = 11155111 | 			cfg.NetworkId = 11155111 | ||||||
| @ -2121,6 +2139,8 @@ func MakeGenesis(ctx *cli.Context) *core.Genesis { | |||||||
| 	switch { | 	switch { | ||||||
| 	case ctx.Bool(MainnetFlag.Name): | 	case ctx.Bool(MainnetFlag.Name): | ||||||
| 		genesis = core.DefaultGenesisBlock() | 		genesis = core.DefaultGenesisBlock() | ||||||
|  | 	case ctx.Bool(HoleskyFlag.Name): | ||||||
|  | 		genesis = core.DefaultHoleskyGenesisBlock() | ||||||
| 	case ctx.Bool(SepoliaFlag.Name): | 	case ctx.Bool(SepoliaFlag.Name): | ||||||
| 		genesis = core.DefaultSepoliaGenesisBlock() | 		genesis = core.DefaultSepoliaGenesisBlock() | ||||||
| 	case ctx.Bool(GoerliFlag.Name): | 	case ctx.Bool(GoerliFlag.Name): | ||||||
|  | |||||||
| @ -580,6 +580,19 @@ func DefaultSepoliaGenesisBlock() *Genesis { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // DefaultHoleskyGenesisBlock returns the Holesky network genesis block.
 | ||||||
|  | func DefaultHoleskyGenesisBlock() *Genesis { | ||||||
|  | 	return &Genesis{ | ||||||
|  | 		Config:     params.HoleskyChainConfig, | ||||||
|  | 		Nonce:      0x1234, | ||||||
|  | 		ExtraData:  hexutil.MustDecode("0x686f77206d7563682069732074686520666973683f"), | ||||||
|  | 		GasLimit:   0x17d7840, | ||||||
|  | 		Difficulty: big.NewInt(0x01), | ||||||
|  | 		Timestamp:  1694786100, | ||||||
|  | 		Alloc:      decodePrealloc(holeskyAllocData), | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // DeveloperGenesisBlock returns the 'geth --dev' genesis block.
 | // DeveloperGenesisBlock returns the 'geth --dev' genesis block.
 | ||||||
| func DeveloperGenesisBlock(gasLimit uint64, faucet common.Address) *Genesis { | func DeveloperGenesisBlock(gasLimit uint64, faucet common.Address) *Genesis { | ||||||
| 	// Override the default period to the user requested one
 | 	// Override the default period to the user requested one
 | ||||||
| @ -607,13 +620,34 @@ func DeveloperGenesisBlock(gasLimit uint64, faucet common.Address) *Genesis { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func decodePrealloc(data string) GenesisAlloc { | func decodePrealloc(data string) GenesisAlloc { | ||||||
| 	var p []struct{ Addr, Balance *big.Int } | 	var p []struct { | ||||||
|  | 		Addr    *big.Int | ||||||
|  | 		Balance *big.Int | ||||||
|  | 		Misc    *struct { | ||||||
|  | 			Nonce uint64 | ||||||
|  | 			Code  []byte | ||||||
|  | 			Slots []struct { | ||||||
|  | 				Key common.Hash | ||||||
|  | 				Val common.Hash | ||||||
|  | 			} | ||||||
|  | 		} `rlp:"optional"` | ||||||
|  | 	} | ||||||
| 	if err := rlp.NewStream(strings.NewReader(data), 0).Decode(&p); err != nil { | 	if err := rlp.NewStream(strings.NewReader(data), 0).Decode(&p); err != nil { | ||||||
| 		panic(err) | 		panic(err) | ||||||
| 	} | 	} | ||||||
| 	ga := make(GenesisAlloc, len(p)) | 	ga := make(GenesisAlloc, len(p)) | ||||||
| 	for _, account := range p { | 	for _, account := range p { | ||||||
| 		ga[common.BigToAddress(account.Addr)] = GenesisAccount{Balance: account.Balance} | 		acc := GenesisAccount{Balance: account.Balance} | ||||||
|  | 		if account.Misc != nil { | ||||||
|  | 			acc.Nonce = account.Misc.Nonce | ||||||
|  | 			acc.Code = account.Misc.Code | ||||||
|  | 
 | ||||||
|  | 			acc.Storage = make(map[common.Hash]common.Hash) | ||||||
|  | 			for _, slot := range account.Misc.Slots { | ||||||
|  | 				acc.Storage[slot.Key] = slot.Val | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		ga[common.BigToAddress(account.Addr)] = acc | ||||||
| 	} | 	} | ||||||
| 	return ga | 	return ga | ||||||
| } | } | ||||||
|  | |||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @ -32,24 +32,51 @@ import ( | |||||||
| 	"os" | 	"os" | ||||||
| 	"strconv" | 	"strconv" | ||||||
| 
 | 
 | ||||||
|  | 	"github.com/ethereum/go-ethereum/common" | ||||||
| 	"github.com/ethereum/go-ethereum/core" | 	"github.com/ethereum/go-ethereum/core" | ||||||
| 	"github.com/ethereum/go-ethereum/rlp" | 	"github.com/ethereum/go-ethereum/rlp" | ||||||
| 	"golang.org/x/exp/slices" | 	"golang.org/x/exp/slices" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| type allocItem struct{ Addr, Balance *big.Int } | type allocItem struct { | ||||||
|  | 	Addr    *big.Int | ||||||
|  | 	Balance *big.Int | ||||||
|  | 	Misc    *allocItemMisc `rlp:"optional"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type allocItemMisc struct { | ||||||
|  | 	Nonce uint64 | ||||||
|  | 	Code  []byte | ||||||
|  | 	Slots []allocItemStorageItem | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type allocItemStorageItem struct { | ||||||
|  | 	Key common.Hash | ||||||
|  | 	Val common.Hash | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| func makelist(g *core.Genesis) []allocItem { | func makelist(g *core.Genesis) []allocItem { | ||||||
| 	items := make([]allocItem, 0, len(g.Alloc)) | 	items := make([]allocItem, 0, len(g.Alloc)) | ||||||
| 	for addr, account := range g.Alloc { | 	for addr, account := range g.Alloc { | ||||||
|  | 		var misc *allocItemMisc | ||||||
| 		if len(account.Storage) > 0 || len(account.Code) > 0 || account.Nonce != 0 { | 		if len(account.Storage) > 0 || len(account.Code) > 0 || account.Nonce != 0 { | ||||||
| 			panic(fmt.Sprintf("can't encode account %x", addr)) | 			misc = &allocItemMisc{ | ||||||
|  | 				Nonce: account.Nonce, | ||||||
|  | 				Code:  account.Code, | ||||||
|  | 				Slots: make([]allocItemStorageItem, 0, len(account.Storage)), | ||||||
|  | 			} | ||||||
|  | 			for key, val := range account.Storage { | ||||||
|  | 				misc.Slots = append(misc.Slots, allocItemStorageItem{key, val}) | ||||||
|  | 			} | ||||||
|  | 			slices.SortFunc(misc.Slots, func(a, b allocItemStorageItem) int { | ||||||
|  | 				return a.Key.Cmp(b.Key) | ||||||
|  | 			}) | ||||||
| 		} | 		} | ||||||
| 		bigAddr := new(big.Int).SetBytes(addr.Bytes()) | 		bigAddr := new(big.Int).SetBytes(addr.Bytes()) | ||||||
| 		items = append(items, allocItem{bigAddr, account.Balance}) | 		items = append(items, allocItem{bigAddr, account.Balance, misc}) | ||||||
| 	} | 	} | ||||||
| 	slices.SortFunc(items, func(a, b allocItem) bool { | 	slices.SortFunc(items, func(a, b allocItem) int { | ||||||
| 		return a.Addr.Cmp(b.Addr) < 0 | 		return a.Addr.Cmp(b.Addr) | ||||||
| 	}) | 	}) | ||||||
| 	return items | 	return items | ||||||
| } | } | ||||||
|  | |||||||
| @ -28,6 +28,14 @@ var MainnetBootnodes = []string{ | |||||||
| 	"enode://4aeb4ab6c14b23e2c4cfdce879c04b0748a20d8e9b59e25ded2a08143e265c6c25936e74cbc8e641e3312ca288673d91f2f93f8e277de3cfa444ecdaaf982052@157.90.35.166:30303", // bootnode-hetzner-fsn
 | 	"enode://4aeb4ab6c14b23e2c4cfdce879c04b0748a20d8e9b59e25ded2a08143e265c6c25936e74cbc8e641e3312ca288673d91f2f93f8e277de3cfa444ecdaaf982052@157.90.35.166:30303", // bootnode-hetzner-fsn
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // HoleskyBootnodes are the enode URLs of the P2P bootstrap nodes running on the
 | ||||||
|  | // Holesky test network.
 | ||||||
|  | var HoleskyBootnodes = []string{ | ||||||
|  | 	// EF DevOps
 | ||||||
|  | 	"enode://ac906289e4b7f12df423d654c5a962b6ebe5b3a74cc9e06292a85221f9a64a6f1cfdd6b714ed6dacef51578f92b34c60ee91e9ede9c7f8fadc4d347326d95e2b@146.190.13.128:30303", | ||||||
|  | 	"enode://a3435a0155a3e837c02f5e7f5662a2f1fbc25b48e4dc232016e1c51b544cb5b4510ef633ea3278c0e970fa8ad8141e2d4d0f9f95456c537ff05fdf9b31c15072@178.128.136.233:30303", | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // SepoliaBootnodes are the enode URLs of the P2P bootstrap nodes running on the
 | // SepoliaBootnodes are the enode URLs of the P2P bootstrap nodes running on the
 | ||||||
| // Sepolia test network.
 | // Sepolia test network.
 | ||||||
| var SepoliaBootnodes = []string{ | var SepoliaBootnodes = []string{ | ||||||
| @ -88,6 +96,8 @@ func KnownDNSNetwork(genesis common.Hash, protocol string) string { | |||||||
| 		net = "goerli" | 		net = "goerli" | ||||||
| 	case SepoliaGenesisHash: | 	case SepoliaGenesisHash: | ||||||
| 		net = "sepolia" | 		net = "sepolia" | ||||||
|  | 	case HoleskyGenesisHash: | ||||||
|  | 		net = "holesky" | ||||||
| 	default: | 	default: | ||||||
| 		return "" | 		return "" | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -26,6 +26,7 @@ import ( | |||||||
| // Genesis hashes to enforce below configs on.
 | // Genesis hashes to enforce below configs on.
 | ||||||
| var ( | var ( | ||||||
| 	MainnetGenesisHash = common.HexToHash("0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3") | 	MainnetGenesisHash = common.HexToHash("0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3") | ||||||
|  | 	HoleskyGenesisHash = common.HexToHash("0xff9006519a8ce843ac9c28549d24211420b546e12ce2d170c77a8cca7964f23d") | ||||||
| 	SepoliaGenesisHash = common.HexToHash("0x25a5cc106eea7138acab33231d7160d69cb777ee0c2c553fcddf5138993e6dd9") | 	SepoliaGenesisHash = common.HexToHash("0x25a5cc106eea7138acab33231d7160d69cb777ee0c2c553fcddf5138993e6dd9") | ||||||
| 	GoerliGenesisHash  = common.HexToHash("0xbf7e331f7f7c1dd2e05159666b3bf8bc7a8a3a9eb1d518969eab529dd9b88c1a") | 	GoerliGenesisHash  = common.HexToHash("0xbf7e331f7f7c1dd2e05159666b3bf8bc7a8a3a9eb1d518969eab529dd9b88c1a") | ||||||
| ) | ) | ||||||
| @ -58,6 +59,31 @@ var ( | |||||||
| 		ShanghaiTime:                  newUint64(1681338455), | 		ShanghaiTime:                  newUint64(1681338455), | ||||||
| 		Ethash:                        new(EthashConfig), | 		Ethash:                        new(EthashConfig), | ||||||
| 	} | 	} | ||||||
|  | 	// HoleskyChainConfig contains the chain parameters to run a node on the Holesky test network.
 | ||||||
|  | 	HoleskyChainConfig = &ChainConfig{ | ||||||
|  | 		ChainID:                       big.NewInt(17000), | ||||||
|  | 		HomesteadBlock:                big.NewInt(0), | ||||||
|  | 		DAOForkBlock:                  nil, | ||||||
|  | 		DAOForkSupport:                true, | ||||||
|  | 		EIP150Block:                   big.NewInt(0), | ||||||
|  | 		EIP155Block:                   big.NewInt(0), | ||||||
|  | 		EIP158Block:                   big.NewInt(0), | ||||||
|  | 		ByzantiumBlock:                big.NewInt(0), | ||||||
|  | 		ConstantinopleBlock:           big.NewInt(0), | ||||||
|  | 		PetersburgBlock:               big.NewInt(0), | ||||||
|  | 		IstanbulBlock:                 big.NewInt(0), | ||||||
|  | 		MuirGlacierBlock:              nil, | ||||||
|  | 		BerlinBlock:                   big.NewInt(0), | ||||||
|  | 		LondonBlock:                   big.NewInt(0), | ||||||
|  | 		ArrowGlacierBlock:             nil, | ||||||
|  | 		GrayGlacierBlock:              nil, | ||||||
|  | 		TerminalTotalDifficulty:       big.NewInt(0), | ||||||
|  | 		TerminalTotalDifficultyPassed: true, | ||||||
|  | 		MergeNetsplitBlock:            nil, | ||||||
|  | 		ShanghaiTime:                  newUint64(1694790240), | ||||||
|  | 		CancunTime:                    newUint64(2000000000), | ||||||
|  | 		Ethash:                        new(EthashConfig), | ||||||
|  | 	} | ||||||
| 	// SepoliaChainConfig contains the chain parameters to run a node on the Sepolia test network.
 | 	// SepoliaChainConfig contains the chain parameters to run a node on the Sepolia test network.
 | ||||||
| 	SepoliaChainConfig = &ChainConfig{ | 	SepoliaChainConfig = &ChainConfig{ | ||||||
| 		ChainID:                       big.NewInt(11155111), | 		ChainID:                       big.NewInt(11155111), | ||||||
| @ -74,6 +100,8 @@ var ( | |||||||
| 		MuirGlacierBlock:              big.NewInt(0), | 		MuirGlacierBlock:              big.NewInt(0), | ||||||
| 		BerlinBlock:                   big.NewInt(0), | 		BerlinBlock:                   big.NewInt(0), | ||||||
| 		LondonBlock:                   big.NewInt(0), | 		LondonBlock:                   big.NewInt(0), | ||||||
|  | 		ArrowGlacierBlock:             nil, | ||||||
|  | 		GrayGlacierBlock:              nil, | ||||||
| 		TerminalTotalDifficulty:       big.NewInt(17_000_000_000_000_000), | 		TerminalTotalDifficulty:       big.NewInt(17_000_000_000_000_000), | ||||||
| 		TerminalTotalDifficultyPassed: true, | 		TerminalTotalDifficultyPassed: true, | ||||||
| 		MergeNetsplitBlock:            big.NewInt(1735371), | 		MergeNetsplitBlock:            big.NewInt(1735371), | ||||||
| @ -253,6 +281,7 @@ var NetworkNames = map[string]string{ | |||||||
| 	MainnetChainConfig.ChainID.String(): "mainnet", | 	MainnetChainConfig.ChainID.String(): "mainnet", | ||||||
| 	GoerliChainConfig.ChainID.String():  "goerli", | 	GoerliChainConfig.ChainID.String():  "goerli", | ||||||
| 	SepoliaChainConfig.ChainID.String(): "sepolia", | 	SepoliaChainConfig.ChainID.String(): "sepolia", | ||||||
|  | 	HoleskyChainConfig.ChainID.String(): "holesky", | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // ChainConfig is the core config which determines the blockchain settings.
 | // ChainConfig is the core config which determines the blockchain settings.
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user