|
|
@@ -337,10 +337,10 @@ var (
|
|
|
Usage: "Network listening port",
|
|
|
Value: 30303,
|
|
|
}
|
|
|
- BootnodesFlag = cli.StringFlag{
|
|
|
+ BootnodesFlag = cli.StringSliceFlag{
|
|
|
Name: "bootnodes",
|
|
|
Usage: "Comma separated enode URLs for P2P discovery bootstrap",
|
|
|
- Value: "",
|
|
|
+ Value: nil,
|
|
|
}
|
|
|
NodeKeyFileFlag = cli.StringFlag{
|
|
|
Name: "nodekey",
|
|
|
@@ -485,17 +485,15 @@ func makeNodeUserIdent(ctx *cli.Context) string {
|
|
|
// MakeBootstrapNodes creates a list of bootstrap nodes from the command line
|
|
|
// flags, reverting to pre-configured ones if none have been specified.
|
|
|
func MakeBootstrapNodes(ctx *cli.Context) []*discover.Node {
|
|
|
- // Return pre-configured nodes if none were manually requested
|
|
|
- if !ctx.GlobalIsSet(BootnodesFlag.Name) {
|
|
|
- if ctx.GlobalBool(TestNetFlag.Name) {
|
|
|
- return params.TestnetBootnodes
|
|
|
- }
|
|
|
- return params.MainnetBootnodes
|
|
|
+ urls := params.MainnetBootnodes
|
|
|
+ if ctx.GlobalIsSet(BootnodesFlag.Name) {
|
|
|
+ urls = ctx.GlobalStringSlice(BootnodesFlag.Name)
|
|
|
+ } else if ctx.GlobalBool(TestNetFlag.Name) {
|
|
|
+ urls = params.TestnetBootnodes
|
|
|
}
|
|
|
- // Otherwise parse and use the CLI bootstrap nodes
|
|
|
- bootnodes := []*discover.Node{}
|
|
|
|
|
|
- for _, url := range strings.Split(ctx.GlobalString(BootnodesFlag.Name), ",") {
|
|
|
+ bootnodes := make([]*discover.Node, 0, len(urls))
|
|
|
+ for _, url := range urls {
|
|
|
node, err := discover.ParseNode(url)
|
|
|
if err != nil {
|
|
|
glog.V(logger.Error).Infof("Bootstrap URL %s: %v\n", url, err)
|
|
|
@@ -509,14 +507,13 @@ func MakeBootstrapNodes(ctx *cli.Context) []*discover.Node {
|
|
|
// MakeBootstrapNodesV5 creates a list of bootstrap nodes from the command line
|
|
|
// flags, reverting to pre-configured ones if none have been specified.
|
|
|
func MakeBootstrapNodesV5(ctx *cli.Context) []*discv5.Node {
|
|
|
- // Return pre-configured nodes if none were manually requested
|
|
|
- if !ctx.GlobalIsSet(BootnodesFlag.Name) {
|
|
|
- return params.DiscoveryV5Bootnodes
|
|
|
+ urls := params.DiscoveryV5Bootnodes
|
|
|
+ if ctx.GlobalIsSet(BootnodesFlag.Name) {
|
|
|
+ urls = ctx.GlobalStringSlice(BootnodesFlag.Name)
|
|
|
}
|
|
|
- // Otherwise parse and use the CLI bootstrap nodes
|
|
|
- bootnodes := []*discv5.Node{}
|
|
|
|
|
|
- for _, url := range strings.Split(ctx.GlobalString(BootnodesFlag.Name), ",") {
|
|
|
+ bootnodes := make([]*discv5.Node, 0, len(urls))
|
|
|
+ for _, url := range urls {
|
|
|
node, err := discv5.ParseNode(url)
|
|
|
if err != nil {
|
|
|
glog.V(logger.Error).Infof("Bootstrap URL %s: %v\n", url, err)
|