From 8565f7055a030b80385794ec30d694e004fdcc68 Mon Sep 17 00:00:00 2001 From: arnaud Date: Tue, 10 Oct 2023 13:38:41 +0200 Subject: [PATCH] geth: add staticnodes option to specify staticNodes from the command Line --- cmd/geth/main.go | 1 + cmd/utils/flags.go | 31 +++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/cmd/geth/main.go b/cmd/geth/main.go index 4b26de05a9..5e399dc19d 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -59,6 +59,7 @@ var ( utils.UnlockedAccountFlag, utils.PasswordFileFlag, utils.BootnodesFlag, + utils.StaticPeers, utils.MinFreeDiskSpaceFlag, utils.KeyStoreDirFlag, utils.ExternalSignerFlag, diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 9743a7b9ca..3e5afd9107 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -754,6 +754,12 @@ var ( Value: 30303, Category: flags.NetworkingCategory, } + StaticPeers = &cli.StringFlag{ + Name: "staticpeers", + Usage: "Comma separated enode URLs of static peers", + Value: "", + Category: flags.NetworkingCategory, + } BootnodesFlag = &cli.StringFlag{ Name: "bootnodes", Usage: "Comma separated enode URLs for P2P discovery bootstrap", @@ -1093,6 +1099,30 @@ func setBootstrapNodesV5(ctx *cli.Context, cfg *p2p.Config) { } } +//setStatic Nodes create a list of static nodes from the command line +// flags, left empty if none have been specified +func setStaticNodes(ctx *cli.Context, cfg *p2p.Config){ + var staticNodes [] string + switch { + case ctx.IsSet(StaticPeers.Name): + staticNodes = SplitAndTrim(ctx.String(StaticPeers.Name)) + case cfg.StaticNodes != nil: + return + } + + cfg.StaticNodes = make([]*enode.Node, 0, len(staticNodes)) + for _, url := range staticNodes { + if url != ""{ + node, err := enode.Parse(enode.ValidSchemes, url) + if err != nil { + log.Error("StaticNode URL invalid", "enode", url, "err", err) + continue + } + cfg.StaticNodes = append(cfg.StaticNodes, node) + } + } +} + // setListenAddress creates TCP/UDP listening address strings from set command // line flags func setListenAddress(ctx *cli.Context, cfg *p2p.Config) { @@ -1345,6 +1375,7 @@ func SetP2PConfig(ctx *cli.Context, cfg *p2p.Config) { setListenAddress(ctx, cfg) setBootstrapNodes(ctx, cfg) setBootstrapNodesV5(ctx, cfg) + setStaticNodes(ctx, cfg) lightClient := ctx.String(SyncModeFlag.Name) == "light" lightServer := (ctx.Int(LightServeFlag.Name) != 0)