diff --git a/cmd/geth/main.go b/cmd/geth/main.go index 76c63dafe1..5c7c234eeb 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -291,6 +291,8 @@ func prepare(ctx *cli.Context) { // If we're running a known preset, log it for convenience. switch { // SYSCOIN + case ctx.IsSet(utils.SyscoinFlag.Name): + log.Info("Starting Geth on Syscoin mainnet...") case ctx.IsSet(utils.TanenbaumFlag.Name): log.Info("Starting Geth on Tanenbaum testnet...") case ctx.IsSet(utils.SepoliaFlag.Name): @@ -327,6 +329,7 @@ func prepare(ctx *cli.Context) { if !ctx.IsSet(utils.HoleskyFlag.Name) && !ctx.IsSet(utils.SepoliaFlag.Name) && // SYSCOIN + !ctx.IsSet(utils.SyscoinFlag.Name) && !ctx.IsSet(utils.TanenbaumFlag.Name) && !ctx.IsSet(utils.DeveloperFlag.Name) { // Nope, we're really on mainnet. Bump that cache up! diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index f9d100ddc0..338ad52cd3 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -153,6 +153,10 @@ var ( Name: "tanenbaum", Usage: "Tanenbaum network: pre-configured NEVM-based Tanenbaum test network.", } + SyscoinFlag = &cli.BoolFlag{ + Name: "syscoin", + Usage: "Syscoin network: pre-configured NEVM-based Syscoin network.", + } SepoliaFlag = &cli.BoolFlag{ Name: "sepolia", Usage: "Sepolia network: pre-configured proof-of-work test network", @@ -992,6 +996,9 @@ func MakeDataDir(ctx *cli.Context) string { return filepath.Join(path, "sepolia") } // SYSCOIN + if ctx.Bool(SyscoinFlag.Name) { + return filepath.Join(path, "syscoin") + } if ctx.Bool(TanenbaumFlag.Name) { return filepath.Join(path, "tanenbaum") } @@ -1057,6 +1064,8 @@ func setBootstrapNodes(ctx *cli.Context, cfg *p2p.Config) { case ctx.Bool(HoleskyFlag.Name): urls = params.HoleskyBootnodes // SYSCOIN + case ctx.Bool(SyscoinFlag.Name): + urls = params.SyscoinBootnodes case ctx.Bool(TanenbaumFlag.Name): urls = params.TanenbaumBootnodes case ctx.Bool(SepoliaFlag.Name): @@ -1487,6 +1496,8 @@ func SetDataDir(ctx *cli.Context, cfg *node.Config) { case ctx.Bool(DeveloperFlag.Name): cfg.DataDir = "" // unless explicitly requested, use memory databases // SYSCOIN + case ctx.Bool(SyscoinFlag.Name) && cfg.DataDir == node.DefaultDataDir(): + cfg.DataDir = filepath.Join(node.DefaultDataDir(), "syscoin") case ctx.Bool(TanenbaumFlag.Name) && cfg.DataDir == node.DefaultDataDir(): cfg.DataDir = filepath.Join(node.DefaultDataDir(), "tanenbaum") case ctx.Bool(SepoliaFlag.Name) && cfg.DataDir == node.DefaultDataDir(): @@ -1814,8 +1825,7 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) { switch { case ctx.Bool(MainnetFlag.Name): if !ctx.IsSet(NetworkIdFlag.Name) { - // SYSCOIN - cfg.NetworkId = 57 + cfg.NetworkId = 1 } cfg.Genesis = core.DefaultGenesisBlock() SetDNSDiscoveryDefaults(cfg, params.MainnetGenesisHash) @@ -1832,6 +1842,12 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) { cfg.Genesis = core.DefaultSepoliaGenesisBlock() SetDNSDiscoveryDefaults(cfg, params.SepoliaGenesisHash) // SYSCOIN + case ctx.Bool(SyscoinFlag.Name): + if !ctx.IsSet(NetworkIdFlag.Name) { + cfg.NetworkId = 57 + } + cfg.Genesis = core.DefaultSyscoinGenesisBlock() + SetDNSDiscoveryDefaults(cfg, params.SyscoinGenesisHash) case ctx.Bool(TanenbaumFlag.Name): if !ctx.IsSet(NetworkIdFlag.Name) { cfg.NetworkId = 5700 @@ -2157,6 +2173,9 @@ func MakeGenesis(ctx *cli.Context) *core.Genesis { genesis = core.DefaultHoleskyGenesisBlock() case ctx.Bool(SepoliaFlag.Name): genesis = core.DefaultSepoliaGenesisBlock() + // SYSCOIN + case ctx.Bool(SyscoinFlag.Name): + genesis = core.DefaultSyscoinGenesisBlock() case ctx.Bool(TanenbaumFlag.Name): genesis = core.DefaultTanenbaumGenesisBlock() case ctx.Bool(DeveloperFlag.Name): diff --git a/core/genesis.go b/core/genesis.go index 14b97c71ed..465e47f3c5 100644 --- a/core/genesis.go +++ b/core/genesis.go @@ -201,6 +201,8 @@ func getGenesisState(db ethdb.Database, blockhash common.Hash) (alloc types.Gene case params.HoleskyGenesisHash: genesis = DefaultHoleskyGenesisBlock() // SYSCOIN + case params.SyscoinGenesisHash: + genesis = DefaultSyscoinGenesisBlock() case params.TanenbaumGenesisHash: genesis = DefaultTanenbaumGenesisBlock() } @@ -402,6 +404,8 @@ func (g *Genesis) configOrDefault(ghash common.Hash) *params.ChainConfig { case ghash == params.SepoliaGenesisHash: return params.SepoliaChainConfig // SYSCOIN + case ghash == params.SyscoinGenesisHash: + return params.SyscoinChainConfig case ghash == params.TanenbaumGenesisHash: return params.TanenbaumChainConfig default: @@ -543,7 +547,17 @@ func (g *Genesis) MustCommit(db ethdb.Database, triedb *triedb.Database) *types. func DefaultGenesisBlock() *Genesis { return &Genesis{ Config: params.MainnetChainConfig, - // SYSCOIN + Nonce: 66, + ExtraData: hexutil.MustDecode("0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa"), + GasLimit: 5000, + Difficulty: big.NewInt(17179869184), + Alloc: decodePrealloc(mainnetAllocData), + } +} +// SYSCOIN +func DefaultSyscoinGenesisBlock() *Genesis { + return &Genesis{ + Config: params.SyscoinChainConfig, Timestamp: 0x60d7aef6, ExtraData: hexutil.MustDecode("0x00"), GasLimit: 0x7A1200, @@ -551,7 +565,6 @@ func DefaultGenesisBlock() *Genesis { Alloc: decodePrealloc(syscoinAllocData), } } -// SYSCOIN func DefaultTanenbaumGenesisBlock() *Genesis { return &Genesis{ Config: params.TanenbaumChainConfig, diff --git a/params/bootnodes.go b/params/bootnodes.go index bb624e9ad7..9027d40b21 100644 --- a/params/bootnodes.go +++ b/params/bootnodes.go @@ -28,6 +28,9 @@ var MainnetBootnodes = []string{ "enode://4aeb4ab6c14b23e2c4cfdce879c04b0748a20d8e9b59e25ded2a08143e265c6c25936e74cbc8e641e3312ca288673d91f2f93f8e277de3cfa444ecdaaf982052@157.90.35.166:30303", // bootnode-hetzner-fsn } // SYSCOIN +var SyscoinBootnodes = []string{ + "enode://6f417e6740e559818cedd1ae31ea339657f4580c06491ab9c9a7be9dc9136e858e5bc9a3c2e8d6ea49567af5102afced9d8a99c04410244b0c0880911720439a@54.203.37.244:30303", +} var TanenbaumBootnodes = []string{ "enode://f0e3e91d3d28b808734ce08b10855b5e6b6bde8eb9e4bedaf8aababc2ceaa8f4134cec309a996765f183361f1e67bce341326c05b743ed5932a8e705149364e4@44.238.217.166:30303", } @@ -83,6 +86,8 @@ func KnownDNSNetwork(genesis common.Hash, protocol string) string { switch genesis { case MainnetGenesisHash: net = "mainnet" + case SyscoinGenesisHash: + net = "syscoin" case TanenbaumGenesisHash: net = "tanenbaum" case SepoliaGenesisHash: diff --git a/params/config.go b/params/config.go index 23803c97af..6aa4a8956f 100644 --- a/params/config.go +++ b/params/config.go @@ -26,8 +26,9 @@ import ( // Genesis hashes to enforce below configs on. var ( + MainnetGenesisHash = common.HexToHash("0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3") // SYSCOIN - MainnetGenesisHash = common.HexToHash("0x2112327cad6deec6ada8bd7e5d33d263b57742a8495f3b641faa326b55b1c666") + SyscoinGenesisHash = common.HexToHash("0x2112327cad6deec6ada8bd7e5d33d263b57742a8495f3b641faa326b55b1c666") TanenbaumGenesisHash = common.HexToHash("0x5fb22cd4425cea75d2ddaf5fbafb247bb682f407575c599d954b811214c3617c") HoleskyGenesisHash = common.HexToHash("0xb5f7f912443c940f21fd611f12828d75b534364ed9e95ca4e307729a4661bde4") SepoliaGenesisHash = common.HexToHash("0x25a5cc106eea7138acab33231d7160d69cb777ee0c2c553fcddf5138993e6dd9") @@ -36,15 +37,41 @@ var ( func newUint64(val uint64) *uint64 { return &val } var ( + MainnetTerminalTotalDifficulty, _ = new(big.Int).SetString("58_750_000_000_000_000_000_000", 0) // SYSCOIN - MainnetTerminalTotalDifficulty, _ = new(big.Int).SetString("0", 0) + SyscoinTerminalTotalDifficulty, _ = new(big.Int).SetString("0", 0) // MainnetChainConfig is the chain parameters to run a node on the main network. MainnetChainConfig = &ChainConfig{ + ChainID: big.NewInt(1), + HomesteadBlock: big.NewInt(1_150_000), + DAOForkBlock: big.NewInt(1_920_000), + DAOForkSupport: true, + EIP150Block: big.NewInt(2_463_000), + EIP155Block: big.NewInt(2_675_000), + EIP158Block: big.NewInt(2_675_000), + ByzantiumBlock: big.NewInt(4_370_000), + ConstantinopleBlock: big.NewInt(7_280_000), + PetersburgBlock: big.NewInt(7_280_000), + IstanbulBlock: big.NewInt(9_069_000), + MuirGlacierBlock: big.NewInt(9_200_000), + BerlinBlock: big.NewInt(12_244_000), + LondonBlock: big.NewInt(12_965_000), + ArrowGlacierBlock: big.NewInt(13_773_000), + GrayGlacierBlock: big.NewInt(15_050_000), + TerminalTotalDifficulty: MainnetTerminalTotalDifficulty, // 58_750_000_000_000_000_000_000 + TerminalTotalDifficultyPassed: true, + ShanghaiTime: newUint64(1681338455), + CancunTime: newUint64(1710338135), + DepositContractAddress: common.HexToAddress("0x00000000219ab540356cbb839cbe05303d7705fa"), + Ethash: new(EthashConfig), + } + // SYSCOIN + SyscoinChainConfig = &ChainConfig{ ChainID: big.NewInt(57), HomesteadBlock: big.NewInt(0), DAOForkBlock: nil, - DAOForkSupport: true, + DAOForkSupport: false, EIP150Block: big.NewInt(0), EIP155Block: big.NewInt(0), EIP158Block: big.NewInt(0), @@ -58,18 +85,17 @@ var ( RolluxBlock: big.NewInt(268500), NexusBlock: big.NewInt(600000), LondonBlock: big.NewInt(1), - TerminalTotalDifficulty: MainnetTerminalTotalDifficulty, + TerminalTotalDifficulty: SyscoinTerminalTotalDifficulty, TerminalTotalDifficultyPassed: true, ShanghaiTime: newUint64(1679618404), CancunTime: newUint64(1679618404), - Ethash: new(EthashConfig), + Ethash: nil, } - // SYSCOIN SyscoinChainConfig is the chain parameters to run a node on the syscoin network. TanenbaumChainConfig = &ChainConfig{ ChainID: big.NewInt(5700), HomesteadBlock: big.NewInt(0), DAOForkBlock: nil, - DAOForkSupport: true, + DAOForkSupport: false, EIP150Block: big.NewInt(0), EIP155Block: big.NewInt(0), EIP158Block: big.NewInt(0), @@ -85,8 +111,7 @@ var ( NexusBlock: big.NewInt(600000), LondonBlock: big.NewInt(1), CancunTime: newUint64(1675118284), - ArrowGlacierBlock: nil, - Ethash: new(EthashConfig), + Ethash: nil, } // HoleskyChainConfig contains the chain parameters to run a node on the Holesky test network. HoleskyChainConfig = &ChainConfig{