all: define London+baikal, undefine yolov3, add london override flag (#22822)
* all: define London+baikal, undefine yolov3, add london override flag * cmd, core, params: add baikal genesis definition
This commit is contained in:
		
							parent
							
								
									df20b3b982
								
							
						
					
					
						commit
						cc606be74c
					
				| @ -63,7 +63,7 @@ It expects the genesis file as argument.`, | |||||||
| 			utils.RopstenFlag, | 			utils.RopstenFlag, | ||||||
| 			utils.RinkebyFlag, | 			utils.RinkebyFlag, | ||||||
| 			utils.GoerliFlag, | 			utils.GoerliFlag, | ||||||
| 			utils.YoloV3Flag, | 			utils.BaikalFlag, | ||||||
| 		}, | 		}, | ||||||
| 		Category: "BLOCKCHAIN COMMANDS", | 		Category: "BLOCKCHAIN COMMANDS", | ||||||
| 		Description: ` | 		Description: ` | ||||||
|  | |||||||
| @ -141,8 +141,8 @@ func makeConfigNode(ctx *cli.Context) (*node.Node, gethConfig) { | |||||||
| // makeFullNode loads geth configuration and creates the Ethereum backend.
 | // makeFullNode loads geth configuration and creates the Ethereum backend.
 | ||||||
| func makeFullNode(ctx *cli.Context) (*node.Node, ethapi.Backend) { | func makeFullNode(ctx *cli.Context) (*node.Node, ethapi.Backend) { | ||||||
| 	stack, cfg := makeConfigNode(ctx) | 	stack, cfg := makeConfigNode(ctx) | ||||||
| 	if ctx.GlobalIsSet(utils.OverrideBerlinFlag.Name) { | 	if ctx.GlobalIsSet(utils.OverrideLondonFlag.Name) { | ||||||
| 		cfg.Eth.OverrideBerlin = new(big.Int).SetUint64(ctx.GlobalUint64(utils.OverrideBerlinFlag.Name)) | 		cfg.Eth.OverrideLondon = new(big.Int).SetUint64(ctx.GlobalUint64(utils.OverrideLondonFlag.Name)) | ||||||
| 	} | 	} | ||||||
| 	backend, eth := utils.RegisterEthService(stack, &cfg.Eth) | 	backend, eth := utils.RegisterEthService(stack, &cfg.Eth) | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -134,8 +134,8 @@ func remoteConsole(ctx *cli.Context) error { | |||||||
| 				path = filepath.Join(path, "rinkeby") | 				path = filepath.Join(path, "rinkeby") | ||||||
| 			} else if ctx.GlobalBool(utils.GoerliFlag.Name) { | 			} else if ctx.GlobalBool(utils.GoerliFlag.Name) { | ||||||
| 				path = filepath.Join(path, "goerli") | 				path = filepath.Join(path, "goerli") | ||||||
| 			} else if ctx.GlobalBool(utils.YoloV3Flag.Name) { | 			} else if ctx.GlobalBool(utils.BaikalFlag.Name) { | ||||||
| 				path = filepath.Join(path, "yolo-v3") | 				path = filepath.Join(path, "baikal") | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 		endpoint = fmt.Sprintf("%s/geth.ipc", path) | 		endpoint = fmt.Sprintf("%s/geth.ipc", path) | ||||||
|  | |||||||
| @ -75,7 +75,7 @@ Remove blockchain and state databases`, | |||||||
| 			utils.RopstenFlag, | 			utils.RopstenFlag, | ||||||
| 			utils.RinkebyFlag, | 			utils.RinkebyFlag, | ||||||
| 			utils.GoerliFlag, | 			utils.GoerliFlag, | ||||||
| 			utils.YoloV3Flag, | 			utils.BaikalFlag, | ||||||
| 		}, | 		}, | ||||||
| 		Usage:       "Inspect the storage size for each type of data in the database", | 		Usage:       "Inspect the storage size for each type of data in the database", | ||||||
| 		Description: `This commands iterates the entire database. If the optional 'prefix' and 'start' arguments are provided, then the iteration is limited to the given subset of data.`, | 		Description: `This commands iterates the entire database. If the optional 'prefix' and 'start' arguments are provided, then the iteration is limited to the given subset of data.`, | ||||||
| @ -91,7 +91,7 @@ Remove blockchain and state databases`, | |||||||
| 			utils.RopstenFlag, | 			utils.RopstenFlag, | ||||||
| 			utils.RinkebyFlag, | 			utils.RinkebyFlag, | ||||||
| 			utils.GoerliFlag, | 			utils.GoerliFlag, | ||||||
| 			utils.YoloV3Flag, | 			utils.BaikalFlag, | ||||||
| 		}, | 		}, | ||||||
| 	} | 	} | ||||||
| 	dbCompactCmd = cli.Command{ | 	dbCompactCmd = cli.Command{ | ||||||
| @ -105,7 +105,7 @@ Remove blockchain and state databases`, | |||||||
| 			utils.RopstenFlag, | 			utils.RopstenFlag, | ||||||
| 			utils.RinkebyFlag, | 			utils.RinkebyFlag, | ||||||
| 			utils.GoerliFlag, | 			utils.GoerliFlag, | ||||||
| 			utils.YoloV3Flag, | 			utils.BaikalFlag, | ||||||
| 			utils.CacheFlag, | 			utils.CacheFlag, | ||||||
| 			utils.CacheDatabaseFlag, | 			utils.CacheDatabaseFlag, | ||||||
| 		}, | 		}, | ||||||
| @ -125,7 +125,7 @@ corruption if it is aborted during execution'!`, | |||||||
| 			utils.RopstenFlag, | 			utils.RopstenFlag, | ||||||
| 			utils.RinkebyFlag, | 			utils.RinkebyFlag, | ||||||
| 			utils.GoerliFlag, | 			utils.GoerliFlag, | ||||||
| 			utils.YoloV3Flag, | 			utils.BaikalFlag, | ||||||
| 		}, | 		}, | ||||||
| 		Description: "This command looks up the specified database key from the database.", | 		Description: "This command looks up the specified database key from the database.", | ||||||
| 	} | 	} | ||||||
| @ -141,7 +141,7 @@ corruption if it is aborted during execution'!`, | |||||||
| 			utils.RopstenFlag, | 			utils.RopstenFlag, | ||||||
| 			utils.RinkebyFlag, | 			utils.RinkebyFlag, | ||||||
| 			utils.GoerliFlag, | 			utils.GoerliFlag, | ||||||
| 			utils.YoloV3Flag, | 			utils.BaikalFlag, | ||||||
| 		}, | 		}, | ||||||
| 		Description: `This command deletes the specified database key from the database.  | 		Description: `This command deletes the specified database key from the database.  | ||||||
| WARNING: This is a low-level operation which may cause database corruption!`, | WARNING: This is a low-level operation which may cause database corruption!`, | ||||||
| @ -158,7 +158,7 @@ WARNING: This is a low-level operation which may cause database corruption!`, | |||||||
| 			utils.RopstenFlag, | 			utils.RopstenFlag, | ||||||
| 			utils.RinkebyFlag, | 			utils.RinkebyFlag, | ||||||
| 			utils.GoerliFlag, | 			utils.GoerliFlag, | ||||||
| 			utils.YoloV3Flag, | 			utils.BaikalFlag, | ||||||
| 		}, | 		}, | ||||||
| 		Description: `This command sets a given database key to the given value.  | 		Description: `This command sets a given database key to the given value.  | ||||||
| WARNING: This is a low-level operation which may cause database corruption!`, | WARNING: This is a low-level operation which may cause database corruption!`, | ||||||
| @ -175,7 +175,7 @@ WARNING: This is a low-level operation which may cause database corruption!`, | |||||||
| 			utils.RopstenFlag, | 			utils.RopstenFlag, | ||||||
| 			utils.RinkebyFlag, | 			utils.RinkebyFlag, | ||||||
| 			utils.GoerliFlag, | 			utils.GoerliFlag, | ||||||
| 			utils.YoloV3Flag, | 			utils.BaikalFlag, | ||||||
| 		}, | 		}, | ||||||
| 		Description: "This command looks up the specified database key from the database.", | 		Description: "This command looks up the specified database key from the database.", | ||||||
| 	} | 	} | ||||||
| @ -191,7 +191,7 @@ WARNING: This is a low-level operation which may cause database corruption!`, | |||||||
| 			utils.RopstenFlag, | 			utils.RopstenFlag, | ||||||
| 			utils.RinkebyFlag, | 			utils.RinkebyFlag, | ||||||
| 			utils.GoerliFlag, | 			utils.GoerliFlag, | ||||||
| 			utils.YoloV3Flag, | 			utils.BaikalFlag, | ||||||
| 		}, | 		}, | ||||||
| 		Description: "This command displays information about the freezer index.", | 		Description: "This command displays information about the freezer index.", | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -66,7 +66,7 @@ var ( | |||||||
| 		utils.NoUSBFlag, | 		utils.NoUSBFlag, | ||||||
| 		utils.USBFlag, | 		utils.USBFlag, | ||||||
| 		utils.SmartCardDaemonPathFlag, | 		utils.SmartCardDaemonPathFlag, | ||||||
| 		utils.OverrideBerlinFlag, | 		utils.OverrideLondonFlag, | ||||||
| 		utils.EthashCacheDirFlag, | 		utils.EthashCacheDirFlag, | ||||||
| 		utils.EthashCachesInMemoryFlag, | 		utils.EthashCachesInMemoryFlag, | ||||||
| 		utils.EthashCachesOnDiskFlag, | 		utils.EthashCachesOnDiskFlag, | ||||||
| @ -138,7 +138,7 @@ var ( | |||||||
| 		utils.RopstenFlag, | 		utils.RopstenFlag, | ||||||
| 		utils.RinkebyFlag, | 		utils.RinkebyFlag, | ||||||
| 		utils.GoerliFlag, | 		utils.GoerliFlag, | ||||||
| 		utils.YoloV3Flag, | 		utils.BaikalFlag, | ||||||
| 		utils.VMEnableDebugFlag, | 		utils.VMEnableDebugFlag, | ||||||
| 		utils.NetworkIdFlag, | 		utils.NetworkIdFlag, | ||||||
| 		utils.EthStatsURLFlag, | 		utils.EthStatsURLFlag, | ||||||
| @ -275,8 +275,8 @@ func prepare(ctx *cli.Context) { | |||||||
| 	case ctx.GlobalIsSet(utils.GoerliFlag.Name): | 	case ctx.GlobalIsSet(utils.GoerliFlag.Name): | ||||||
| 		log.Info("Starting Geth on Görli testnet...") | 		log.Info("Starting Geth on Görli testnet...") | ||||||
| 
 | 
 | ||||||
| 	case ctx.GlobalIsSet(utils.YoloV3Flag.Name): | 	case ctx.GlobalIsSet(utils.BaikalFlag.Name): | ||||||
| 		log.Info("Starting Geth on YOLOv3 testnet...") | 		log.Info("Starting Geth on Baikal testnet...") | ||||||
| 
 | 
 | ||||||
| 	case ctx.GlobalIsSet(utils.DeveloperFlag.Name): | 	case ctx.GlobalIsSet(utils.DeveloperFlag.Name): | ||||||
| 		log.Info("Starting Geth in ephemeral dev mode...") | 		log.Info("Starting Geth in ephemeral dev mode...") | ||||||
|  | |||||||
| @ -44,7 +44,7 @@ var AppHelpFlagGroups = []flags.FlagGroup{ | |||||||
| 			utils.MainnetFlag, | 			utils.MainnetFlag, | ||||||
| 			utils.GoerliFlag, | 			utils.GoerliFlag, | ||||||
| 			utils.RinkebyFlag, | 			utils.RinkebyFlag, | ||||||
| 			utils.YoloV3Flag, | 			utils.BaikalFlag, | ||||||
| 			utils.RopstenFlag, | 			utils.RopstenFlag, | ||||||
| 			utils.SyncModeFlag, | 			utils.SyncModeFlag, | ||||||
| 			utils.ExitWhenSyncedFlag, | 			utils.ExitWhenSyncedFlag, | ||||||
|  | |||||||
| @ -240,8 +240,8 @@ func (w *wizard) manageGenesis() { | |||||||
| 		w.conf.Genesis.Config.BerlinBlock = w.readDefaultBigInt(w.conf.Genesis.Config.BerlinBlock) | 		w.conf.Genesis.Config.BerlinBlock = w.readDefaultBigInt(w.conf.Genesis.Config.BerlinBlock) | ||||||
| 
 | 
 | ||||||
| 		fmt.Println() | 		fmt.Println() | ||||||
| 		fmt.Printf("Which block should YOLOv3 come into effect? (default = %v)\n", w.conf.Genesis.Config.YoloV3Block) | 		fmt.Printf("Which block should London come into effect? (default = %v)\n", w.conf.Genesis.Config.LondonBlock) | ||||||
| 		w.conf.Genesis.Config.YoloV3Block = w.readDefaultBigInt(w.conf.Genesis.Config.YoloV3Block) | 		w.conf.Genesis.Config.LondonBlock = w.readDefaultBigInt(w.conf.Genesis.Config.LondonBlock) | ||||||
| 
 | 
 | ||||||
| 		out, _ := json.MarshalIndent(w.conf.Genesis.Config, "", "  ") | 		out, _ := json.MarshalIndent(w.conf.Genesis.Config, "", "  ") | ||||||
| 		fmt.Printf("Chain configuration updated:\n\n%s\n", out) | 		fmt.Printf("Chain configuration updated:\n\n%s\n", out) | ||||||
|  | |||||||
| @ -151,9 +151,9 @@ var ( | |||||||
| 		Name:  "goerli", | 		Name:  "goerli", | ||||||
| 		Usage: "Görli network: pre-configured proof-of-authority test network", | 		Usage: "Görli network: pre-configured proof-of-authority test network", | ||||||
| 	} | 	} | ||||||
| 	YoloV3Flag = cli.BoolFlag{ | 	BaikalFlag = cli.BoolFlag{ | ||||||
| 		Name:  "yolov3", | 		Name:  "baikal", | ||||||
| 		Usage: "YOLOv3 network: pre-configured proof-of-authority shortlived test network.", | 		Usage: "Bailkal network: pre-configured proof-of-authority shortlived test network.", | ||||||
| 	} | 	} | ||||||
| 	RinkebyFlag = cli.BoolFlag{ | 	RinkebyFlag = cli.BoolFlag{ | ||||||
| 		Name:  "rinkeby", | 		Name:  "rinkeby", | ||||||
| @ -233,9 +233,9 @@ var ( | |||||||
| 		Usage: "Megabytes of memory allocated to bloom-filter for pruning", | 		Usage: "Megabytes of memory allocated to bloom-filter for pruning", | ||||||
| 		Value: 2048, | 		Value: 2048, | ||||||
| 	} | 	} | ||||||
| 	OverrideBerlinFlag = cli.Uint64Flag{ | 	OverrideLondonFlag = cli.Uint64Flag{ | ||||||
| 		Name:  "override.berlin", | 		Name:  "override.london", | ||||||
| 		Usage: "Manually specify Berlin fork-block, overriding the bundled setting", | 		Usage: "Manually specify London fork-block, overriding the bundled setting", | ||||||
| 	} | 	} | ||||||
| 	// Light server and client settings
 | 	// Light server and client settings
 | ||||||
| 	LightServeFlag = cli.IntFlag{ | 	LightServeFlag = cli.IntFlag{ | ||||||
| @ -778,8 +778,8 @@ func MakeDataDir(ctx *cli.Context) string { | |||||||
| 		if ctx.GlobalBool(GoerliFlag.Name) { | 		if ctx.GlobalBool(GoerliFlag.Name) { | ||||||
| 			return filepath.Join(path, "goerli") | 			return filepath.Join(path, "goerli") | ||||||
| 		} | 		} | ||||||
| 		if ctx.GlobalBool(YoloV3Flag.Name) { | 		if ctx.GlobalBool(BaikalFlag.Name) { | ||||||
| 			return filepath.Join(path, "yolo-v3") | 			return filepath.Join(path, "baikal") | ||||||
| 		} | 		} | ||||||
| 		return path | 		return path | ||||||
| 	} | 	} | ||||||
| @ -833,8 +833,8 @@ func setBootstrapNodes(ctx *cli.Context, cfg *p2p.Config) { | |||||||
| 		urls = params.RinkebyBootnodes | 		urls = params.RinkebyBootnodes | ||||||
| 	case ctx.GlobalBool(GoerliFlag.Name): | 	case ctx.GlobalBool(GoerliFlag.Name): | ||||||
| 		urls = params.GoerliBootnodes | 		urls = params.GoerliBootnodes | ||||||
| 	case ctx.GlobalBool(YoloV3Flag.Name): | 	case ctx.GlobalBool(BaikalFlag.Name): | ||||||
| 		urls = params.YoloV3Bootnodes | 		urls = params.BaikalBootnodes | ||||||
| 	case cfg.BootstrapNodes != nil: | 	case cfg.BootstrapNodes != nil: | ||||||
| 		return // already set, don't apply defaults.
 | 		return // already set, don't apply defaults.
 | ||||||
| 	} | 	} | ||||||
| @ -1275,8 +1275,8 @@ func setDataDir(ctx *cli.Context, cfg *node.Config) { | |||||||
| 		cfg.DataDir = filepath.Join(node.DefaultDataDir(), "rinkeby") | 		cfg.DataDir = filepath.Join(node.DefaultDataDir(), "rinkeby") | ||||||
| 	case ctx.GlobalBool(GoerliFlag.Name) && cfg.DataDir == node.DefaultDataDir(): | 	case ctx.GlobalBool(GoerliFlag.Name) && cfg.DataDir == node.DefaultDataDir(): | ||||||
| 		cfg.DataDir = filepath.Join(node.DefaultDataDir(), "goerli") | 		cfg.DataDir = filepath.Join(node.DefaultDataDir(), "goerli") | ||||||
| 	case ctx.GlobalBool(YoloV3Flag.Name) && cfg.DataDir == node.DefaultDataDir(): | 	case ctx.GlobalBool(BaikalFlag.Name) && cfg.DataDir == node.DefaultDataDir(): | ||||||
| 		cfg.DataDir = filepath.Join(node.DefaultDataDir(), "yolo-v3") | 		cfg.DataDir = filepath.Join(node.DefaultDataDir(), "baikal") | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -1460,7 +1460,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, RopstenFlag, RinkebyFlag, GoerliFlag, YoloV3Flag) | 	CheckExclusive(ctx, MainnetFlag, DeveloperFlag, RopstenFlag, RinkebyFlag, GoerliFlag, BaikalFlag) | ||||||
| 	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
 | ||||||
| 	if ctx.GlobalString(GCModeFlag.Name) == "archive" && ctx.GlobalUint64(TxLookupLimitFlag.Name) != 0 { | 	if ctx.GlobalString(GCModeFlag.Name) == "archive" && ctx.GlobalUint64(TxLookupLimitFlag.Name) != 0 { | ||||||
| @ -1620,11 +1620,11 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) { | |||||||
| 		} | 		} | ||||||
| 		cfg.Genesis = core.DefaultGoerliGenesisBlock() | 		cfg.Genesis = core.DefaultGoerliGenesisBlock() | ||||||
| 		SetDNSDiscoveryDefaults(cfg, params.GoerliGenesisHash) | 		SetDNSDiscoveryDefaults(cfg, params.GoerliGenesisHash) | ||||||
| 	case ctx.GlobalBool(YoloV3Flag.Name): | 	case ctx.GlobalBool(BaikalFlag.Name): | ||||||
| 		if !ctx.GlobalIsSet(NetworkIdFlag.Name) { | 		if !ctx.GlobalIsSet(NetworkIdFlag.Name) { | ||||||
| 			cfg.NetworkId = new(big.Int).SetBytes([]byte("yolov3x")).Uint64() // "yolov3x"
 | 			cfg.NetworkId = 1642 // https://github.com/ethereum/eth1.0-specs/blob/master/network-upgrades/client-integration-testnets/baikal.md
 | ||||||
| 		} | 		} | ||||||
| 		cfg.Genesis = core.DefaultYoloV3GenesisBlock() | 		cfg.Genesis = core.DefaultBaikalGenesisBlock() | ||||||
| 	case ctx.GlobalBool(DeveloperFlag.Name): | 	case ctx.GlobalBool(DeveloperFlag.Name): | ||||||
| 		if !ctx.GlobalIsSet(NetworkIdFlag.Name) { | 		if !ctx.GlobalIsSet(NetworkIdFlag.Name) { | ||||||
| 			cfg.NetworkId = 1337 | 			cfg.NetworkId = 1337 | ||||||
| @ -1813,8 +1813,8 @@ func MakeGenesis(ctx *cli.Context) *core.Genesis { | |||||||
| 		genesis = core.DefaultRinkebyGenesisBlock() | 		genesis = core.DefaultRinkebyGenesisBlock() | ||||||
| 	case ctx.GlobalBool(GoerliFlag.Name): | 	case ctx.GlobalBool(GoerliFlag.Name): | ||||||
| 		genesis = core.DefaultGoerliGenesisBlock() | 		genesis = core.DefaultGoerliGenesisBlock() | ||||||
| 	case ctx.GlobalBool(YoloV3Flag.Name): | 	case ctx.GlobalBool(BaikalFlag.Name): | ||||||
| 		genesis = core.DefaultYoloV3GenesisBlock() | 		genesis = core.DefaultBaikalGenesisBlock() | ||||||
| 	case ctx.GlobalBool(DeveloperFlag.Name): | 	case ctx.GlobalBool(DeveloperFlag.Name): | ||||||
| 		Fatalf("Developer chains are ephemeral") | 		Fatalf("Developer chains are ephemeral") | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -3049,7 +3049,7 @@ func TestEIP2718Transition(t *testing.T) { | |||||||
| 		address = crypto.PubkeyToAddress(key.PublicKey) | 		address = crypto.PubkeyToAddress(key.PublicKey) | ||||||
| 		funds   = big.NewInt(1000000000) | 		funds   = big.NewInt(1000000000) | ||||||
| 		gspec   = &Genesis{ | 		gspec   = &Genesis{ | ||||||
| 			Config: params.YoloV3ChainConfig, | 			Config: params.TestChainConfig, | ||||||
| 			Alloc: GenesisAlloc{ | 			Alloc: GenesisAlloc{ | ||||||
| 				address: {Balance: funds}, | 				address: {Balance: funds}, | ||||||
| 				// The address 0xAAAA sloads 0x00 and 0x01
 | 				// The address 0xAAAA sloads 0x00 and 0x01
 | ||||||
|  | |||||||
| @ -156,7 +156,7 @@ func SetupGenesisBlock(db ethdb.Database, genesis *Genesis) (*params.ChainConfig | |||||||
| 	return SetupGenesisBlockWithOverride(db, genesis, nil) | 	return SetupGenesisBlockWithOverride(db, genesis, nil) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func SetupGenesisBlockWithOverride(db ethdb.Database, genesis *Genesis, overrideBerlin *big.Int) (*params.ChainConfig, common.Hash, error) { | func SetupGenesisBlockWithOverride(db ethdb.Database, genesis *Genesis, overrideLondon *big.Int) (*params.ChainConfig, common.Hash, error) { | ||||||
| 	if genesis != nil && genesis.Config == nil { | 	if genesis != nil && genesis.Config == nil { | ||||||
| 		return params.AllEthashProtocolChanges, common.Hash{}, errGenesisNoConfig | 		return params.AllEthashProtocolChanges, common.Hash{}, errGenesisNoConfig | ||||||
| 	} | 	} | ||||||
| @ -202,8 +202,8 @@ func SetupGenesisBlockWithOverride(db ethdb.Database, genesis *Genesis, override | |||||||
| 	} | 	} | ||||||
| 	// Get the existing chain configuration.
 | 	// Get the existing chain configuration.
 | ||||||
| 	newcfg := genesis.configOrDefault(stored) | 	newcfg := genesis.configOrDefault(stored) | ||||||
| 	if overrideBerlin != nil { | 	if overrideLondon != nil { | ||||||
| 		newcfg.BerlinBlock = overrideBerlin | 		newcfg.LondonBlock = overrideLondon | ||||||
| 	} | 	} | ||||||
| 	if err := newcfg.CheckConfigForkOrder(); err != nil { | 	if err := newcfg.CheckConfigForkOrder(); err != nil { | ||||||
| 		return newcfg, common.Hash{}, err | 		return newcfg, common.Hash{}, err | ||||||
| @ -246,8 +246,8 @@ func (g *Genesis) configOrDefault(ghash common.Hash) *params.ChainConfig { | |||||||
| 		return params.RinkebyChainConfig | 		return params.RinkebyChainConfig | ||||||
| 	case ghash == params.GoerliGenesisHash: | 	case ghash == params.GoerliGenesisHash: | ||||||
| 		return params.GoerliChainConfig | 		return params.GoerliChainConfig | ||||||
| 	case ghash == params.YoloV3GenesisHash: | 	case ghash == params.BaikalGenesisHash: | ||||||
| 		return params.YoloV3ChainConfig | 		return params.BaikalChainConfig | ||||||
| 	default: | 	default: | ||||||
| 		return params.AllEthashProtocolChanges | 		return params.AllEthashProtocolChanges | ||||||
| 	} | 	} | ||||||
| @ -383,15 +383,15 @@ func DefaultGoerliGenesisBlock() *Genesis { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func DefaultYoloV3GenesisBlock() *Genesis { | func DefaultBaikalGenesisBlock() *Genesis { | ||||||
| 	// Full genesis: https://gist.github.com/holiman/c6ed9269dce28304ad176314caa75e97
 | 	// Full genesis: https://gist.github.com/holiman/c6ed9269dce28304ad176314caa75e97
 | ||||||
| 	return &Genesis{ | 	return &Genesis{ | ||||||
| 		Config:     params.YoloV3ChainConfig, | 		Config:     params.BaikalChainConfig, | ||||||
| 		Timestamp:  0x6027dd2e, | 		Timestamp:  0x6092ca7f, | ||||||
| 		ExtraData:  hexutil.MustDecode("0x00000000000000000000000000000000000000000000000000000000000000001041afbcb359d5a8dc58c15b2ff51354ff8a217d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"), | 		ExtraData:  hexutil.MustDecode("0x00000000000000000000000000000000000000000000000000000000000000005211cea3870c7ba7c6c44b185e62eecdb864cd8c560228ce57d31efbf64c200b2c200aacec78cf17a7148e784fe95a7a750335f8b9572ee28d72e7650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"), | ||||||
| 		GasLimit:   0x47b760, | 		GasLimit:   0x47b760, | ||||||
| 		Difficulty: big.NewInt(1), | 		Difficulty: big.NewInt(1), | ||||||
| 		Alloc:      decodePrealloc(yoloV3AllocData), | 		Alloc:      decodePrealloc(baikalAllocData), | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -25,4 +25,4 @@ const mainnetAllocData = "\xfa\x04]X\u0793\r\x83b\x011\x8e\u0189\x9agT\x06\x908' | |||||||
| const ropstenAllocData = "\xf9\x03\xa4\u0080\x01\xc2\x01\x01\xc2\x02\x01\xc2\x03\x01\xc2\x04\x01\xc2\x05\x01\xc2\x06\x01\xc2\a\x01\xc2\b\x01\xc2\t\x01\xc2\n\x80\xc2\v\x80\xc2\f\x80\xc2\r\x80\xc2\x0e\x80\xc2\x0f\x80\xc2\x10\x80\xc2\x11\x80\xc2\x12\x80\xc2\x13\x80\xc2\x14\x80\xc2\x15\x80\xc2\x16\x80\xc2\x17\x80\xc2\x18\x80\xc2\x19\x80\xc2\x1a\x80\xc2\x1b\x80\xc2\x1c\x80\xc2\x1d\x80\xc2\x1e\x80\xc2\x1f\x80\xc2 \x80\xc2!\x80\xc2\"\x80\xc2#\x80\xc2$\x80\xc2%\x80\xc2&\x80\xc2'\x80\xc2(\x80\xc2)\x80\xc2*\x80\xc2+\x80\xc2,\x80\xc2-\x80\xc2.\x80\xc2/\x80\xc20\x80\xc21\x80\xc22\x80\xc23\x80\xc24\x80\xc25\x80\xc26\x80\xc27\x80\xc28\x80\xc29\x80\xc2:\x80\xc2;\x80\xc2<\x80\xc2=\x80\xc2>\x80\xc2?\x80\xc2@\x80\xc2A\x80\xc2B\x80\xc2C\x80\xc2D\x80\xc2E\x80\xc2F\x80\xc2G\x80\xc2H\x80\xc2I\x80\xc2J\x80\xc2K\x80\xc2L\x80\xc2M\x80\xc2N\x80\xc2O\x80\xc2P\x80\xc2Q\x80\xc2R\x80\xc2S\x80\xc2T\x80\xc2U\x80\xc2V\x80\xc2W\x80\xc2X\x80\xc2Y\x80\xc2Z\x80\xc2[\x80\xc2\\\x80\xc2]\x80\xc2^\x80\xc2_\x80\xc2`\x80\xc2a\x80\xc2b\x80\xc2c\x80\xc2d\x80\xc2e\x80\xc2f\x80\xc2g\x80\xc2h\x80\xc2i\x80\xc2j\x80\xc2k\x80\xc2l\x80\xc2m\x80\xc2n\x80\xc2o\x80\xc2p\x80\xc2q\x80\xc2r\x80\xc2s\x80\xc2t\x80\xc2u\x80\xc2v\x80\xc2w\x80\xc2x\x80\xc2y\x80\xc2z\x80\xc2{\x80\xc2|\x80\xc2}\x80\xc2~\x80\xc2\u007f\x80\u00c1\x80\x80\u00c1\x81\x80\u00c1\x82\x80\u00c1\x83\x80\u00c1\x84\x80\u00c1\x85\x80\u00c1\x86\x80\u00c1\x87\x80\u00c1\x88\x80\u00c1\x89\x80\u00c1\x8a\x80\u00c1\x8b\x80\u00c1\x8c\x80\u00c1\x8d\x80\u00c1\x8e\x80\u00c1\x8f\x80\u00c1\x90\x80\u00c1\x91\x80\u00c1\x92\x80\u00c1\x93\x80\u00c1\x94\x80\u00c1\x95\x80\u00c1\x96\x80\u00c1\x97\x80\u00c1\x98\x80\u00c1\x99\x80\u00c1\x9a\x80\u00c1\x9b\x80\u00c1\x9c\x80\u00c1\x9d\x80\u00c1\x9e\x80\u00c1\x9f\x80\u00c1\xa0\x80\u00c1\xa1\x80\u00c1\xa2\x80\u00c1\xa3\x80\u00c1\xa4\x80\u00c1\xa5\x80\u00c1\xa6\x80\u00c1\xa7\x80\u00c1\xa8\x80\u00c1\xa9\x80\u00c1\xaa\x80\u00c1\xab\x80\u00c1\xac\x80\u00c1\xad\x80\u00c1\xae\x80\u00c1\xaf\x80\u00c1\xb0\x80\u00c1\xb1\x80\u00c1\xb2\x80\u00c1\xb3\x80\u00c1\xb4\x80\u00c1\xb5\x80\u00c1\xb6\x80\u00c1\xb7\x80\u00c1\xb8\x80\u00c1\xb9\x80\u00c1\xba\x80\u00c1\xbb\x80\u00c1\xbc\x80\u00c1\xbd\x80\u00c1\xbe\x80\u00c1\xbf\x80\u00c1\xc0\x80\u00c1\xc1\x80\u00c1\u0080\u00c1\u00c0\u00c1\u0100\u00c1\u0140\u00c1\u0180\u00c1\u01c0\u00c1\u0200\u00c1\u0240\u00c1\u0280\u00c1\u02c0\u00c1\u0300\u00c1\u0340\u00c1\u0380\u00c1\u03c0\u00c1\u0400\u00c1\u0440\u00c1\u0480\u00c1\u04c0\u00c1\u0500\u00c1\u0540\u00c1\u0580\u00c1\u05c0\u00c1\u0600\u00c1\u0640\u00c1\u0680\u00c1\u06c0\u00c1\u0700\u00c1\u0740\u00c1\u0780\u00c1\u07c0\u00c1\xe0\x80\u00c1\xe1\x80\u00c1\xe2\x80\u00c1\xe3\x80\u00c1\xe4\x80\u00c1\xe5\x80\u00c1\xe6\x80\u00c1\xe7\x80\u00c1\xe8\x80\u00c1\xe9\x80\u00c1\xea\x80\u00c1\xeb\x80\u00c1\xec\x80\u00c1\xed\x80\u00c1\xee\x80\u00c1\xef\x80\u00c1\xf0\x80\u00c1\xf1\x80\u00c1\xf2\x80\u00c1\xf3\x80\u00c1\xf4\x80\u00c1\xf5\x80\u00c1\xf6\x80\u00c1\xf7\x80\u00c1\xf8\x80\u00c1\xf9\x80\u00c1\xfa\x80\u00c1\xfb\x80\u00c1\xfc\x80\u00c1\xfd\x80\u00c1\xfe\x80\u00c1\xff\x80\u3507KT\xa8\xbd\x15)f\xd6?pk\xae\x1f\xfe\xb0A\x19!\xe5\x8d\f\x9f,\x9c\xd0Ft\xed\xea@\x00\x00\x00" | const ropstenAllocData = "\xf9\x03\xa4\u0080\x01\xc2\x01\x01\xc2\x02\x01\xc2\x03\x01\xc2\x04\x01\xc2\x05\x01\xc2\x06\x01\xc2\a\x01\xc2\b\x01\xc2\t\x01\xc2\n\x80\xc2\v\x80\xc2\f\x80\xc2\r\x80\xc2\x0e\x80\xc2\x0f\x80\xc2\x10\x80\xc2\x11\x80\xc2\x12\x80\xc2\x13\x80\xc2\x14\x80\xc2\x15\x80\xc2\x16\x80\xc2\x17\x80\xc2\x18\x80\xc2\x19\x80\xc2\x1a\x80\xc2\x1b\x80\xc2\x1c\x80\xc2\x1d\x80\xc2\x1e\x80\xc2\x1f\x80\xc2 \x80\xc2!\x80\xc2\"\x80\xc2#\x80\xc2$\x80\xc2%\x80\xc2&\x80\xc2'\x80\xc2(\x80\xc2)\x80\xc2*\x80\xc2+\x80\xc2,\x80\xc2-\x80\xc2.\x80\xc2/\x80\xc20\x80\xc21\x80\xc22\x80\xc23\x80\xc24\x80\xc25\x80\xc26\x80\xc27\x80\xc28\x80\xc29\x80\xc2:\x80\xc2;\x80\xc2<\x80\xc2=\x80\xc2>\x80\xc2?\x80\xc2@\x80\xc2A\x80\xc2B\x80\xc2C\x80\xc2D\x80\xc2E\x80\xc2F\x80\xc2G\x80\xc2H\x80\xc2I\x80\xc2J\x80\xc2K\x80\xc2L\x80\xc2M\x80\xc2N\x80\xc2O\x80\xc2P\x80\xc2Q\x80\xc2R\x80\xc2S\x80\xc2T\x80\xc2U\x80\xc2V\x80\xc2W\x80\xc2X\x80\xc2Y\x80\xc2Z\x80\xc2[\x80\xc2\\\x80\xc2]\x80\xc2^\x80\xc2_\x80\xc2`\x80\xc2a\x80\xc2b\x80\xc2c\x80\xc2d\x80\xc2e\x80\xc2f\x80\xc2g\x80\xc2h\x80\xc2i\x80\xc2j\x80\xc2k\x80\xc2l\x80\xc2m\x80\xc2n\x80\xc2o\x80\xc2p\x80\xc2q\x80\xc2r\x80\xc2s\x80\xc2t\x80\xc2u\x80\xc2v\x80\xc2w\x80\xc2x\x80\xc2y\x80\xc2z\x80\xc2{\x80\xc2|\x80\xc2}\x80\xc2~\x80\xc2\u007f\x80\u00c1\x80\x80\u00c1\x81\x80\u00c1\x82\x80\u00c1\x83\x80\u00c1\x84\x80\u00c1\x85\x80\u00c1\x86\x80\u00c1\x87\x80\u00c1\x88\x80\u00c1\x89\x80\u00c1\x8a\x80\u00c1\x8b\x80\u00c1\x8c\x80\u00c1\x8d\x80\u00c1\x8e\x80\u00c1\x8f\x80\u00c1\x90\x80\u00c1\x91\x80\u00c1\x92\x80\u00c1\x93\x80\u00c1\x94\x80\u00c1\x95\x80\u00c1\x96\x80\u00c1\x97\x80\u00c1\x98\x80\u00c1\x99\x80\u00c1\x9a\x80\u00c1\x9b\x80\u00c1\x9c\x80\u00c1\x9d\x80\u00c1\x9e\x80\u00c1\x9f\x80\u00c1\xa0\x80\u00c1\xa1\x80\u00c1\xa2\x80\u00c1\xa3\x80\u00c1\xa4\x80\u00c1\xa5\x80\u00c1\xa6\x80\u00c1\xa7\x80\u00c1\xa8\x80\u00c1\xa9\x80\u00c1\xaa\x80\u00c1\xab\x80\u00c1\xac\x80\u00c1\xad\x80\u00c1\xae\x80\u00c1\xaf\x80\u00c1\xb0\x80\u00c1\xb1\x80\u00c1\xb2\x80\u00c1\xb3\x80\u00c1\xb4\x80\u00c1\xb5\x80\u00c1\xb6\x80\u00c1\xb7\x80\u00c1\xb8\x80\u00c1\xb9\x80\u00c1\xba\x80\u00c1\xbb\x80\u00c1\xbc\x80\u00c1\xbd\x80\u00c1\xbe\x80\u00c1\xbf\x80\u00c1\xc0\x80\u00c1\xc1\x80\u00c1\u0080\u00c1\u00c0\u00c1\u0100\u00c1\u0140\u00c1\u0180\u00c1\u01c0\u00c1\u0200\u00c1\u0240\u00c1\u0280\u00c1\u02c0\u00c1\u0300\u00c1\u0340\u00c1\u0380\u00c1\u03c0\u00c1\u0400\u00c1\u0440\u00c1\u0480\u00c1\u04c0\u00c1\u0500\u00c1\u0540\u00c1\u0580\u00c1\u05c0\u00c1\u0600\u00c1\u0640\u00c1\u0680\u00c1\u06c0\u00c1\u0700\u00c1\u0740\u00c1\u0780\u00c1\u07c0\u00c1\xe0\x80\u00c1\xe1\x80\u00c1\xe2\x80\u00c1\xe3\x80\u00c1\xe4\x80\u00c1\xe5\x80\u00c1\xe6\x80\u00c1\xe7\x80\u00c1\xe8\x80\u00c1\xe9\x80\u00c1\xea\x80\u00c1\xeb\x80\u00c1\xec\x80\u00c1\xed\x80\u00c1\xee\x80\u00c1\xef\x80\u00c1\xf0\x80\u00c1\xf1\x80\u00c1\xf2\x80\u00c1\xf3\x80\u00c1\xf4\x80\u00c1\xf5\x80\u00c1\xf6\x80\u00c1\xf7\x80\u00c1\xf8\x80\u00c1\xf9\x80\u00c1\xfa\x80\u00c1\xfb\x80\u00c1\xfc\x80\u00c1\xfd\x80\u00c1\xfe\x80\u00c1\xff\x80\u3507KT\xa8\xbd\x15)f\xd6?pk\xae\x1f\xfe\xb0A\x19!\xe5\x8d\f\x9f,\x9c\xd0Ft\xed\xea@\x00\x00\x00" | ||||||
| const rinkebyAllocData = "\xf9\x03\xb7\u0080\x01\xc2\x01\x01\xc2\x02\x01\xc2\x03\x01\xc2\x04\x01\xc2\x05\x01\xc2\x06\x01\xc2\a\x01\xc2\b\x01\xc2\t\x01\xc2\n\x01\xc2\v\x01\xc2\f\x01\xc2\r\x01\xc2\x0e\x01\xc2\x0f\x01\xc2\x10\x01\xc2\x11\x01\xc2\x12\x01\xc2\x13\x01\xc2\x14\x01\xc2\x15\x01\xc2\x16\x01\xc2\x17\x01\xc2\x18\x01\xc2\x19\x01\xc2\x1a\x01\xc2\x1b\x01\xc2\x1c\x01\xc2\x1d\x01\xc2\x1e\x01\xc2\x1f\x01\xc2 \x01\xc2!\x01\xc2\"\x01\xc2#\x01\xc2$\x01\xc2%\x01\xc2&\x01\xc2'\x01\xc2(\x01\xc2)\x01\xc2*\x01\xc2+\x01\xc2,\x01\xc2-\x01\xc2.\x01\xc2/\x01\xc20\x01\xc21\x01\xc22\x01\xc23\x01\xc24\x01\xc25\x01\xc26\x01\xc27\x01\xc28\x01\xc29\x01\xc2:\x01\xc2;\x01\xc2<\x01\xc2=\x01\xc2>\x01\xc2?\x01\xc2@\x01\xc2A\x01\xc2B\x01\xc2C\x01\xc2D\x01\xc2E\x01\xc2F\x01\xc2G\x01\xc2H\x01\xc2I\x01\xc2J\x01\xc2K\x01\xc2L\x01\xc2M\x01\xc2N\x01\xc2O\x01\xc2P\x01\xc2Q\x01\xc2R\x01\xc2S\x01\xc2T\x01\xc2U\x01\xc2V\x01\xc2W\x01\xc2X\x01\xc2Y\x01\xc2Z\x01\xc2[\x01\xc2\\\x01\xc2]\x01\xc2^\x01\xc2_\x01\xc2`\x01\xc2a\x01\xc2b\x01\xc2c\x01\xc2d\x01\xc2e\x01\xc2f\x01\xc2g\x01\xc2h\x01\xc2i\x01\xc2j\x01\xc2k\x01\xc2l\x01\xc2m\x01\xc2n\x01\xc2o\x01\xc2p\x01\xc2q\x01\xc2r\x01\xc2s\x01\xc2t\x01\xc2u\x01\xc2v\x01\xc2w\x01\xc2x\x01\xc2y\x01\xc2z\x01\xc2{\x01\xc2|\x01\xc2}\x01\xc2~\x01\xc2\u007f\x01\u00c1\x80\x01\u00c1\x81\x01\u00c1\x82\x01\u00c1\x83\x01\u00c1\x84\x01\u00c1\x85\x01\u00c1\x86\x01\u00c1\x87\x01\u00c1\x88\x01\u00c1\x89\x01\u00c1\x8a\x01\u00c1\x8b\x01\u00c1\x8c\x01\u00c1\x8d\x01\u00c1\x8e\x01\u00c1\x8f\x01\u00c1\x90\x01\u00c1\x91\x01\u00c1\x92\x01\u00c1\x93\x01\u00c1\x94\x01\u00c1\x95\x01\u00c1\x96\x01\u00c1\x97\x01\u00c1\x98\x01\u00c1\x99\x01\u00c1\x9a\x01\u00c1\x9b\x01\u00c1\x9c\x01\u00c1\x9d\x01\u00c1\x9e\x01\u00c1\x9f\x01\u00c1\xa0\x01\u00c1\xa1\x01\u00c1\xa2\x01\u00c1\xa3\x01\u00c1\xa4\x01\u00c1\xa5\x01\u00c1\xa6\x01\u00c1\xa7\x01\u00c1\xa8\x01\u00c1\xa9\x01\u00c1\xaa\x01\u00c1\xab\x01\u00c1\xac\x01\u00c1\xad\x01\u00c1\xae\x01\u00c1\xaf\x01\u00c1\xb0\x01\u00c1\xb1\x01\u00c1\xb2\x01\u00c1\xb3\x01\u00c1\xb4\x01\u00c1\xb5\x01\u00c1\xb6\x01\u00c1\xb7\x01\u00c1\xb8\x01\u00c1\xb9\x01\u00c1\xba\x01\u00c1\xbb\x01\u00c1\xbc\x01\u00c1\xbd\x01\u00c1\xbe\x01\u00c1\xbf\x01\u00c1\xc0\x01\u00c1\xc1\x01\u00c1\xc2\x01\u00c1\xc3\x01\u00c1\xc4\x01\u00c1\xc5\x01\u00c1\xc6\x01\u00c1\xc7\x01\u00c1\xc8\x01\u00c1\xc9\x01\u00c1\xca\x01\u00c1\xcb\x01\u00c1\xcc\x01\u00c1\xcd\x01\u00c1\xce\x01\u00c1\xcf\x01\u00c1\xd0\x01\u00c1\xd1\x01\u00c1\xd2\x01\u00c1\xd3\x01\u00c1\xd4\x01\u00c1\xd5\x01\u00c1\xd6\x01\u00c1\xd7\x01\u00c1\xd8\x01\u00c1\xd9\x01\u00c1\xda\x01\u00c1\xdb\x01\u00c1\xdc\x01\u00c1\xdd\x01\u00c1\xde\x01\u00c1\xdf\x01\u00c1\xe0\x01\u00c1\xe1\x01\u00c1\xe2\x01\u00c1\xe3\x01\u00c1\xe4\x01\u00c1\xe5\x01\u00c1\xe6\x01\u00c1\xe7\x01\u00c1\xe8\x01\u00c1\xe9\x01\u00c1\xea\x01\u00c1\xeb\x01\u00c1\xec\x01\u00c1\xed\x01\u00c1\xee\x01\u00c1\xef\x01\u00c1\xf0\x01\u00c1\xf1\x01\u00c1\xf2\x01\u00c1\xf3\x01\u00c1\xf4\x01\u00c1\xf5\x01\u00c1\xf6\x01\u00c1\xf7\x01\u00c1\xf8\x01\u00c1\xf9\x01\u00c1\xfa\x01\u00c1\xfb\x01\u00c1\xfc\x01\u00c1\xfd\x01\u00c1\xfe\x01\u00c1\xff\x01\xf6\x941\xb9\x8d\x14\x00{\xde\xe67)\x80\x86\x98\x8a\v\xbd1\x18E#\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" | const rinkebyAllocData = "\xf9\x03\xb7\u0080\x01\xc2\x01\x01\xc2\x02\x01\xc2\x03\x01\xc2\x04\x01\xc2\x05\x01\xc2\x06\x01\xc2\a\x01\xc2\b\x01\xc2\t\x01\xc2\n\x01\xc2\v\x01\xc2\f\x01\xc2\r\x01\xc2\x0e\x01\xc2\x0f\x01\xc2\x10\x01\xc2\x11\x01\xc2\x12\x01\xc2\x13\x01\xc2\x14\x01\xc2\x15\x01\xc2\x16\x01\xc2\x17\x01\xc2\x18\x01\xc2\x19\x01\xc2\x1a\x01\xc2\x1b\x01\xc2\x1c\x01\xc2\x1d\x01\xc2\x1e\x01\xc2\x1f\x01\xc2 \x01\xc2!\x01\xc2\"\x01\xc2#\x01\xc2$\x01\xc2%\x01\xc2&\x01\xc2'\x01\xc2(\x01\xc2)\x01\xc2*\x01\xc2+\x01\xc2,\x01\xc2-\x01\xc2.\x01\xc2/\x01\xc20\x01\xc21\x01\xc22\x01\xc23\x01\xc24\x01\xc25\x01\xc26\x01\xc27\x01\xc28\x01\xc29\x01\xc2:\x01\xc2;\x01\xc2<\x01\xc2=\x01\xc2>\x01\xc2?\x01\xc2@\x01\xc2A\x01\xc2B\x01\xc2C\x01\xc2D\x01\xc2E\x01\xc2F\x01\xc2G\x01\xc2H\x01\xc2I\x01\xc2J\x01\xc2K\x01\xc2L\x01\xc2M\x01\xc2N\x01\xc2O\x01\xc2P\x01\xc2Q\x01\xc2R\x01\xc2S\x01\xc2T\x01\xc2U\x01\xc2V\x01\xc2W\x01\xc2X\x01\xc2Y\x01\xc2Z\x01\xc2[\x01\xc2\\\x01\xc2]\x01\xc2^\x01\xc2_\x01\xc2`\x01\xc2a\x01\xc2b\x01\xc2c\x01\xc2d\x01\xc2e\x01\xc2f\x01\xc2g\x01\xc2h\x01\xc2i\x01\xc2j\x01\xc2k\x01\xc2l\x01\xc2m\x01\xc2n\x01\xc2o\x01\xc2p\x01\xc2q\x01\xc2r\x01\xc2s\x01\xc2t\x01\xc2u\x01\xc2v\x01\xc2w\x01\xc2x\x01\xc2y\x01\xc2z\x01\xc2{\x01\xc2|\x01\xc2}\x01\xc2~\x01\xc2\u007f\x01\u00c1\x80\x01\u00c1\x81\x01\u00c1\x82\x01\u00c1\x83\x01\u00c1\x84\x01\u00c1\x85\x01\u00c1\x86\x01\u00c1\x87\x01\u00c1\x88\x01\u00c1\x89\x01\u00c1\x8a\x01\u00c1\x8b\x01\u00c1\x8c\x01\u00c1\x8d\x01\u00c1\x8e\x01\u00c1\x8f\x01\u00c1\x90\x01\u00c1\x91\x01\u00c1\x92\x01\u00c1\x93\x01\u00c1\x94\x01\u00c1\x95\x01\u00c1\x96\x01\u00c1\x97\x01\u00c1\x98\x01\u00c1\x99\x01\u00c1\x9a\x01\u00c1\x9b\x01\u00c1\x9c\x01\u00c1\x9d\x01\u00c1\x9e\x01\u00c1\x9f\x01\u00c1\xa0\x01\u00c1\xa1\x01\u00c1\xa2\x01\u00c1\xa3\x01\u00c1\xa4\x01\u00c1\xa5\x01\u00c1\xa6\x01\u00c1\xa7\x01\u00c1\xa8\x01\u00c1\xa9\x01\u00c1\xaa\x01\u00c1\xab\x01\u00c1\xac\x01\u00c1\xad\x01\u00c1\xae\x01\u00c1\xaf\x01\u00c1\xb0\x01\u00c1\xb1\x01\u00c1\xb2\x01\u00c1\xb3\x01\u00c1\xb4\x01\u00c1\xb5\x01\u00c1\xb6\x01\u00c1\xb7\x01\u00c1\xb8\x01\u00c1\xb9\x01\u00c1\xba\x01\u00c1\xbb\x01\u00c1\xbc\x01\u00c1\xbd\x01\u00c1\xbe\x01\u00c1\xbf\x01\u00c1\xc0\x01\u00c1\xc1\x01\u00c1\xc2\x01\u00c1\xc3\x01\u00c1\xc4\x01\u00c1\xc5\x01\u00c1\xc6\x01\u00c1\xc7\x01\u00c1\xc8\x01\u00c1\xc9\x01\u00c1\xca\x01\u00c1\xcb\x01\u00c1\xcc\x01\u00c1\xcd\x01\u00c1\xce\x01\u00c1\xcf\x01\u00c1\xd0\x01\u00c1\xd1\x01\u00c1\xd2\x01\u00c1\xd3\x01\u00c1\xd4\x01\u00c1\xd5\x01\u00c1\xd6\x01\u00c1\xd7\x01\u00c1\xd8\x01\u00c1\xd9\x01\u00c1\xda\x01\u00c1\xdb\x01\u00c1\xdc\x01\u00c1\xdd\x01\u00c1\xde\x01\u00c1\xdf\x01\u00c1\xe0\x01\u00c1\xe1\x01\u00c1\xe2\x01\u00c1\xe3\x01\u00c1\xe4\x01\u00c1\xe5\x01\u00c1\xe6\x01\u00c1\xe7\x01\u00c1\xe8\x01\u00c1\xe9\x01\u00c1\xea\x01\u00c1\xeb\x01\u00c1\xec\x01\u00c1\xed\x01\u00c1\xee\x01\u00c1\xef\x01\u00c1\xf0\x01\u00c1\xf1\x01\u00c1\xf2\x01\u00c1\xf3\x01\u00c1\xf4\x01\u00c1\xf5\x01\u00c1\xf6\x01\u00c1\xf7\x01\u00c1\xf8\x01\u00c1\xf9\x01\u00c1\xfa\x01\u00c1\xfb\x01\u00c1\xfc\x01\u00c1\xfd\x01\u00c1\xfe\x01\u00c1\xff\x01\xf6\x941\xb9\x8d\x14\x00{\xde\xe67)\x80\x86\x98\x8a\v\xbd1\x18E#\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" | ||||||
| const goerliAllocData = "\xf9\x04\x06\u0080\x01\xc2\x01\x01\xc2\x02\x01\xc2\x03\x01\xc2\x04\x01\xc2\x05\x01\xc2\x06\x01\xc2\a\x01\xc2\b\x01\xc2\t\x01\xc2\n\x01\xc2\v\x01\xc2\f\x01\xc2\r\x01\xc2\x0e\x01\xc2\x0f\x01\xc2\x10\x01\xc2\x11\x01\xc2\x12\x01\xc2\x13\x01\xc2\x14\x01\xc2\x15\x01\xc2\x16\x01\xc2\x17\x01\xc2\x18\x01\xc2\x19\x01\xc2\x1a\x01\xc2\x1b\x01\xc2\x1c\x01\xc2\x1d\x01\xc2\x1e\x01\xc2\x1f\x01\xc2 \x01\xc2!\x01\xc2\"\x01\xc2#\x01\xc2$\x01\xc2%\x01\xc2&\x01\xc2'\x01\xc2(\x01\xc2)\x01\xc2*\x01\xc2+\x01\xc2,\x01\xc2-\x01\xc2.\x01\xc2/\x01\xc20\x01\xc21\x01\xc22\x01\xc23\x01\xc24\x01\xc25\x01\xc26\x01\xc27\x01\xc28\x01\xc29\x01\xc2:\x01\xc2;\x01\xc2<\x01\xc2=\x01\xc2>\x01\xc2?\x01\xc2@\x01\xc2A\x01\xc2B\x01\xc2C\x01\xc2D\x01\xc2E\x01\xc2F\x01\xc2G\x01\xc2H\x01\xc2I\x01\xc2J\x01\xc2K\x01\xc2L\x01\xc2M\x01\xc2N\x01\xc2O\x01\xc2P\x01\xc2Q\x01\xc2R\x01\xc2S\x01\xc2T\x01\xc2U\x01\xc2V\x01\xc2W\x01\xc2X\x01\xc2Y\x01\xc2Z\x01\xc2[\x01\xc2\\\x01\xc2]\x01\xc2^\x01\xc2_\x01\xc2`\x01\xc2a\x01\xc2b\x01\xc2c\x01\xc2d\x01\xc2e\x01\xc2f\x01\xc2g\x01\xc2h\x01\xc2i\x01\xc2j\x01\xc2k\x01\xc2l\x01\xc2m\x01\xc2n\x01\xc2o\x01\xc2p\x01\xc2q\x01\xc2r\x01\xc2s\x01\xc2t\x01\xc2u\x01\xc2v\x01\xc2w\x01\xc2x\x01\xc2y\x01\xc2z\x01\xc2{\x01\xc2|\x01\xc2}\x01\xc2~\x01\xc2\u007f\x01\u00c1\x80\x01\u00c1\x81\x01\u00c1\x82\x01\u00c1\x83\x01\u00c1\x84\x01\u00c1\x85\x01\u00c1\x86\x01\u00c1\x87\x01\u00c1\x88\x01\u00c1\x89\x01\u00c1\x8a\x01\u00c1\x8b\x01\u00c1\x8c\x01\u00c1\x8d\x01\u00c1\x8e\x01\u00c1\x8f\x01\u00c1\x90\x01\u00c1\x91\x01\u00c1\x92\x01\u00c1\x93\x01\u00c1\x94\x01\u00c1\x95\x01\u00c1\x96\x01\u00c1\x97\x01\u00c1\x98\x01\u00c1\x99\x01\u00c1\x9a\x01\u00c1\x9b\x01\u00c1\x9c\x01\u00c1\x9d\x01\u00c1\x9e\x01\u00c1\x9f\x01\u00c1\xa0\x01\u00c1\xa1\x01\u00c1\xa2\x01\u00c1\xa3\x01\u00c1\xa4\x01\u00c1\xa5\x01\u00c1\xa6\x01\u00c1\xa7\x01\u00c1\xa8\x01\u00c1\xa9\x01\u00c1\xaa\x01\u00c1\xab\x01\u00c1\xac\x01\u00c1\xad\x01\u00c1\xae\x01\u00c1\xaf\x01\u00c1\xb0\x01\u00c1\xb1\x01\u00c1\xb2\x01\u00c1\xb3\x01\u00c1\xb4\x01\u00c1\xb5\x01\u00c1\xb6\x01\u00c1\xb7\x01\u00c1\xb8\x01\u00c1\xb9\x01\u00c1\xba\x01\u00c1\xbb\x01\u00c1\xbc\x01\u00c1\xbd\x01\u00c1\xbe\x01\u00c1\xbf\x01\u00c1\xc0\x01\u00c1\xc1\x01\u00c1\xc2\x01\u00c1\xc3\x01\u00c1\xc4\x01\u00c1\xc5\x01\u00c1\xc6\x01\u00c1\xc7\x01\u00c1\xc8\x01\u00c1\xc9\x01\u00c1\xca\x01\u00c1\xcb\x01\u00c1\xcc\x01\u00c1\xcd\x01\u00c1\xce\x01\u00c1\xcf\x01\u00c1\xd0\x01\u00c1\xd1\x01\u00c1\xd2\x01\u00c1\xd3\x01\u00c1\xd4\x01\u00c1\xd5\x01\u00c1\xd6\x01\u00c1\xd7\x01\u00c1\xd8\x01\u00c1\xd9\x01\u00c1\xda\x01\u00c1\xdb\x01\u00c1\xdc\x01\u00c1\xdd\x01\u00c1\xde\x01\u00c1\xdf\x01\u00c1\xe0\x01\u00c1\xe1\x01\u00c1\xe2\x01\u00c1\xe3\x01\u00c1\xe4\x01\u00c1\xe5\x01\u00c1\xe6\x01\u00c1\xe7\x01\u00c1\xe8\x01\u00c1\xe9\x01\u00c1\xea\x01\u00c1\xeb\x01\u00c1\xec\x01\u00c1\xed\x01\u00c1\xee\x01\u00c1\xef\x01\u00c1\xf0\x01\u00c1\xf1\x01\u00c1\xf2\x01\u00c1\xf3\x01\u00c1\xf4\x01\u00c1\xf5\x01\u00c1\xf6\x01\u00c1\xf7\x01\u00c1\xf8\x01\u00c1\xf9\x01\u00c1\xfa\x01\u00c1\xfb\x01\u00c1\xfc\x01\u00c1\xfd\x01\u00c1\xfe\x01\u00c1\xff\x01\xe0\x94L*\xe4\x82Y5\x05\xf0\x16<\xde\xfc\a>\x81\xc6<\xdaA\a\x8a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\xe0\x94\xa8\xe8\xf1G2e\x8eKQ\xe8q\x191\x05:\x8ai\xba\xf2\xb1\x8a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\xe1\x94\u0665\x17\x9f\t\x1d\x85\x05\x1d<\x98'\x85\xef\xd1E\\\uc199\x8b\bE\x95\x16\x14\x01HJ\x00\x00\x00\xe1\x94\u08bdBX\xd2v\x887\xba\xa2j(\xfeq\xdc\a\x9f\x84\u01cbJG\xe3\xc1$H\xf4\xad\x00\x00\x00" | const goerliAllocData = "\xf9\x04\x06\u0080\x01\xc2\x01\x01\xc2\x02\x01\xc2\x03\x01\xc2\x04\x01\xc2\x05\x01\xc2\x06\x01\xc2\a\x01\xc2\b\x01\xc2\t\x01\xc2\n\x01\xc2\v\x01\xc2\f\x01\xc2\r\x01\xc2\x0e\x01\xc2\x0f\x01\xc2\x10\x01\xc2\x11\x01\xc2\x12\x01\xc2\x13\x01\xc2\x14\x01\xc2\x15\x01\xc2\x16\x01\xc2\x17\x01\xc2\x18\x01\xc2\x19\x01\xc2\x1a\x01\xc2\x1b\x01\xc2\x1c\x01\xc2\x1d\x01\xc2\x1e\x01\xc2\x1f\x01\xc2 \x01\xc2!\x01\xc2\"\x01\xc2#\x01\xc2$\x01\xc2%\x01\xc2&\x01\xc2'\x01\xc2(\x01\xc2)\x01\xc2*\x01\xc2+\x01\xc2,\x01\xc2-\x01\xc2.\x01\xc2/\x01\xc20\x01\xc21\x01\xc22\x01\xc23\x01\xc24\x01\xc25\x01\xc26\x01\xc27\x01\xc28\x01\xc29\x01\xc2:\x01\xc2;\x01\xc2<\x01\xc2=\x01\xc2>\x01\xc2?\x01\xc2@\x01\xc2A\x01\xc2B\x01\xc2C\x01\xc2D\x01\xc2E\x01\xc2F\x01\xc2G\x01\xc2H\x01\xc2I\x01\xc2J\x01\xc2K\x01\xc2L\x01\xc2M\x01\xc2N\x01\xc2O\x01\xc2P\x01\xc2Q\x01\xc2R\x01\xc2S\x01\xc2T\x01\xc2U\x01\xc2V\x01\xc2W\x01\xc2X\x01\xc2Y\x01\xc2Z\x01\xc2[\x01\xc2\\\x01\xc2]\x01\xc2^\x01\xc2_\x01\xc2`\x01\xc2a\x01\xc2b\x01\xc2c\x01\xc2d\x01\xc2e\x01\xc2f\x01\xc2g\x01\xc2h\x01\xc2i\x01\xc2j\x01\xc2k\x01\xc2l\x01\xc2m\x01\xc2n\x01\xc2o\x01\xc2p\x01\xc2q\x01\xc2r\x01\xc2s\x01\xc2t\x01\xc2u\x01\xc2v\x01\xc2w\x01\xc2x\x01\xc2y\x01\xc2z\x01\xc2{\x01\xc2|\x01\xc2}\x01\xc2~\x01\xc2\u007f\x01\u00c1\x80\x01\u00c1\x81\x01\u00c1\x82\x01\u00c1\x83\x01\u00c1\x84\x01\u00c1\x85\x01\u00c1\x86\x01\u00c1\x87\x01\u00c1\x88\x01\u00c1\x89\x01\u00c1\x8a\x01\u00c1\x8b\x01\u00c1\x8c\x01\u00c1\x8d\x01\u00c1\x8e\x01\u00c1\x8f\x01\u00c1\x90\x01\u00c1\x91\x01\u00c1\x92\x01\u00c1\x93\x01\u00c1\x94\x01\u00c1\x95\x01\u00c1\x96\x01\u00c1\x97\x01\u00c1\x98\x01\u00c1\x99\x01\u00c1\x9a\x01\u00c1\x9b\x01\u00c1\x9c\x01\u00c1\x9d\x01\u00c1\x9e\x01\u00c1\x9f\x01\u00c1\xa0\x01\u00c1\xa1\x01\u00c1\xa2\x01\u00c1\xa3\x01\u00c1\xa4\x01\u00c1\xa5\x01\u00c1\xa6\x01\u00c1\xa7\x01\u00c1\xa8\x01\u00c1\xa9\x01\u00c1\xaa\x01\u00c1\xab\x01\u00c1\xac\x01\u00c1\xad\x01\u00c1\xae\x01\u00c1\xaf\x01\u00c1\xb0\x01\u00c1\xb1\x01\u00c1\xb2\x01\u00c1\xb3\x01\u00c1\xb4\x01\u00c1\xb5\x01\u00c1\xb6\x01\u00c1\xb7\x01\u00c1\xb8\x01\u00c1\xb9\x01\u00c1\xba\x01\u00c1\xbb\x01\u00c1\xbc\x01\u00c1\xbd\x01\u00c1\xbe\x01\u00c1\xbf\x01\u00c1\xc0\x01\u00c1\xc1\x01\u00c1\xc2\x01\u00c1\xc3\x01\u00c1\xc4\x01\u00c1\xc5\x01\u00c1\xc6\x01\u00c1\xc7\x01\u00c1\xc8\x01\u00c1\xc9\x01\u00c1\xca\x01\u00c1\xcb\x01\u00c1\xcc\x01\u00c1\xcd\x01\u00c1\xce\x01\u00c1\xcf\x01\u00c1\xd0\x01\u00c1\xd1\x01\u00c1\xd2\x01\u00c1\xd3\x01\u00c1\xd4\x01\u00c1\xd5\x01\u00c1\xd6\x01\u00c1\xd7\x01\u00c1\xd8\x01\u00c1\xd9\x01\u00c1\xda\x01\u00c1\xdb\x01\u00c1\xdc\x01\u00c1\xdd\x01\u00c1\xde\x01\u00c1\xdf\x01\u00c1\xe0\x01\u00c1\xe1\x01\u00c1\xe2\x01\u00c1\xe3\x01\u00c1\xe4\x01\u00c1\xe5\x01\u00c1\xe6\x01\u00c1\xe7\x01\u00c1\xe8\x01\u00c1\xe9\x01\u00c1\xea\x01\u00c1\xeb\x01\u00c1\xec\x01\u00c1\xed\x01\u00c1\xee\x01\u00c1\xef\x01\u00c1\xf0\x01\u00c1\xf1\x01\u00c1\xf2\x01\u00c1\xf3\x01\u00c1\xf4\x01\u00c1\xf5\x01\u00c1\xf6\x01\u00c1\xf7\x01\u00c1\xf8\x01\u00c1\xf9\x01\u00c1\xfa\x01\u00c1\xfb\x01\u00c1\xfc\x01\u00c1\xfd\x01\u00c1\xfe\x01\u00c1\xff\x01\xe0\x94L*\xe4\x82Y5\x05\xf0\x16<\xde\xfc\a>\x81\xc6<\xdaA\a\x8a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\xe0\x94\xa8\xe8\xf1G2e\x8eKQ\xe8q\x191\x05:\x8ai\xba\xf2\xb1\x8a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\xe1\x94\u0665\x17\x9f\t\x1d\x85\x05\x1d<\x98'\x85\xef\xd1E\\\uc199\x8b\bE\x95\x16\x14\x01HJ\x00\x00\x00\xe1\x94\u08bdBX\xd2v\x887\xba\xa2j(\xfeq\xdc\a\x9f\x84\u01cbJG\xe3\xc1$H\xf4\xad\x00\x00\x00" | ||||||
| const yoloV3AllocData = "\xf9\x05o\u0080\x01\xc2\x01\x01\xc2\x02\x01\xc2\x03\x01\xc2\x04\x01\xc2\x05\x01\xc2\x06\x01\xc2\a\x01\xc2\b\x01\xc2\t\x01\xc2\n\x01\xc2\v\x01\xc2\f\x01\xc2\r\x01\xc2\x0e\x01\xc2\x0f\x01\xc2\x10\x01\xc2\x11\x01\xc2\x12\x01\xc2\x13\x01\xc2\x14\x01\xc2\x15\x01\xc2\x16\x01\xc2\x17\x01\xc2\x18\x01\xc2\x19\x01\xc2\x1a\x01\xc2\x1b\x01\xc2\x1c\x01\xc2\x1d\x01\xc2\x1e\x01\xc2\x1f\x01\xc2 \x01\xc2!\x01\xc2\"\x01\xc2#\x01\xc2$\x01\xc2%\x01\xc2&\x01\xc2'\x01\xc2(\x01\xc2)\x01\xc2*\x01\xc2+\x01\xc2,\x01\xc2-\x01\xc2.\x01\xc2/\x01\xc20\x01\xc21\x01\xc22\x01\xc23\x01\xc24\x01\xc25\x01\xc26\x01\xc27\x01\xc28\x01\xc29\x01\xc2:\x01\xc2;\x01\xc2<\x01\xc2=\x01\xc2>\x01\xc2?\x01\xc2@\x01\xc2A\x01\xc2B\x01\xc2C\x01\xc2D\x01\xc2E\x01\xc2F\x01\xc2G\x01\xc2H\x01\xc2I\x01\xc2J\x01\xc2K\x01\xc2L\x01\xc2M\x01\xc2N\x01\xc2O\x01\xc2P\x01\xc2Q\x01\xc2R\x01\xc2S\x01\xc2T\x01\xc2U\x01\xc2V\x01\xc2W\x01\xc2X\x01\xc2Y\x01\xc2Z\x01\xc2[\x01\xc2\\\x01\xc2]\x01\xc2^\x01\xc2_\x01\xc2`\x01\xc2a\x01\xc2b\x01\xc2c\x01\xc2d\x01\xc2e\x01\xc2f\x01\xc2g\x01\xc2h\x01\xc2i\x01\xc2j\x01\xc2k\x01\xc2l\x01\xc2m\x01\xc2n\x01\xc2o\x01\xc2p\x01\xc2q\x01\xc2r\x01\xc2s\x01\xc2t\x01\xc2u\x01\xc2v\x01\xc2w\x01\xc2x\x01\xc2y\x01\xc2z\x01\xc2{\x01\xc2|\x01\xc2}\x01\xc2~\x01\xc2\u007f\x01\u00c1\x80\x01\u00c1\x81\x01\u00c1\x82\x01\u00c1\x83\x01\u00c1\x84\x01\u00c1\x85\x01\u00c1\x86\x01\u00c1\x87\x01\u00c1\x88\x01\u00c1\x89\x01\u00c1\x8a\x01\u00c1\x8b\x01\u00c1\x8c\x01\u00c1\x8d\x01\u00c1\x8e\x01\u00c1\x8f\x01\u00c1\x90\x01\u00c1\x91\x01\u00c1\x92\x01\u00c1\x93\x01\u00c1\x94\x01\u00c1\x95\x01\u00c1\x96\x01\u00c1\x97\x01\u00c1\x98\x01\u00c1\x99\x01\u00c1\x9a\x01\u00c1\x9b\x01\u00c1\x9c\x01\u00c1\x9d\x01\u00c1\x9e\x01\u00c1\x9f\x01\u00c1\xa0\x01\u00c1\xa1\x01\u00c1\xa2\x01\u00c1\xa3\x01\u00c1\xa4\x01\u00c1\xa5\x01\u00c1\xa6\x01\u00c1\xa7\x01\u00c1\xa8\x01\u00c1\xa9\x01\u00c1\xaa\x01\u00c1\xab\x01\u00c1\xac\x01\u00c1\xad\x01\u00c1\xae\x01\u00c1\xaf\x01\u00c1\xb0\x01\u00c1\xb1\x01\u00c1\xb2\x01\u00c1\xb3\x01\u00c1\xb4\x01\u00c1\xb5\x01\u00c1\xb6\x01\u00c1\xb7\x01\u00c1\xb8\x01\u00c1\xb9\x01\u00c1\xba\x01\u00c1\xbb\x01\u00c1\xbc\x01\u00c1\xbd\x01\u00c1\xbe\x01\u00c1\xbf\x01\u00c1\xc0\x01\u00c1\xc1\x01\u00c1\xc2\x01\u00c1\xc3\x01\u00c1\xc4\x01\u00c1\xc5\x01\u00c1\xc6\x01\u00c1\xc7\x01\u00c1\xc8\x01\u00c1\xc9\x01\u00c1\xca\x01\u00c1\xcb\x01\u00c1\xcc\x01\u00c1\xcd\x01\u00c1\xce\x01\u00c1\xcf\x01\u00c1\xd0\x01\u00c1\xd1\x01\u00c1\xd2\x01\u00c1\xd3\x01\u00c1\xd4\x01\u00c1\xd5\x01\u00c1\xd6\x01\u00c1\xd7\x01\u00c1\xd8\x01\u00c1\xd9\x01\u00c1\xda\x01\u00c1\xdb\x01\u00c1\xdc\x01\u00c1\xdd\x01\u00c1\xde\x01\u00c1\xdf\x01\u00c1\xe0\x01\u00c1\xe1\x01\u00c1\xe2\x01\u00c1\xe3\x01\u00c1\xe4\x01\u00c1\xe5\x01\u00c1\xe6\x01\u00c1\xe7\x01\u00c1\xe8\x01\u00c1\xe9\x01\u00c1\xea\x01\u00c1\xeb\x01\u00c1\xec\x01\u00c1\xed\x01\u00c1\xee\x01\u00c1\xef\x01\u00c1\xf0\x01\u00c1\xf1\x01\u00c1\xf2\x01\u00c1\xf3\x01\u00c1\xf4\x01\u00c1\xf5\x01\u00c1\xf6\x01\u00c1\xf7\x01\u00c1\xf8\x01\u00c1\xf9\x01\u00c1\xfa\x01\u00c1\xfb\x01\u00c1\xfc\x01\u00c1\xfd\x01\u00c1\xfe\x01\u00c1\xff\x01\xf6\x94\x0e\x89\xe2\xae\xdb\x1c\xfc\u06d4$\xd4\x1a\x1f!\x8fA2s\x81r\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94\x10A\xaf\xbc\xb3Y\u0568\xdcX\xc1[/\xf5\x13T\xff\x8a!}\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94`\xad\xc0\xf8\x9aA\xaf#|\xe75T\xed\xe1p\xd73\xec\x14\xe0\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94y\x9d2\x9e_X4\x19\x16|\xd7\"\x96$\x85\x92n3\x8fJ\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94|\xf5\xb7\x9b\xfe)\x1ag\xab\x02\xb3\x93\xe4V\xcc\xc4\xc2f\xf7S\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94\x8a\x8e\xaf\xb1\xcfb\xbf\xbe\xb1t\x17i\xda\xe1\xa9\xddG\x99a\x92\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94\x8b\xa1\xf1\tU\x1b\xd42\x800\x12dZ\xc16\xdd\xd6M\xbar\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94\xb0*.\xda\x1b1\u007f\xbd\x16v\x01(\x83k\n\u015bV\x0e\x9d\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94\xdf\n\x88\xb2\xb6\x8cg7\x13\xa8\xec\x82`\x03go'.5s\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" | const baikalAllocData = "\xf9\x05\x01\u0080\x01\xc2\x01\x01\xc2\x02\x01\xc2\x03\x01\xc2\x04\x01\xc2\x05\x01\xc2\x06\x01\xc2\a\x01\xc2\b\x01\xc2\t\x01\xc2\n\x01\xc2\v\x01\xc2\f\x01\xc2\r\x01\xc2\x0e\x01\xc2\x0f\x01\xc2\x10\x01\xc2\x11\x01\xc2\x12\x01\xc2\x13\x01\xc2\x14\x01\xc2\x15\x01\xc2\x16\x01\xc2\x17\x01\xc2\x18\x01\xc2\x19\x01\xc2\x1a\x01\xc2\x1b\x01\xc2\x1c\x01\xc2\x1d\x01\xc2\x1e\x01\xc2\x1f\x01\xc2 \x01\xc2!\x01\xc2\"\x01\xc2#\x01\xc2$\x01\xc2%\x01\xc2&\x01\xc2'\x01\xc2(\x01\xc2)\x01\xc2*\x01\xc2+\x01\xc2,\x01\xc2-\x01\xc2.\x01\xc2/\x01\xc20\x01\xc21\x01\xc22\x01\xc23\x01\xc24\x01\xc25\x01\xc26\x01\xc27\x01\xc28\x01\xc29\x01\xc2:\x01\xc2;\x01\xc2<\x01\xc2=\x01\xc2>\x01\xc2?\x01\xc2@\x01\xc2A\x01\xc2B\x01\xc2C\x01\xc2D\x01\xc2E\x01\xc2F\x01\xc2G\x01\xc2H\x01\xc2I\x01\xc2J\x01\xc2K\x01\xc2L\x01\xc2M\x01\xc2N\x01\xc2O\x01\xc2P\x01\xc2Q\x01\xc2R\x01\xc2S\x01\xc2T\x01\xc2U\x01\xc2V\x01\xc2W\x01\xc2X\x01\xc2Y\x01\xc2Z\x01\xc2[\x01\xc2\\\x01\xc2]\x01\xc2^\x01\xc2_\x01\xc2`\x01\xc2a\x01\xc2b\x01\xc2c\x01\xc2d\x01\xc2e\x01\xc2f\x01\xc2g\x01\xc2h\x01\xc2i\x01\xc2j\x01\xc2k\x01\xc2l\x01\xc2m\x01\xc2n\x01\xc2o\x01\xc2p\x01\xc2q\x01\xc2r\x01\xc2s\x01\xc2t\x01\xc2u\x01\xc2v\x01\xc2w\x01\xc2x\x01\xc2y\x01\xc2z\x01\xc2{\x01\xc2|\x01\xc2}\x01\xc2~\x01\xc2\u007f\x01\u00c1\x80\x01\u00c1\x81\x01\u00c1\x82\x01\u00c1\x83\x01\u00c1\x84\x01\u00c1\x85\x01\u00c1\x86\x01\u00c1\x87\x01\u00c1\x88\x01\u00c1\x89\x01\u00c1\x8a\x01\u00c1\x8b\x01\u00c1\x8c\x01\u00c1\x8d\x01\u00c1\x8e\x01\u00c1\x8f\x01\u00c1\x90\x01\u00c1\x91\x01\u00c1\x92\x01\u00c1\x93\x01\u00c1\x94\x01\u00c1\x95\x01\u00c1\x96\x01\u00c1\x97\x01\u00c1\x98\x01\u00c1\x99\x01\u00c1\x9a\x01\u00c1\x9b\x01\u00c1\x9c\x01\u00c1\x9d\x01\u00c1\x9e\x01\u00c1\x9f\x01\u00c1\xa0\x01\u00c1\xa1\x01\u00c1\xa2\x01\u00c1\xa3\x01\u00c1\xa4\x01\u00c1\xa5\x01\u00c1\xa6\x01\u00c1\xa7\x01\u00c1\xa8\x01\u00c1\xa9\x01\u00c1\xaa\x01\u00c1\xab\x01\u00c1\xac\x01\u00c1\xad\x01\u00c1\xae\x01\u00c1\xaf\x01\u00c1\xb0\x01\u00c1\xb1\x01\u00c1\xb2\x01\u00c1\xb3\x01\u00c1\xb4\x01\u00c1\xb5\x01\u00c1\xb6\x01\u00c1\xb7\x01\u00c1\xb8\x01\u00c1\xb9\x01\u00c1\xba\x01\u00c1\xbb\x01\u00c1\xbc\x01\u00c1\xbd\x01\u00c1\xbe\x01\u00c1\xbf\x01\u00c1\xc0\x01\u00c1\xc1\x01\u00c1\xc2\x01\u00c1\xc3\x01\u00c1\xc4\x01\u00c1\xc5\x01\u00c1\xc6\x01\u00c1\xc7\x01\u00c1\xc8\x01\u00c1\xc9\x01\u00c1\xca\x01\u00c1\xcb\x01\u00c1\xcc\x01\u00c1\xcd\x01\u00c1\xce\x01\u00c1\xcf\x01\u00c1\xd0\x01\u00c1\xd1\x01\u00c1\xd2\x01\u00c1\xd3\x01\u00c1\xd4\x01\u00c1\xd5\x01\u00c1\xd6\x01\u00c1\xd7\x01\u00c1\xd8\x01\u00c1\xd9\x01\u00c1\xda\x01\u00c1\xdb\x01\u00c1\xdc\x01\u00c1\xdd\x01\u00c1\xde\x01\u00c1\xdf\x01\u00c1\xe0\x01\u00c1\xe1\x01\u00c1\xe2\x01\u00c1\xe3\x01\u00c1\xe4\x01\u00c1\xe5\x01\u00c1\xe6\x01\u00c1\xe7\x01\u00c1\xe8\x01\u00c1\xe9\x01\u00c1\xea\x01\u00c1\xeb\x01\u00c1\xec\x01\u00c1\xed\x01\u00c1\xee\x01\u00c1\xef\x01\u00c1\xf0\x01\u00c1\xf1\x01\u00c1\xf2\x01\u00c1\xf3\x01\u00c1\xf4\x01\u00c1\xf5\x01\u00c1\xf6\x01\u00c1\xf7\x01\u00c1\xf8\x01\u00c1\xf9\x01\u00c1\xfa\x01\u00c1\xfb\x01\u00c1\xfc\x01\u00c1\xfd\x01\u00c1\xfe\x01\u00c1\xff\x01\xf6\x94\x0e\x89\xe2\xae\xdb\x1c\xfc\u06d4$\xd4\x1a\x1f!\x8fA2s\x81r\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94`\xad\xc0\xf8\x9aA\xaf#|\xe75T\xed\xe1p\xd73\xec\x14\xe0\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94y\x9d2\x9e_X4\x19\x16|\xd7\"\x96$\x85\x92n3\x8fJ\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94|\xf5\xb7\x9b\xfe)\x1ag\xab\x02\xb3\x93\xe4V\xcc\xc4\xc2f\xf7S\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94\x8a\x8e\xaf\xb1\xcfb\xbf\xbe\xb1t\x17i\xda\xe1\xa9\xddG\x99a\x92\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94\x8b\xa1\xf1\tU\x1b\xd42\x800\x12dZ\xc16\xdd\xd6M\xbar\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x94\xb0*.\xda\x1b1\u007f\xbd\x16v\x01(\x83k\n\u015bV\x0e\x9d\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" | ||||||
|  | |||||||
| @ -186,8 +186,8 @@ func TestGenesisHashes(t *testing.T) { | |||||||
| 			hash:    params.RinkebyGenesisHash, | 			hash:    params.RinkebyGenesisHash, | ||||||
| 		}, | 		}, | ||||||
| 		{ | 		{ | ||||||
| 			genesis: DefaultYoloV3GenesisBlock(), | 			genesis: DefaultBaikalGenesisBlock(), | ||||||
| 			hash:    params.YoloV3GenesisHash, | 			hash:    params.BaikalGenesisHash, | ||||||
| 		}, | 		}, | ||||||
| 	} | 	} | ||||||
| 	for i, c := range cases { | 	for i, c := range cases { | ||||||
|  | |||||||
| @ -991,7 +991,7 @@ func (s *StateDB) Commit(deleteEmptyObjects bool) (common.Hash, error) { | |||||||
| // - Add precompiles to access list (2929)
 | // - Add precompiles to access list (2929)
 | ||||||
| // - Add the contents of the optional tx access list (2930)
 | // - Add the contents of the optional tx access list (2930)
 | ||||||
| //
 | //
 | ||||||
| // This method should only be called if Yolov3/Berlin/2929+2930 is applicable at the current number.
 | // This method should only be called if Berlin/2929+2930 is applicable at the current number.
 | ||||||
| func (s *StateDB) PrepareAccessList(sender common.Address, dst *common.Address, precompiles []common.Address, list types.AccessList) { | func (s *StateDB) PrepareAccessList(sender common.Address, dst *common.Address, precompiles []common.Address, list types.AccessList) { | ||||||
| 	s.AddAddressToAccessList(sender) | 	s.AddAddressToAccessList(sender) | ||||||
| 	if dst != nil { | 	if dst != nil { | ||||||
|  | |||||||
| @ -61,7 +61,7 @@ func MakeSigner(config *params.ChainConfig, blockNumber *big.Int) Signer { | |||||||
| // have the current block number available, use MakeSigner instead.
 | // have the current block number available, use MakeSigner instead.
 | ||||||
| func LatestSigner(config *params.ChainConfig) Signer { | func LatestSigner(config *params.ChainConfig) Signer { | ||||||
| 	if config.ChainID != nil { | 	if config.ChainID != nil { | ||||||
| 		if config.BerlinBlock != nil || config.YoloV3Block != nil { | 		if config.BerlinBlock != nil { | ||||||
| 			return NewEIP2930Signer(config.ChainID) | 			return NewEIP2930Signer(config.ChainID) | ||||||
| 		} | 		} | ||||||
| 		if config.EIP155Block != nil { | 		if config.EIP155Block != nil { | ||||||
|  | |||||||
| @ -66,7 +66,7 @@ func setDefaults(cfg *Config) { | |||||||
| 			IstanbulBlock:       new(big.Int), | 			IstanbulBlock:       new(big.Int), | ||||||
| 			MuirGlacierBlock:    new(big.Int), | 			MuirGlacierBlock:    new(big.Int), | ||||||
| 			BerlinBlock:         new(big.Int), | 			BerlinBlock:         new(big.Int), | ||||||
| 			YoloV3Block:         nil, | 			LondonBlock:         nil, | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -131,7 +131,7 @@ func New(stack *node.Node, config *ethconfig.Config) (*Ethereum, error) { | |||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| 	chainConfig, genesisHash, genesisErr := core.SetupGenesisBlockWithOverride(chainDb, config.Genesis, config.OverrideBerlin) | 	chainConfig, genesisHash, genesisErr := core.SetupGenesisBlockWithOverride(chainDb, config.Genesis, config.OverrideLondon) | ||||||
| 	if _, ok := genesisErr.(*params.ConfigCompatError); genesisErr != nil && !ok { | 	if _, ok := genesisErr.(*params.ConfigCompatError); genesisErr != nil && !ok { | ||||||
| 		return nil, genesisErr | 		return nil, genesisErr | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -200,7 +200,7 @@ type Config struct { | |||||||
| 	CheckpointOracle *params.CheckpointOracleConfig `toml:",omitempty"` | 	CheckpointOracle *params.CheckpointOracleConfig `toml:",omitempty"` | ||||||
| 
 | 
 | ||||||
| 	// Berlin block override (TODO: remove after the fork)
 | 	// Berlin block override (TODO: remove after the fork)
 | ||||||
| 	OverrideBerlin *big.Int `toml:",omitempty"` | 	OverrideLondon *big.Int `toml:",omitempty"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // CreateConsensusEngine creates a consensus engine for the given chain configuration.
 | // CreateConsensusEngine creates a consensus engine for the given chain configuration.
 | ||||||
|  | |||||||
| @ -88,7 +88,7 @@ func New(stack *node.Node, config *ethconfig.Config) (*LightEthereum, error) { | |||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| 	chainConfig, genesisHash, genesisErr := core.SetupGenesisBlockWithOverride(chainDb, config.Genesis, config.OverrideBerlin) | 	chainConfig, genesisHash, genesisErr := core.SetupGenesisBlockWithOverride(chainDb, config.Genesis, config.OverrideLondon) | ||||||
| 	if _, isCompat := genesisErr.(*params.ConfigCompatError); genesisErr != nil && !isCompat { | 	if _, isCompat := genesisErr.(*params.ConfigCompatError); genesisErr != nil && !isCompat { | ||||||
| 		return nil, genesisErr | 		return nil, genesisErr | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -67,11 +67,11 @@ var GoerliBootnodes = []string{ | |||||||
| 	"enode://a59e33ccd2b3e52d578f1fbd70c6f9babda2650f0760d6ff3b37742fdcdfdb3defba5d56d315b40c46b70198c7621e63ffa3f987389c7118634b0fefbbdfa7fd@51.15.119.157:40303", | 	"enode://a59e33ccd2b3e52d578f1fbd70c6f9babda2650f0760d6ff3b37742fdcdfdb3defba5d56d315b40c46b70198c7621e63ffa3f987389c7118634b0fefbbdfa7fd@51.15.119.157:40303", | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // YoloV3Bootnodes are the enode URLs of the P2P bootstrap nodes running on the
 | // BaikalBootnodes are the enode URLs of the P2P bootstrap nodes running on the
 | ||||||
| // YOLOv3 ephemeral test network.
 | // Baikal ephemeral test network.
 | ||||||
| // TODO: Set Yolov3 bootnodes
 | // TODO: Set Baikal bootnodes
 | ||||||
| var YoloV3Bootnodes = []string{ | var BaikalBootnodes = []string{ | ||||||
| 	"enode://9e1096aa59862a6f164994cb5cb16f5124d6c992cdbf4535ff7dea43ea1512afe5448dca9df1b7ab0726129603f1a3336b631e4d7a1a44c94daddd03241587f9@3.9.20.133:30303", | 	"", | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| var V5Bootnodes = []string{ | var V5Bootnodes = []string{ | ||||||
|  | |||||||
| @ -31,7 +31,7 @@ var ( | |||||||
| 	RopstenGenesisHash = common.HexToHash("0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d") | 	RopstenGenesisHash = common.HexToHash("0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d") | ||||||
| 	RinkebyGenesisHash = common.HexToHash("0x6341fd3daf94b748c72ced5a5b26028f2474f5f00d824504e4fa37a75767e177") | 	RinkebyGenesisHash = common.HexToHash("0x6341fd3daf94b748c72ced5a5b26028f2474f5f00d824504e4fa37a75767e177") | ||||||
| 	GoerliGenesisHash  = common.HexToHash("0xbf7e331f7f7c1dd2e05159666b3bf8bc7a8a3a9eb1d518969eab529dd9b88c1a") | 	GoerliGenesisHash  = common.HexToHash("0xbf7e331f7f7c1dd2e05159666b3bf8bc7a8a3a9eb1d518969eab529dd9b88c1a") | ||||||
| 	YoloV3GenesisHash  = common.HexToHash("0xf1f2876e8500c77afcc03228757b39477eceffccf645b734967fe3c7e16967b7") | 	BaikalGenesisHash  = common.HexToHash("0xa0bc5d43c72a990cedeb59d305702602b34c3ee8585e77d03c7a4fa64d79636e") | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // TrustedCheckpoints associates each known checkpoint with the genesis hash of
 | // TrustedCheckpoints associates each known checkpoint with the genesis hash of
 | ||||||
| @ -217,9 +217,8 @@ var ( | |||||||
| 		Threshold: 2, | 		Threshold: 2, | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// YoloV3ChainConfig contains the chain parameters to run a node on the YOLOv3 test network.
 | 	BaikalChainConfig = &ChainConfig{ | ||||||
| 	YoloV3ChainConfig = &ChainConfig{ | 		ChainID:             big.NewInt(1642), | ||||||
| 		ChainID:             new(big.Int).SetBytes([]byte("yolov3x")), |  | ||||||
| 		HomesteadBlock:      big.NewInt(0), | 		HomesteadBlock:      big.NewInt(0), | ||||||
| 		DAOForkBlock:        nil, | 		DAOForkBlock:        nil, | ||||||
| 		DAOForkSupport:      true, | 		DAOForkSupport:      true, | ||||||
| @ -231,10 +230,10 @@ var ( | |||||||
| 		PetersburgBlock:     big.NewInt(0), | 		PetersburgBlock:     big.NewInt(0), | ||||||
| 		IstanbulBlock:       big.NewInt(0), | 		IstanbulBlock:       big.NewInt(0), | ||||||
| 		MuirGlacierBlock:    nil, | 		MuirGlacierBlock:    nil, | ||||||
| 		BerlinBlock:         nil, // Don't enable Berlin directly, we're YOLOing it
 | 		BerlinBlock:         big.NewInt(0), | ||||||
| 		YoloV3Block:         big.NewInt(0), | 		LondonBlock:         big.NewInt(0), | ||||||
| 		Clique: &CliqueConfig{ | 		Clique: &CliqueConfig{ | ||||||
| 			Period: 15, | 			Period: 30, | ||||||
| 			Epoch:  30000, | 			Epoch:  30000, | ||||||
| 		}, | 		}, | ||||||
| 	} | 	} | ||||||
| @ -331,8 +330,8 @@ type ChainConfig struct { | |||||||
| 	IstanbulBlock       *big.Int `json:"istanbulBlock,omitempty"`       // Istanbul switch block (nil = no fork, 0 = already on istanbul)
 | 	IstanbulBlock       *big.Int `json:"istanbulBlock,omitempty"`       // Istanbul switch block (nil = no fork, 0 = already on istanbul)
 | ||||||
| 	MuirGlacierBlock    *big.Int `json:"muirGlacierBlock,omitempty"`    // Eip-2384 (bomb delay) switch block (nil = no fork, 0 = already activated)
 | 	MuirGlacierBlock    *big.Int `json:"muirGlacierBlock,omitempty"`    // Eip-2384 (bomb delay) switch block (nil = no fork, 0 = already activated)
 | ||||||
| 	BerlinBlock         *big.Int `json:"berlinBlock,omitempty"`         // Berlin switch block (nil = no fork, 0 = already on berlin)
 | 	BerlinBlock         *big.Int `json:"berlinBlock,omitempty"`         // Berlin switch block (nil = no fork, 0 = already on berlin)
 | ||||||
|  | 	LondonBlock         *big.Int `json:"londonBlock,omitempty"`         // London switch block (nil = no fork, 0 = already on london)
 | ||||||
| 
 | 
 | ||||||
| 	YoloV3Block   *big.Int `json:"yoloV3Block,omitempty"`   // YOLO v3: Gas repricings TODO @holiman add EIP references
 |  | ||||||
| 	EWASMBlock    *big.Int `json:"ewasmBlock,omitempty"`    // EWASM switch block (nil = no fork, 0 = already activated)
 | 	EWASMBlock    *big.Int `json:"ewasmBlock,omitempty"`    // EWASM switch block (nil = no fork, 0 = already activated)
 | ||||||
| 	CatalystBlock *big.Int `json:"catalystBlock,omitempty"` // Catalyst switch block (nil = no fork, 0 = already on catalyst)
 | 	CatalystBlock *big.Int `json:"catalystBlock,omitempty"` // Catalyst switch block (nil = no fork, 0 = already on catalyst)
 | ||||||
| 
 | 
 | ||||||
| @ -371,7 +370,7 @@ func (c *ChainConfig) String() string { | |||||||
| 	default: | 	default: | ||||||
| 		engine = "unknown" | 		engine = "unknown" | ||||||
| 	} | 	} | ||||||
| 	return fmt.Sprintf("{ChainID: %v Homestead: %v DAO: %v DAOSupport: %v EIP150: %v EIP155: %v EIP158: %v Byzantium: %v Constantinople: %v Petersburg: %v Istanbul: %v, Muir Glacier: %v, Berlin: %v, YOLO v3: %v, Engine: %v}", | 	return fmt.Sprintf("{ChainID: %v Homestead: %v DAO: %v DAOSupport: %v EIP150: %v EIP155: %v EIP158: %v Byzantium: %v Constantinople: %v Petersburg: %v Istanbul: %v, Muir Glacier: %v, Berlin: %v, London: %v, Engine: %v}", | ||||||
| 		c.ChainID, | 		c.ChainID, | ||||||
| 		c.HomesteadBlock, | 		c.HomesteadBlock, | ||||||
| 		c.DAOForkBlock, | 		c.DAOForkBlock, | ||||||
| @ -385,7 +384,7 @@ func (c *ChainConfig) String() string { | |||||||
| 		c.IstanbulBlock, | 		c.IstanbulBlock, | ||||||
| 		c.MuirGlacierBlock, | 		c.MuirGlacierBlock, | ||||||
| 		c.BerlinBlock, | 		c.BerlinBlock, | ||||||
| 		c.YoloV3Block, | 		c.LondonBlock, | ||||||
| 		engine, | 		engine, | ||||||
| 	) | 	) | ||||||
| } | } | ||||||
| @ -444,7 +443,12 @@ func (c *ChainConfig) IsIstanbul(num *big.Int) bool { | |||||||
| 
 | 
 | ||||||
| // IsBerlin returns whether num is either equal to the Berlin fork block or greater.
 | // IsBerlin returns whether num is either equal to the Berlin fork block or greater.
 | ||||||
| func (c *ChainConfig) IsBerlin(num *big.Int) bool { | func (c *ChainConfig) IsBerlin(num *big.Int) bool { | ||||||
| 	return isForked(c.BerlinBlock, num) || isForked(c.YoloV3Block, num) | 	return isForked(c.BerlinBlock, num) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // IsLondon returns whether num is either equal to the London fork block or greater.
 | ||||||
|  | func (c *ChainConfig) IsLondon(num *big.Int) bool { | ||||||
|  | 	return isForked(c.LondonBlock, num) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // IsCatalyst returns whether num is either equal to the Merge fork block or greater.
 | // IsCatalyst returns whether num is either equal to the Merge fork block or greater.
 | ||||||
| @ -496,6 +500,7 @@ func (c *ChainConfig) CheckConfigForkOrder() error { | |||||||
| 		{name: "istanbulBlock", block: c.IstanbulBlock}, | 		{name: "istanbulBlock", block: c.IstanbulBlock}, | ||||||
| 		{name: "muirGlacierBlock", block: c.MuirGlacierBlock, optional: true}, | 		{name: "muirGlacierBlock", block: c.MuirGlacierBlock, optional: true}, | ||||||
| 		{name: "berlinBlock", block: c.BerlinBlock}, | 		{name: "berlinBlock", block: c.BerlinBlock}, | ||||||
|  | 		{name: "londonBlock", block: c.LondonBlock}, | ||||||
| 	} { | 	} { | ||||||
| 		if lastFork.name != "" { | 		if lastFork.name != "" { | ||||||
| 			// Next one must be higher number
 | 			// Next one must be higher number
 | ||||||
| @ -562,8 +567,8 @@ func (c *ChainConfig) checkCompatible(newcfg *ChainConfig, head *big.Int) *Confi | |||||||
| 	if isForkIncompatible(c.BerlinBlock, newcfg.BerlinBlock, head) { | 	if isForkIncompatible(c.BerlinBlock, newcfg.BerlinBlock, head) { | ||||||
| 		return newCompatError("Berlin fork block", c.BerlinBlock, newcfg.BerlinBlock) | 		return newCompatError("Berlin fork block", c.BerlinBlock, newcfg.BerlinBlock) | ||||||
| 	} | 	} | ||||||
| 	if isForkIncompatible(c.YoloV3Block, newcfg.YoloV3Block, head) { | 	if isForkIncompatible(c.LondonBlock, newcfg.LondonBlock, head) { | ||||||
| 		return newCompatError("YOLOv3 fork block", c.YoloV3Block, newcfg.YoloV3Block) | 		return newCompatError("London fork block", c.LondonBlock, newcfg.LondonBlock) | ||||||
| 	} | 	} | ||||||
| 	if isForkIncompatible(c.EWASMBlock, newcfg.EWASMBlock, head) { | 	if isForkIncompatible(c.EWASMBlock, newcfg.EWASMBlock, head) { | ||||||
| 		return newCompatError("ewasm fork block", c.EWASMBlock, newcfg.EWASMBlock) | 		return newCompatError("ewasm fork block", c.EWASMBlock, newcfg.EWASMBlock) | ||||||
| @ -635,7 +640,7 @@ type Rules struct { | |||||||
| 	ChainID                                                 *big.Int | 	ChainID                                                 *big.Int | ||||||
| 	IsHomestead, IsEIP150, IsEIP155, IsEIP158               bool | 	IsHomestead, IsEIP150, IsEIP155, IsEIP158               bool | ||||||
| 	IsByzantium, IsConstantinople, IsPetersburg, IsIstanbul bool | 	IsByzantium, IsConstantinople, IsPetersburg, IsIstanbul bool | ||||||
| 	IsBerlin, IsCatalyst                                    bool | 	IsBerlin, IsLondon, IsCatalyst                          bool | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Rules ensures c's ChainID is not nil.
 | // Rules ensures c's ChainID is not nil.
 | ||||||
| @ -655,6 +660,7 @@ func (c *ChainConfig) Rules(num *big.Int) Rules { | |||||||
| 		IsPetersburg:     c.IsPetersburg(num), | 		IsPetersburg:     c.IsPetersburg(num), | ||||||
| 		IsIstanbul:       c.IsIstanbul(num), | 		IsIstanbul:       c.IsIstanbul(num), | ||||||
| 		IsBerlin:         c.IsBerlin(num), | 		IsBerlin:         c.IsBerlin(num), | ||||||
|  | 		IsLondon:         c.IsLondon(num), | ||||||
| 		IsCatalyst:       c.IsCatalyst(num), | 		IsCatalyst:       c.IsCatalyst(num), | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | |||||||
| @ -141,20 +141,6 @@ var Forks = map[string]*params.ChainConfig{ | |||||||
| 		PetersburgBlock:     big.NewInt(0), | 		PetersburgBlock:     big.NewInt(0), | ||||||
| 		IstanbulBlock:       big.NewInt(5), | 		IstanbulBlock:       big.NewInt(5), | ||||||
| 	}, | 	}, | ||||||
| 	"YOLOv3": { |  | ||||||
| 		ChainID:             big.NewInt(1), |  | ||||||
| 		HomesteadBlock:      big.NewInt(0), |  | ||||||
| 		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), |  | ||||||
| 		YoloV3Block:         big.NewInt(0), |  | ||||||
| 	}, |  | ||||||
| 	// This specification is subject to change, but is for now identical to YOLOv3
 |  | ||||||
| 	// for cross-client testing purposes
 |  | ||||||
| 	"Berlin": { | 	"Berlin": { | ||||||
| 		ChainID:             big.NewInt(1), | 		ChainID:             big.NewInt(1), | ||||||
| 		HomesteadBlock:      big.NewInt(0), | 		HomesteadBlock:      big.NewInt(0), | ||||||
| @ -167,6 +153,32 @@ var Forks = map[string]*params.ChainConfig{ | |||||||
| 		IstanbulBlock:       big.NewInt(0), | 		IstanbulBlock:       big.NewInt(0), | ||||||
| 		BerlinBlock:         big.NewInt(0), | 		BerlinBlock:         big.NewInt(0), | ||||||
| 	}, | 	}, | ||||||
|  | 	"BerlinToLondonAt5": { | ||||||
|  | 		ChainID:             big.NewInt(1), | ||||||
|  | 		HomesteadBlock:      big.NewInt(0), | ||||||
|  | 		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), | ||||||
|  | 		BerlinBlock:         big.NewInt(0), | ||||||
|  | 		LondonBlock:         big.NewInt(5), | ||||||
|  | 	}, | ||||||
|  | 	"London": { | ||||||
|  | 		ChainID:             big.NewInt(1), | ||||||
|  | 		HomesteadBlock:      big.NewInt(0), | ||||||
|  | 		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), | ||||||
|  | 		BerlinBlock:         big.NewInt(0), | ||||||
|  | 		LondonBlock:         big.NewInt(0), | ||||||
|  | 	}, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Returns the set of defined fork names
 | // Returns the set of defined fork names
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user