cmd: deprecate --testnet, use named networks instead (#20852)
* cmd/utils: make goerli the default testnet * cmd/geth: explicitly rename testnet to ropsten * core: explicitly rename testnet to ropsten * params: explicitly rename testnet to ropsten * cmd: explicitly rename testnet to ropsten * miner: explicitly rename testnet to ropsten * mobile: allow for returning the goerli spec * tests: explicitly rename testnet to ropsten * docs: update readme to reflect changes to the default testnet * mobile: allow for configuring goerli and rinkeby nodes * cmd/geth: revert --testnet back to ropsten and mark as legacy * cmd/util: mark --testnet flag as deprecated * docs: update readme to properly reflect the 3 testnets * cmd/utils: add an explicit deprecation warning on startup * cmd/utils: swap goerli and ropsten in usage * cmd/geth: swap goerli and ropsten in usage * cmd/geth: if running a known preset, log it for convenience * docs: improve readme on usage of ropsten's testnet datadir * cmd/utils: check if legacy `testnet` datadir exists for ropsten * cmd/geth: check for legacy testnet path in console command * cmd/geth: use switch statement for complex conditions in main * cmd/geth: move known preset log statement to the very top * cmd/utils: create new ropsten configurations in the ropsten datadir * cmd/utils: makedatadir should check for existing testnet dir * cmd/geth: add legacy testnet flag to the copy db command * cmd/geth: add legacy testnet flag to the inspect command
This commit is contained in:
parent
023b87b9d1
commit
15540ae992
40
README.md
40
README.md
@ -72,7 +72,7 @@ This command will:
|
|||||||
This tool is optional and if you leave it out you can always attach to an already running
|
This tool is optional and if you leave it out you can always attach to an already running
|
||||||
`geth` instance with `geth attach`.
|
`geth` instance with `geth attach`.
|
||||||
|
|
||||||
### A Full node on the Ethereum test network
|
### A Full node on the Görli test network
|
||||||
|
|
||||||
Transitioning towards developers, if you'd like to play around with creating Ethereum
|
Transitioning towards developers, if you'd like to play around with creating Ethereum
|
||||||
contracts, you almost certainly would like to do that without any real money involved until
|
contracts, you almost certainly would like to do that without any real money involved until
|
||||||
@ -81,23 +81,24 @@ network, you want to join the **test** network with your node, which is fully eq
|
|||||||
the main network, but with play-Ether only.
|
the main network, but with play-Ether only.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
$ geth --testnet console
|
$ geth --goerli console
|
||||||
```
|
```
|
||||||
|
|
||||||
The `console` subcommand has the exact same meaning as above and they are equally
|
The `console` subcommand has the exact same meaning as above and they are equally
|
||||||
useful on the testnet too. Please see above for their explanations if you've skipped here.
|
useful on the testnet too. Please, see above for their explanations if you've skipped here.
|
||||||
|
|
||||||
Specifying the `--testnet` flag, however, will reconfigure your `geth` instance a bit:
|
Specifying the `--goerli` flag, however, will reconfigure your `geth` instance a bit:
|
||||||
|
|
||||||
|
* Instead of connecting the main Ethereum network, the client will connect to the Görli
|
||||||
|
test network, which uses different P2P bootnodes, different network IDs and genesis
|
||||||
|
states.
|
||||||
* Instead of using the default data directory (`~/.ethereum` on Linux for example), `geth`
|
* Instead of using the default data directory (`~/.ethereum` on Linux for example), `geth`
|
||||||
will nest itself one level deeper into a `testnet` subfolder (`~/.ethereum/testnet` on
|
will nest itself one level deeper into a `goerli` subfolder (`~/.ethereum/goerli` on
|
||||||
Linux). Note, on OSX and Linux this also means that attaching to a running testnet node
|
Linux). Note, on OSX and Linux this also means that attaching to a running testnet node
|
||||||
requires the use of a custom endpoint since `geth attach` will try to attach to a
|
requires the use of a custom endpoint since `geth attach` will try to attach to a
|
||||||
production node endpoint by default. E.g.
|
production node endpoint by default, e.g.,
|
||||||
`geth attach <datadir>/testnet/geth.ipc`. Windows users are not affected by
|
`geth attach <datadir>/goerli/geth.ipc`. Windows users are not affected by
|
||||||
this.
|
this.
|
||||||
* Instead of connecting the main Ethereum network, the client will connect to the test
|
|
||||||
network, which uses different P2P bootnodes, different network IDs and genesis states.
|
|
||||||
|
|
||||||
*Note: Although there are some internal protective measures to prevent transactions from
|
*Note: Although there are some internal protective measures to prevent transactions from
|
||||||
crossing over between the main network and test network, you should make sure to always
|
crossing over between the main network and test network, you should make sure to always
|
||||||
@ -107,17 +108,26 @@ accounts available between them.*
|
|||||||
|
|
||||||
### Full node on the Rinkeby test network
|
### Full node on the Rinkeby test network
|
||||||
|
|
||||||
The above test network is a cross-client one based on the ethash proof-of-work consensus
|
Go Ethereum also supports connecting to the older proof-of-authority based test network
|
||||||
algorithm. As such, it has certain extra overhead and is more susceptible to reorganization
|
called [*Rinkeby*](https://www.rinkeby.io) which is operated by members of the community.
|
||||||
attacks due to the network's low difficulty/security. Go Ethereum also supports connecting
|
|
||||||
to a proof-of-authority based test network called [*Rinkeby*](https://www.rinkeby.io)
|
|
||||||
(operated by members of the community). This network is lighter, more secure, but is only
|
|
||||||
supported by go-ethereum.
|
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
$ geth --rinkeby console
|
$ geth --rinkeby console
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Full node on the Ropsten test network
|
||||||
|
|
||||||
|
In addition to Görli and Rinkeby, Geth also supports the ancient Ropsten testnet. The
|
||||||
|
Ropsten test network is based on the Ethash proof-of-work consensus algorithm. As such,
|
||||||
|
it has certain extra overhead and is more susceptible to reorganization attacks due to the
|
||||||
|
network's low difficulty/security.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ geth --ropsten console
|
||||||
|
```
|
||||||
|
|
||||||
|
*Note: Older Geth configurations store the Ropsten database in the `testnet` subdirectory.*
|
||||||
|
|
||||||
### Configuration
|
### Configuration
|
||||||
|
|
||||||
As an alternative to passing the numerous flags to the `geth` binary, you can also pass a
|
As an alternative to passing the numerous flags to the `geth` binary, you can also pass a
|
||||||
|
@ -164,7 +164,7 @@ func ethFilter(args []string) (nodeFilter, error) {
|
|||||||
case "goerli":
|
case "goerli":
|
||||||
filter = forkid.NewStaticFilter(params.GoerliChainConfig, params.GoerliGenesisHash)
|
filter = forkid.NewStaticFilter(params.GoerliChainConfig, params.GoerliGenesisHash)
|
||||||
case "ropsten":
|
case "ropsten":
|
||||||
filter = forkid.NewStaticFilter(params.TestnetChainConfig, params.TestnetGenesisHash)
|
filter = forkid.NewStaticFilter(params.RopstenChainConfig, params.RopstenGenesisHash)
|
||||||
default:
|
default:
|
||||||
return nil, fmt.Errorf("unknown network %q", args[0])
|
return nil, fmt.Errorf("unknown network %q", args[0])
|
||||||
}
|
}
|
||||||
|
@ -156,8 +156,10 @@ The export-preimages command export hash preimages to an RLP encoded stream`,
|
|||||||
utils.CacheFlag,
|
utils.CacheFlag,
|
||||||
utils.SyncModeFlag,
|
utils.SyncModeFlag,
|
||||||
utils.FakePoWFlag,
|
utils.FakePoWFlag,
|
||||||
utils.TestnetFlag,
|
utils.RopstenFlag,
|
||||||
utils.RinkebyFlag,
|
utils.RinkebyFlag,
|
||||||
|
utils.GoerliFlag,
|
||||||
|
utils.LegacyTestnetFlag,
|
||||||
},
|
},
|
||||||
Category: "BLOCKCHAIN COMMANDS",
|
Category: "BLOCKCHAIN COMMANDS",
|
||||||
Description: `
|
Description: `
|
||||||
@ -203,9 +205,10 @@ Use "ethereum dump 0" to dump the genesis block.`,
|
|||||||
utils.DataDirFlag,
|
utils.DataDirFlag,
|
||||||
utils.AncientFlag,
|
utils.AncientFlag,
|
||||||
utils.CacheFlag,
|
utils.CacheFlag,
|
||||||
utils.TestnetFlag,
|
utils.RopstenFlag,
|
||||||
utils.RinkebyFlag,
|
utils.RinkebyFlag,
|
||||||
utils.GoerliFlag,
|
utils.GoerliFlag,
|
||||||
|
utils.LegacyTestnetFlag,
|
||||||
utils.SyncModeFlag,
|
utils.SyncModeFlag,
|
||||||
},
|
},
|
||||||
Category: "BLOCKCHAIN COMMANDS",
|
Category: "BLOCKCHAIN COMMANDS",
|
||||||
|
@ -123,10 +123,19 @@ func remoteConsole(ctx *cli.Context) error {
|
|||||||
path = ctx.GlobalString(utils.DataDirFlag.Name)
|
path = ctx.GlobalString(utils.DataDirFlag.Name)
|
||||||
}
|
}
|
||||||
if path != "" {
|
if path != "" {
|
||||||
if ctx.GlobalBool(utils.TestnetFlag.Name) {
|
if ctx.GlobalBool(utils.LegacyTestnetFlag.Name) || ctx.GlobalBool(utils.RopstenFlag.Name) {
|
||||||
path = filepath.Join(path, "testnet")
|
// Maintain compatibility with older Geth configurations storing the
|
||||||
|
// Ropsten database in `testnet` instead of `ropsten`.
|
||||||
|
legacyPath := filepath.Join(path, "testnet")
|
||||||
|
if _, err := os.Stat(legacyPath); !os.IsNotExist(err) {
|
||||||
|
path = legacyPath
|
||||||
|
} else {
|
||||||
|
path = filepath.Join(path, "ropsten")
|
||||||
|
}
|
||||||
} else if ctx.GlobalBool(utils.RinkebyFlag.Name) {
|
} else if ctx.GlobalBool(utils.RinkebyFlag.Name) {
|
||||||
path = filepath.Join(path, "rinkeby")
|
path = filepath.Join(path, "rinkeby")
|
||||||
|
} else if ctx.GlobalBool(utils.GoerliFlag.Name) {
|
||||||
|
path = filepath.Join(path, "goerli")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
endpoint = fmt.Sprintf("%s/geth.ipc", path)
|
endpoint = fmt.Sprintf("%s/geth.ipc", path)
|
||||||
|
@ -138,7 +138,8 @@ var (
|
|||||||
utils.DNSDiscoveryFlag,
|
utils.DNSDiscoveryFlag,
|
||||||
utils.DeveloperFlag,
|
utils.DeveloperFlag,
|
||||||
utils.DeveloperPeriodFlag,
|
utils.DeveloperPeriodFlag,
|
||||||
utils.TestnetFlag,
|
utils.LegacyTestnetFlag,
|
||||||
|
utils.RopstenFlag,
|
||||||
utils.RinkebyFlag,
|
utils.RinkebyFlag,
|
||||||
utils.GoerliFlag,
|
utils.GoerliFlag,
|
||||||
utils.VMEnableDebugFlag,
|
utils.VMEnableDebugFlag,
|
||||||
@ -258,10 +259,32 @@ func main() {
|
|||||||
// prepare manipulates memory cache allowance and setups metric system.
|
// prepare manipulates memory cache allowance and setups metric system.
|
||||||
// This function should be called before launching devp2p stack.
|
// This function should be called before launching devp2p stack.
|
||||||
func prepare(ctx *cli.Context) {
|
func prepare(ctx *cli.Context) {
|
||||||
|
// If we're running a known preset, log it for convenience.
|
||||||
|
switch {
|
||||||
|
case ctx.GlobalIsSet(utils.LegacyTestnetFlag.Name):
|
||||||
|
log.Info("Starting Geth on Ropsten testnet...")
|
||||||
|
log.Warn("The --testnet flag is ambiguous! Please specify one of --goerli, --rinkeby, or --ropsten.")
|
||||||
|
log.Warn("The generic --testnet flag is deprecated and will be removed in the future!")
|
||||||
|
|
||||||
|
case ctx.GlobalIsSet(utils.RopstenFlag.Name):
|
||||||
|
log.Info("Starting Geth on Ropsten testnet...")
|
||||||
|
|
||||||
|
case ctx.GlobalIsSet(utils.RinkebyFlag.Name):
|
||||||
|
log.Info("Starting Geth on Rinkeby testnet...")
|
||||||
|
|
||||||
|
case ctx.GlobalIsSet(utils.GoerliFlag.Name):
|
||||||
|
log.Info("Starting Geth on Görli testnet...")
|
||||||
|
|
||||||
|
case ctx.GlobalIsSet(utils.DeveloperFlag.Name):
|
||||||
|
log.Info("Starting Geth in ephemeral dev mode...")
|
||||||
|
|
||||||
|
case !ctx.GlobalIsSet(utils.NetworkIdFlag.Name):
|
||||||
|
log.Info("Starting Geth on Ethereum mainnet...")
|
||||||
|
}
|
||||||
// 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.GlobalString(utils.SyncModeFlag.Name) != "light" && !ctx.GlobalIsSet(utils.CacheFlag.Name) && !ctx.GlobalIsSet(utils.NetworkIdFlag.Name) {
|
if ctx.GlobalString(utils.SyncModeFlag.Name) != "light" && !ctx.GlobalIsSet(utils.CacheFlag.Name) && !ctx.GlobalIsSet(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.GlobalIsSet(utils.TestnetFlag.Name) && !ctx.GlobalIsSet(utils.RinkebyFlag.Name) && !ctx.GlobalIsSet(utils.GoerliFlag.Name) && !ctx.GlobalIsSet(utils.DeveloperFlag.Name) {
|
if !ctx.GlobalIsSet(utils.LegacyTestnetFlag.Name) && !ctx.GlobalIsSet(utils.RopstenFlag.Name) && !ctx.GlobalIsSet(utils.RinkebyFlag.Name) && !ctx.GlobalIsSet(utils.GoerliFlag.Name) && !ctx.GlobalIsSet(utils.DeveloperFlag.Name) {
|
||||||
// Nope, we're really on mainnet. Bump that cache up!
|
// Nope, we're really on mainnet. Bump that cache up!
|
||||||
log.Info("Bumping default cache on mainnet", "provided", ctx.GlobalInt(utils.CacheFlag.Name), "updated", 4096)
|
log.Info("Bumping default cache on mainnet", "provided", ctx.GlobalInt(utils.CacheFlag.Name), "updated", 4096)
|
||||||
ctx.GlobalSet(utils.CacheFlag.Name, strconv.Itoa(4096))
|
ctx.GlobalSet(utils.CacheFlag.Name, strconv.Itoa(4096))
|
||||||
|
@ -72,9 +72,9 @@ var AppHelpFlagGroups = []flagGroup{
|
|||||||
utils.NoUSBFlag,
|
utils.NoUSBFlag,
|
||||||
utils.SmartCardDaemonPathFlag,
|
utils.SmartCardDaemonPathFlag,
|
||||||
utils.NetworkIdFlag,
|
utils.NetworkIdFlag,
|
||||||
utils.TestnetFlag,
|
|
||||||
utils.RinkebyFlag,
|
|
||||||
utils.GoerliFlag,
|
utils.GoerliFlag,
|
||||||
|
utils.RinkebyFlag,
|
||||||
|
utils.RopstenFlag,
|
||||||
utils.SyncModeFlag,
|
utils.SyncModeFlag,
|
||||||
utils.ExitWhenSyncedFlag,
|
utils.ExitWhenSyncedFlag,
|
||||||
utils.GCModeFlag,
|
utils.GCModeFlag,
|
||||||
@ -245,6 +245,7 @@ var AppHelpFlagGroups = []flagGroup{
|
|||||||
{
|
{
|
||||||
Name: "DEPRECATED",
|
Name: "DEPRECATED",
|
||||||
Flags: []cli.Flag{
|
Flags: []cli.Flag{
|
||||||
|
utils.LegacyTestnetFlag,
|
||||||
utils.LightLegacyServFlag,
|
utils.LightLegacyServFlag,
|
||||||
utils.LightLegacyPeersFlag,
|
utils.LightLegacyPeersFlag,
|
||||||
utils.MinerLegacyThreadsFlag,
|
utils.MinerLegacyThreadsFlag,
|
||||||
|
@ -162,20 +162,24 @@ var (
|
|||||||
}
|
}
|
||||||
NetworkIdFlag = cli.Uint64Flag{
|
NetworkIdFlag = cli.Uint64Flag{
|
||||||
Name: "networkid",
|
Name: "networkid",
|
||||||
Usage: "Network identifier (integer, 1=Frontier, 2=Morden (disused), 3=Ropsten, 4=Rinkeby)",
|
Usage: "Network identifier (integer, 1=Frontier, 3=Ropsten, 4=Rinkeby, 5=Görli)",
|
||||||
Value: eth.DefaultConfig.NetworkId,
|
Value: eth.DefaultConfig.NetworkId,
|
||||||
}
|
}
|
||||||
TestnetFlag = cli.BoolFlag{
|
LegacyTestnetFlag = cli.BoolFlag{ // TODO(q9f): Remove after Ropsten is discontinued.
|
||||||
Name: "testnet",
|
Name: "testnet",
|
||||||
Usage: "Ropsten network: pre-configured proof-of-work test network",
|
Usage: "Pre-configured test network (Deprecated: Please choose one of --goerli, --rinkeby, or --ropsten.)",
|
||||||
|
}
|
||||||
|
GoerliFlag = cli.BoolFlag{
|
||||||
|
Name: "goerli",
|
||||||
|
Usage: "Görli network: pre-configured proof-of-authority test network",
|
||||||
}
|
}
|
||||||
RinkebyFlag = cli.BoolFlag{
|
RinkebyFlag = cli.BoolFlag{
|
||||||
Name: "rinkeby",
|
Name: "rinkeby",
|
||||||
Usage: "Rinkeby network: pre-configured proof-of-authority test network",
|
Usage: "Rinkeby network: pre-configured proof-of-authority test network",
|
||||||
}
|
}
|
||||||
GoerliFlag = cli.BoolFlag{
|
RopstenFlag = cli.BoolFlag{
|
||||||
Name: "goerli",
|
Name: "ropsten",
|
||||||
Usage: "Görli network: pre-configured proof-of-authority test network",
|
Usage: "Ropsten network: pre-configured proof-of-work test network",
|
||||||
}
|
}
|
||||||
DeveloperFlag = cli.BoolFlag{
|
DeveloperFlag = cli.BoolFlag{
|
||||||
Name: "dev",
|
Name: "dev",
|
||||||
@ -759,7 +763,6 @@ var (
|
|||||||
Usage: "Comma-separated InfluxDB tags (key/values) attached to all measurements",
|
Usage: "Comma-separated InfluxDB tags (key/values) attached to all measurements",
|
||||||
Value: "host=localhost",
|
Value: "host=localhost",
|
||||||
}
|
}
|
||||||
|
|
||||||
EWASMInterpreterFlag = cli.StringFlag{
|
EWASMInterpreterFlag = cli.StringFlag{
|
||||||
Name: "vm.ewasm",
|
Name: "vm.ewasm",
|
||||||
Usage: "External ewasm configuration (default = built-in interpreter)",
|
Usage: "External ewasm configuration (default = built-in interpreter)",
|
||||||
@ -774,11 +777,17 @@ var (
|
|||||||
|
|
||||||
// MakeDataDir retrieves the currently requested data directory, terminating
|
// MakeDataDir retrieves the currently requested data directory, terminating
|
||||||
// if none (or the empty string) is specified. If the node is starting a testnet,
|
// if none (or the empty string) is specified. If the node is starting a testnet,
|
||||||
// the a subdirectory of the specified datadir will be used.
|
// then a subdirectory of the specified datadir will be used.
|
||||||
func MakeDataDir(ctx *cli.Context) string {
|
func MakeDataDir(ctx *cli.Context) string {
|
||||||
if path := ctx.GlobalString(DataDirFlag.Name); path != "" {
|
if path := ctx.GlobalString(DataDirFlag.Name); path != "" {
|
||||||
if ctx.GlobalBool(TestnetFlag.Name) {
|
if ctx.GlobalBool(LegacyTestnetFlag.Name) || ctx.GlobalBool(RopstenFlag.Name) {
|
||||||
return filepath.Join(path, "testnet")
|
// Maintain compatibility with older Geth configurations storing the
|
||||||
|
// Ropsten database in `testnet` instead of `ropsten`.
|
||||||
|
legacyPath := filepath.Join(path, "testnet")
|
||||||
|
if _, err := os.Stat(legacyPath); !os.IsNotExist(err) {
|
||||||
|
return legacyPath
|
||||||
|
}
|
||||||
|
return filepath.Join(path, "ropsten")
|
||||||
}
|
}
|
||||||
if ctx.GlobalBool(RinkebyFlag.Name) {
|
if ctx.GlobalBool(RinkebyFlag.Name) {
|
||||||
return filepath.Join(path, "rinkeby")
|
return filepath.Join(path, "rinkeby")
|
||||||
@ -836,8 +845,8 @@ func setBootstrapNodes(ctx *cli.Context, cfg *p2p.Config) {
|
|||||||
} else {
|
} else {
|
||||||
urls = splitAndTrim(ctx.GlobalString(BootnodesFlag.Name))
|
urls = splitAndTrim(ctx.GlobalString(BootnodesFlag.Name))
|
||||||
}
|
}
|
||||||
case ctx.GlobalBool(TestnetFlag.Name):
|
case ctx.GlobalBool(LegacyTestnetFlag.Name) || ctx.GlobalBool(RopstenFlag.Name):
|
||||||
urls = params.TestnetBootnodes
|
urls = params.RopstenBootnodes
|
||||||
case ctx.GlobalBool(RinkebyFlag.Name):
|
case ctx.GlobalBool(RinkebyFlag.Name):
|
||||||
urls = params.RinkebyBootnodes
|
urls = params.RinkebyBootnodes
|
||||||
case ctx.GlobalBool(GoerliFlag.Name):
|
case ctx.GlobalBool(GoerliFlag.Name):
|
||||||
@ -1240,8 +1249,16 @@ func setDataDir(ctx *cli.Context, cfg *node.Config) {
|
|||||||
cfg.DataDir = ctx.GlobalString(DataDirFlag.Name)
|
cfg.DataDir = ctx.GlobalString(DataDirFlag.Name)
|
||||||
case ctx.GlobalBool(DeveloperFlag.Name):
|
case ctx.GlobalBool(DeveloperFlag.Name):
|
||||||
cfg.DataDir = "" // unless explicitly requested, use memory databases
|
cfg.DataDir = "" // unless explicitly requested, use memory databases
|
||||||
case ctx.GlobalBool(TestnetFlag.Name) && cfg.DataDir == node.DefaultDataDir():
|
case (ctx.GlobalBool(LegacyTestnetFlag.Name) || ctx.GlobalBool(RopstenFlag.Name)) && cfg.DataDir == node.DefaultDataDir():
|
||||||
cfg.DataDir = filepath.Join(node.DefaultDataDir(), "testnet")
|
// Maintain compatibility with older Geth configurations storing the
|
||||||
|
// Ropsten database in `testnet` instead of `ropsten`.
|
||||||
|
legacyPath := filepath.Join(node.DefaultDataDir(), "testnet")
|
||||||
|
if _, err := os.Stat(legacyPath); !os.IsNotExist(err) {
|
||||||
|
log.Warn("Using the deprecated `testnet` datadir. Future versions will store the Ropsten chain in `ropsten`.")
|
||||||
|
cfg.DataDir = legacyPath
|
||||||
|
} else {
|
||||||
|
cfg.DataDir = filepath.Join(node.DefaultDataDir(), "ropsten")
|
||||||
|
}
|
||||||
case ctx.GlobalBool(RinkebyFlag.Name) && cfg.DataDir == node.DefaultDataDir():
|
case ctx.GlobalBool(RinkebyFlag.Name) && cfg.DataDir == node.DefaultDataDir():
|
||||||
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():
|
||||||
@ -1441,7 +1458,7 @@ func SetShhConfig(ctx *cli.Context, stack *node.Node, cfg *whisper.Config) {
|
|||||||
// 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 *eth.Config) {
|
func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *eth.Config) {
|
||||||
// Avoid conflicting network flags
|
// Avoid conflicting network flags
|
||||||
CheckExclusive(ctx, DeveloperFlag, TestnetFlag, RinkebyFlag, GoerliFlag)
|
CheckExclusive(ctx, DeveloperFlag, LegacyTestnetFlag, RopstenFlag, RinkebyFlag, GoerliFlag)
|
||||||
CheckExclusive(ctx, LightLegacyServFlag, LightServeFlag, SyncModeFlag, "light")
|
CheckExclusive(ctx, LightLegacyServFlag, 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
|
||||||
|
|
||||||
@ -1521,12 +1538,12 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *eth.Config) {
|
|||||||
|
|
||||||
// Override any default configs for hard coded networks.
|
// Override any default configs for hard coded networks.
|
||||||
switch {
|
switch {
|
||||||
case ctx.GlobalBool(TestnetFlag.Name):
|
case ctx.GlobalBool(LegacyTestnetFlag.Name) || ctx.GlobalBool(RopstenFlag.Name):
|
||||||
if !ctx.GlobalIsSet(NetworkIdFlag.Name) {
|
if !ctx.GlobalIsSet(NetworkIdFlag.Name) {
|
||||||
cfg.NetworkId = 3
|
cfg.NetworkId = 3
|
||||||
}
|
}
|
||||||
cfg.Genesis = core.DefaultTestnetGenesisBlock()
|
cfg.Genesis = core.DefaultRopstenGenesisBlock()
|
||||||
setDNSDiscoveryDefaults(cfg, params.KnownDNSNetworks[params.TestnetGenesisHash])
|
setDNSDiscoveryDefaults(cfg, params.KnownDNSNetworks[params.RopstenGenesisHash])
|
||||||
case ctx.GlobalBool(RinkebyFlag.Name):
|
case ctx.GlobalBool(RinkebyFlag.Name):
|
||||||
if !ctx.GlobalIsSet(NetworkIdFlag.Name) {
|
if !ctx.GlobalIsSet(NetworkIdFlag.Name) {
|
||||||
cfg.NetworkId = 4
|
cfg.NetworkId = 4
|
||||||
@ -1708,8 +1725,8 @@ func MakeChainDatabase(ctx *cli.Context, stack *node.Node) ethdb.Database {
|
|||||||
func MakeGenesis(ctx *cli.Context) *core.Genesis {
|
func MakeGenesis(ctx *cli.Context) *core.Genesis {
|
||||||
var genesis *core.Genesis
|
var genesis *core.Genesis
|
||||||
switch {
|
switch {
|
||||||
case ctx.GlobalBool(TestnetFlag.Name):
|
case ctx.GlobalBool(LegacyTestnetFlag.Name) || ctx.GlobalBool(RopstenFlag.Name):
|
||||||
genesis = core.DefaultTestnetGenesisBlock()
|
genesis = core.DefaultRopstenGenesisBlock()
|
||||||
case ctx.GlobalBool(RinkebyFlag.Name):
|
case ctx.GlobalBool(RinkebyFlag.Name):
|
||||||
genesis = core.DefaultRinkebyGenesisBlock()
|
genesis = core.DefaultRinkebyGenesisBlock()
|
||||||
case ctx.GlobalBool(GoerliFlag.Name):
|
case ctx.GlobalBool(GoerliFlag.Name):
|
||||||
|
@ -65,8 +65,8 @@ func TestCreation(t *testing.T) {
|
|||||||
},
|
},
|
||||||
// Ropsten test cases
|
// Ropsten test cases
|
||||||
{
|
{
|
||||||
params.TestnetChainConfig,
|
params.RopstenChainConfig,
|
||||||
params.TestnetGenesisHash,
|
params.RopstenGenesisHash,
|
||||||
[]testcase{
|
[]testcase{
|
||||||
{0, ID{Hash: checksumToBytes(0x30c7ddbc), Next: 10}}, // Unsynced, last Frontier, Homestead and first Tangerine block
|
{0, ID{Hash: checksumToBytes(0x30c7ddbc), Next: 10}}, // Unsynced, last Frontier, Homestead and first Tangerine block
|
||||||
{9, ID{Hash: checksumToBytes(0x30c7ddbc), Next: 10}}, // Last Tangerine block
|
{9, ID{Hash: checksumToBytes(0x30c7ddbc), Next: 10}}, // Last Tangerine block
|
||||||
|
@ -246,8 +246,12 @@ func (g *Genesis) configOrDefault(ghash common.Hash) *params.ChainConfig {
|
|||||||
return g.Config
|
return g.Config
|
||||||
case ghash == params.MainnetGenesisHash:
|
case ghash == params.MainnetGenesisHash:
|
||||||
return params.MainnetChainConfig
|
return params.MainnetChainConfig
|
||||||
case ghash == params.TestnetGenesisHash:
|
case ghash == params.RopstenGenesisHash:
|
||||||
return params.TestnetChainConfig
|
return params.RopstenChainConfig
|
||||||
|
case ghash == params.RinkebyGenesisHash:
|
||||||
|
return params.RinkebyChainConfig
|
||||||
|
case ghash == params.GoerliGenesisHash:
|
||||||
|
return params.GoerliChainConfig
|
||||||
default:
|
default:
|
||||||
return params.AllEthashProtocolChanges
|
return params.AllEthashProtocolChanges
|
||||||
}
|
}
|
||||||
@ -347,15 +351,15 @@ func DefaultGenesisBlock() *Genesis {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// DefaultTestnetGenesisBlock returns the Ropsten network genesis block.
|
// DefaultRopstenGenesisBlock returns the Ropsten network genesis block.
|
||||||
func DefaultTestnetGenesisBlock() *Genesis {
|
func DefaultRopstenGenesisBlock() *Genesis {
|
||||||
return &Genesis{
|
return &Genesis{
|
||||||
Config: params.TestnetChainConfig,
|
Config: params.RopstenChainConfig,
|
||||||
Nonce: 66,
|
Nonce: 66,
|
||||||
ExtraData: hexutil.MustDecode("0x3535353535353535353535353535353535353535353535353535353535353535"),
|
ExtraData: hexutil.MustDecode("0x3535353535353535353535353535353535353535353535353535353535353535"),
|
||||||
GasLimit: 16777216,
|
GasLimit: 16777216,
|
||||||
Difficulty: big.NewInt(1048576),
|
Difficulty: big.NewInt(1048576),
|
||||||
Alloc: decodePrealloc(testnetAllocData),
|
Alloc: decodePrealloc(ropstenAllocData),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
File diff suppressed because one or more lines are too long
@ -35,9 +35,9 @@ func TestDefaultGenesisBlock(t *testing.T) {
|
|||||||
if block.Hash() != params.MainnetGenesisHash {
|
if block.Hash() != params.MainnetGenesisHash {
|
||||||
t.Errorf("wrong mainnet genesis hash, got %v, want %v", block.Hash(), params.MainnetGenesisHash)
|
t.Errorf("wrong mainnet genesis hash, got %v, want %v", block.Hash(), params.MainnetGenesisHash)
|
||||||
}
|
}
|
||||||
block = DefaultTestnetGenesisBlock().ToBlock(nil)
|
block = DefaultRopstenGenesisBlock().ToBlock(nil)
|
||||||
if block.Hash() != params.TestnetGenesisHash {
|
if block.Hash() != params.RopstenGenesisHash {
|
||||||
t.Errorf("wrong testnet genesis hash, got %v, want %v", block.Hash(), params.TestnetGenesisHash)
|
t.Errorf("wrong ropsten genesis hash, got %v, want %v", block.Hash(), params.RopstenGenesisHash)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -95,14 +95,14 @@ func TestSetupGenesis(t *testing.T) {
|
|||||||
wantConfig: customg.Config,
|
wantConfig: customg.Config,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "custom block in DB, genesis == testnet",
|
name: "custom block in DB, genesis == ropsten",
|
||||||
fn: func(db ethdb.Database) (*params.ChainConfig, common.Hash, error) {
|
fn: func(db ethdb.Database) (*params.ChainConfig, common.Hash, error) {
|
||||||
customg.MustCommit(db)
|
customg.MustCommit(db)
|
||||||
return SetupGenesisBlock(db, DefaultTestnetGenesisBlock())
|
return SetupGenesisBlock(db, DefaultRopstenGenesisBlock())
|
||||||
},
|
},
|
||||||
wantErr: &GenesisMismatchError{Stored: customghash, New: params.TestnetGenesisHash},
|
wantErr: &GenesisMismatchError{Stored: customghash, New: params.RopstenGenesisHash},
|
||||||
wantHash: params.TestnetGenesisHash,
|
wantHash: params.RopstenGenesisHash,
|
||||||
wantConfig: params.TestnetChainConfig,
|
wantConfig: params.RopstenChainConfig,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "compatible config in DB",
|
name: "compatible config in DB",
|
||||||
|
@ -133,7 +133,7 @@ func main() {
|
|||||||
// makeGenesis creates a custom Ethash genesis block based on some pre-defined
|
// makeGenesis creates a custom Ethash genesis block based on some pre-defined
|
||||||
// faucet accounts.
|
// faucet accounts.
|
||||||
func makeGenesis(faucets []*ecdsa.PrivateKey) *core.Genesis {
|
func makeGenesis(faucets []*ecdsa.PrivateKey) *core.Genesis {
|
||||||
genesis := core.DefaultTestnetGenesisBlock()
|
genesis := core.DefaultRopstenGenesisBlock()
|
||||||
genesis.Difficulty = params.MinimumDifficulty
|
genesis.Difficulty = params.MinimumDifficulty
|
||||||
genesis.GasLimit = 25000000
|
genesis.GasLimit = 25000000
|
||||||
|
|
||||||
|
@ -146,13 +146,27 @@ func NewNode(datadir string, config *NodeConfig) (stack *Node, _ error) {
|
|||||||
if err := json.Unmarshal([]byte(config.EthereumGenesis), genesis); err != nil {
|
if err := json.Unmarshal([]byte(config.EthereumGenesis), genesis); err != nil {
|
||||||
return nil, fmt.Errorf("invalid genesis spec: %v", err)
|
return nil, fmt.Errorf("invalid genesis spec: %v", err)
|
||||||
}
|
}
|
||||||
// If we have the testnet, hard code the chain configs too
|
// If we have the Ropsten testnet, hard code the chain configs too
|
||||||
if config.EthereumGenesis == TestnetGenesis() {
|
if config.EthereumGenesis == RopstenGenesis() {
|
||||||
genesis.Config = params.TestnetChainConfig
|
genesis.Config = params.RopstenChainConfig
|
||||||
if config.EthereumNetworkID == 1 {
|
if config.EthereumNetworkID == 1 {
|
||||||
config.EthereumNetworkID = 3
|
config.EthereumNetworkID = 3
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// If we have the Rinkeby testnet, hard code the chain configs too
|
||||||
|
if config.EthereumGenesis == RinkebyGenesis() {
|
||||||
|
genesis.Config = params.RinkebyChainConfig
|
||||||
|
if config.EthereumNetworkID == 1 {
|
||||||
|
config.EthereumNetworkID = 4
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// If we have the Goerli testnet, hard code the chain configs too
|
||||||
|
if config.EthereumGenesis == GoerliGenesis() {
|
||||||
|
genesis.Config = params.GoerliChainConfig
|
||||||
|
if config.EthereumNetworkID == 1 {
|
||||||
|
config.EthereumNetworkID = 5
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// Register the Ethereum protocol if requested
|
// Register the Ethereum protocol if requested
|
||||||
if config.EthereumEnabled {
|
if config.EthereumEnabled {
|
||||||
|
@ -32,9 +32,9 @@ func MainnetGenesis() string {
|
|||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestnetGenesis returns the JSON spec to use for the Ethereum test network.
|
// RopstenGenesis returns the JSON spec to use for the Ropsten test network.
|
||||||
func TestnetGenesis() string {
|
func RopstenGenesis() string {
|
||||||
enc, err := json.Marshal(core.DefaultTestnetGenesisBlock())
|
enc, err := json.Marshal(core.DefaultRopstenGenesisBlock())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
@ -50,6 +50,15 @@ func RinkebyGenesis() string {
|
|||||||
return string(enc)
|
return string(enc)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GoerliGenesis returns the JSON spec to use for the Goerli test network
|
||||||
|
func GoerliGenesis() string {
|
||||||
|
enc, err := json.Marshal(core.DefaultGoerliGenesisBlock())
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return string(enc)
|
||||||
|
}
|
||||||
|
|
||||||
// FoundationBootnodes returns the enode URLs of the P2P bootstrap nodes operated
|
// FoundationBootnodes returns the enode URLs of the P2P bootstrap nodes operated
|
||||||
// by the foundation running the V5 discovery protocol.
|
// by the foundation running the V5 discovery protocol.
|
||||||
func FoundationBootnodes() *Enodes {
|
func FoundationBootnodes() *Enodes {
|
||||||
|
@ -32,9 +32,9 @@ var MainnetBootnodes = []string{
|
|||||||
"enode://5d6d7cd20d6da4bb83a1d28cadb5d409b64edf314c0335df658c1a54e32c7c4a7ab7823d57c39b6a757556e68ff1df17c748b698544a55cb488b52479a92b60f@104.42.217.25:30303", // bootnode-azure-westus-001
|
"enode://5d6d7cd20d6da4bb83a1d28cadb5d409b64edf314c0335df658c1a54e32c7c4a7ab7823d57c39b6a757556e68ff1df17c748b698544a55cb488b52479a92b60f@104.42.217.25:30303", // bootnode-azure-westus-001
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestnetBootnodes are the enode URLs of the P2P bootstrap nodes running on the
|
// RopstenBootnodes are the enode URLs of the P2P bootstrap nodes running on the
|
||||||
// Ropsten test network.
|
// Ropsten test network.
|
||||||
var TestnetBootnodes = []string{
|
var RopstenBootnodes = []string{
|
||||||
"enode://30b7ab30a01c124a6cceca36863ece12c4f5fa68e3ba9b0b51407ccc002eeed3b3102d20a88f1c1d3c3154e2449317b8ef95090e77b312d5cc39354f86d5d606@52.176.7.10:30303", // US-Azure geth
|
"enode://30b7ab30a01c124a6cceca36863ece12c4f5fa68e3ba9b0b51407ccc002eeed3b3102d20a88f1c1d3c3154e2449317b8ef95090e77b312d5cc39354f86d5d606@52.176.7.10:30303", // US-Azure geth
|
||||||
"enode://865a63255b3bb68023b6bffd5095118fcc13e79dcf014fe4e47e065c350c7cc72af2e53eff895f11ba1bbb6a2b33271c1116ee870f266618eadfc2e78aa7349c@52.176.100.77:30303", // US-Azure parity
|
"enode://865a63255b3bb68023b6bffd5095118fcc13e79dcf014fe4e47e065c350c7cc72af2e53eff895f11ba1bbb6a2b33271c1116ee870f266618eadfc2e78aa7349c@52.176.100.77:30303", // US-Azure parity
|
||||||
"enode://6332792c4a00e3e4ee0926ed89e0d27ef985424d97b6a45bf0f23e51f0dcb5e66b875777506458aea7af6f9e4ffb69f43f3778ee73c81ed9d34c51c4b16b0b0f@52.232.243.152:30303", // Parity
|
"enode://6332792c4a00e3e4ee0926ed89e0d27ef985424d97b6a45bf0f23e51f0dcb5e66b875777506458aea7af6f9e4ffb69f43f3778ee73c81ed9d34c51c4b16b0b0f@52.232.243.152:30303", // Parity
|
||||||
@ -78,7 +78,7 @@ const dnsPrefix = "enrtree://AKA3AM6LPBYEUDMVNU3BSVQJ5AD45Y7YPOHJLEF6W26QOE4VTUD
|
|||||||
// See https://github.com/ethereum/discv4-dns-lists for more information.
|
// See https://github.com/ethereum/discv4-dns-lists for more information.
|
||||||
var KnownDNSNetworks = map[common.Hash]string{
|
var KnownDNSNetworks = map[common.Hash]string{
|
||||||
MainnetGenesisHash: dnsPrefix + "all.mainnet.ethdisco.net",
|
MainnetGenesisHash: dnsPrefix + "all.mainnet.ethdisco.net",
|
||||||
TestnetGenesisHash: dnsPrefix + "all.ropsten.ethdisco.net",
|
RopstenGenesisHash: dnsPrefix + "all.ropsten.ethdisco.net",
|
||||||
RinkebyGenesisHash: dnsPrefix + "all.rinkeby.ethdisco.net",
|
RinkebyGenesisHash: dnsPrefix + "all.rinkeby.ethdisco.net",
|
||||||
GoerliGenesisHash: dnsPrefix + "all.goerli.ethdisco.net",
|
GoerliGenesisHash: dnsPrefix + "all.goerli.ethdisco.net",
|
||||||
}
|
}
|
||||||
|
@ -28,7 +28,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")
|
||||||
TestnetGenesisHash = common.HexToHash("0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d")
|
RopstenGenesisHash = common.HexToHash("0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d")
|
||||||
RinkebyGenesisHash = common.HexToHash("0x6341fd3daf94b748c72ced5a5b26028f2474f5f00d824504e4fa37a75767e177")
|
RinkebyGenesisHash = common.HexToHash("0x6341fd3daf94b748c72ced5a5b26028f2474f5f00d824504e4fa37a75767e177")
|
||||||
GoerliGenesisHash = common.HexToHash("0xbf7e331f7f7c1dd2e05159666b3bf8bc7a8a3a9eb1d518969eab529dd9b88c1a")
|
GoerliGenesisHash = common.HexToHash("0xbf7e331f7f7c1dd2e05159666b3bf8bc7a8a3a9eb1d518969eab529dd9b88c1a")
|
||||||
)
|
)
|
||||||
@ -37,7 +37,7 @@ var (
|
|||||||
// the chain it belongs to.
|
// the chain it belongs to.
|
||||||
var TrustedCheckpoints = map[common.Hash]*TrustedCheckpoint{
|
var TrustedCheckpoints = map[common.Hash]*TrustedCheckpoint{
|
||||||
MainnetGenesisHash: MainnetTrustedCheckpoint,
|
MainnetGenesisHash: MainnetTrustedCheckpoint,
|
||||||
TestnetGenesisHash: TestnetTrustedCheckpoint,
|
RopstenGenesisHash: RopstenTrustedCheckpoint,
|
||||||
RinkebyGenesisHash: RinkebyTrustedCheckpoint,
|
RinkebyGenesisHash: RinkebyTrustedCheckpoint,
|
||||||
GoerliGenesisHash: GoerliTrustedCheckpoint,
|
GoerliGenesisHash: GoerliTrustedCheckpoint,
|
||||||
}
|
}
|
||||||
@ -46,7 +46,7 @@ var TrustedCheckpoints = map[common.Hash]*TrustedCheckpoint{
|
|||||||
// the chain it belongs to.
|
// the chain it belongs to.
|
||||||
var CheckpointOracles = map[common.Hash]*CheckpointOracleConfig{
|
var CheckpointOracles = map[common.Hash]*CheckpointOracleConfig{
|
||||||
MainnetGenesisHash: MainnetCheckpointOracle,
|
MainnetGenesisHash: MainnetCheckpointOracle,
|
||||||
TestnetGenesisHash: TestnetCheckpointOracle,
|
RopstenGenesisHash: RopstenCheckpointOracle,
|
||||||
RinkebyGenesisHash: RinkebyCheckpointOracle,
|
RinkebyGenesisHash: RinkebyCheckpointOracle,
|
||||||
GoerliGenesisHash: GoerliCheckpointOracle,
|
GoerliGenesisHash: GoerliCheckpointOracle,
|
||||||
}
|
}
|
||||||
@ -91,8 +91,8 @@ var (
|
|||||||
Threshold: 2,
|
Threshold: 2,
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestnetChainConfig contains the chain parameters to run a node on the Ropsten test network.
|
// RopstenChainConfig contains the chain parameters to run a node on the Ropsten test network.
|
||||||
TestnetChainConfig = &ChainConfig{
|
RopstenChainConfig = &ChainConfig{
|
||||||
ChainID: big.NewInt(3),
|
ChainID: big.NewInt(3),
|
||||||
HomesteadBlock: big.NewInt(0),
|
HomesteadBlock: big.NewInt(0),
|
||||||
DAOForkBlock: nil,
|
DAOForkBlock: nil,
|
||||||
@ -109,16 +109,16 @@ var (
|
|||||||
Ethash: new(EthashConfig),
|
Ethash: new(EthashConfig),
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestnetTrustedCheckpoint contains the light client trusted checkpoint for the Ropsten test network.
|
// RopstenTrustedCheckpoint contains the light client trusted checkpoint for the Ropsten test network.
|
||||||
TestnetTrustedCheckpoint = &TrustedCheckpoint{
|
RopstenTrustedCheckpoint = &TrustedCheckpoint{
|
||||||
SectionIndex: 223,
|
SectionIndex: 223,
|
||||||
SectionHead: common.HexToHash("0x9aa51ca383f5075f816e0b8ce7125075cd562b918839ee286c03770722147661"),
|
SectionHead: common.HexToHash("0x9aa51ca383f5075f816e0b8ce7125075cd562b918839ee286c03770722147661"),
|
||||||
CHTRoot: common.HexToHash("0x755c6a5931b7bd36e55e47f3f1e81fa79c930ae15c55682d3a85931eedaf8cf2"),
|
CHTRoot: common.HexToHash("0x755c6a5931b7bd36e55e47f3f1e81fa79c930ae15c55682d3a85931eedaf8cf2"),
|
||||||
BloomRoot: common.HexToHash("0xabc37762d11b29dc7dde11b89846e2308ba681eeb015b6a202ef5e242bc107e8"),
|
BloomRoot: common.HexToHash("0xabc37762d11b29dc7dde11b89846e2308ba681eeb015b6a202ef5e242bc107e8"),
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestnetCheckpointOracle contains a set of configs for the Ropsten test network oracle.
|
// RopstenCheckpointOracle contains a set of configs for the Ropsten test network oracle.
|
||||||
TestnetCheckpointOracle = &CheckpointOracleConfig{
|
RopstenCheckpointOracle = &CheckpointOracleConfig{
|
||||||
Address: common.HexToAddress("0xEF79475013f154E6A65b54cB2742867791bf0B84"),
|
Address: common.HexToAddress("0xEF79475013f154E6A65b54cB2742867791bf0B84"),
|
||||||
Signers: []common.Address{
|
Signers: []common.Address{
|
||||||
common.HexToAddress("0x32162F3581E88a5f62e8A61892B42C46E2c18f7b"), // Peter
|
common.HexToAddress("0x32162F3581E88a5f62e8A61892B42C46E2c18f7b"), // Peter
|
||||||
|
@ -55,8 +55,8 @@ func TestDifficulty(t *testing.T) {
|
|||||||
dt.skipLoad("difficultyMorden\\.json")
|
dt.skipLoad("difficultyMorden\\.json")
|
||||||
dt.skipLoad("difficultyOlimpic\\.json")
|
dt.skipLoad("difficultyOlimpic\\.json")
|
||||||
|
|
||||||
dt.config("Ropsten", *params.TestnetChainConfig)
|
dt.config("Ropsten", *params.RopstenChainConfig)
|
||||||
dt.config("Morden", *params.TestnetChainConfig)
|
dt.config("Morden", *params.RopstenChainConfig)
|
||||||
dt.config("Frontier", params.ChainConfig{})
|
dt.config("Frontier", params.ChainConfig{})
|
||||||
|
|
||||||
dt.config("Homestead", params.ChainConfig{
|
dt.config("Homestead", params.ChainConfig{
|
||||||
@ -67,7 +67,7 @@ func TestDifficulty(t *testing.T) {
|
|||||||
ByzantiumBlock: big.NewInt(0),
|
ByzantiumBlock: big.NewInt(0),
|
||||||
})
|
})
|
||||||
|
|
||||||
dt.config("Frontier", *params.TestnetChainConfig)
|
dt.config("Frontier", *params.RopstenChainConfig)
|
||||||
dt.config("MainNetwork", mainnetChainConfig)
|
dt.config("MainNetwork", mainnetChainConfig)
|
||||||
dt.config("CustomMainNetwork", mainnetChainConfig)
|
dt.config("CustomMainNetwork", mainnetChainConfig)
|
||||||
dt.config("Constantinople", params.ChainConfig{
|
dt.config("Constantinople", params.ChainConfig{
|
||||||
|
Loading…
Reference in New Issue
Block a user