diff --git a/validator/flags/BUILD.bazel b/validator/flags/BUILD.bazel index 40044d6eb1..6e79b94f3b 100644 --- a/validator/flags/BUILD.bazel +++ b/validator/flags/BUILD.bazel @@ -2,7 +2,10 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library") go_library( name = "go_default_library", - srcs = ["flags.go"], + srcs = [ + "flags.go", + "interop.go", + ], importpath = "github.com/prysmaticlabs/prysm/validator/flags", visibility = ["//validator:__subpackages__"], deps = ["@in_gopkg_urfave_cli_v2//:go_default_library"], diff --git a/validator/flags/flags.go b/validator/flags/flags.go index f9f23fb2b6..c0716ccde2 100644 --- a/validator/flags/flags.go +++ b/validator/flags/flags.go @@ -21,6 +21,13 @@ var ( Name: "tls-cert", Usage: "Certificate for secure gRPC. Pass this and the tls-key flag in order to use gRPC securely.", } + // UnencryptedKeysFlag specifies a file path of a JSON file of unencrypted validator keys; this should only + // be used for test networks. + UnencryptedKeysFlag = &cli.StringFlag{ + Name: "unencrypted-keys", + Usage: "Filepath to a JSON file of unencrypted validator keys for launching the validator client on test networks", + Value: "", + } // KeyManager specifies the key manager to use. KeyManager = &cli.StringFlag{ Name: "keymanager", diff --git a/validator/flags/interop.go b/validator/flags/interop.go new file mode 100644 index 0000000000..a904db1eb9 --- /dev/null +++ b/validator/flags/interop.go @@ -0,0 +1,21 @@ +package flags + +import ( + "gopkg.in/urfave/cli.v2" +) + +// Flags defined for interoperability testing. +var ( + InteropStartIndex = &cli.Uint64Flag{ + Name: "interop-start-index", + Usage: "The start index to deterministically generate validator keys when used in combination with " + + "--interop-num-validators. Example: --interop-start-index=5 --interop-num-validators=3 would generate " + + "keys from index 5 to 7.", + } + InteropNumValidators = &cli.Uint64Flag{ + Name: "interop-num-validators", + Usage: "The number of validators to deterministically generate when used in combination with " + + "--interop-num-validators. Example: --interop-start-index=5 --interop-num-validators=3 would generate " + + "keys from index 5 to 7.", + } +) diff --git a/validator/main.go b/validator/main.go index 8369f23a57..99fe64f87b 100644 --- a/validator/main.go +++ b/validator/main.go @@ -38,6 +38,9 @@ var appFlags = []cli.Flag{ flags.CertFlag, flags.GraffitiFlag, flags.DisablePenaltyRewardLogFlag, + flags.UnencryptedKeysFlag, + flags.InteropStartIndex, + flags.InteropNumValidators, flags.GrpcMaxCallRecvMsgSizeFlag, flags.GrpcRetriesFlag, flags.GrpcHeadersFlag, diff --git a/validator/node/node.go b/validator/node/node.go index 18570f72f4..d77dea9009 100644 --- a/validator/node/node.go +++ b/validator/node/node.go @@ -198,9 +198,6 @@ func (s *ValidatorClient) registerClientService(ctx *cli.Context, keyManager key // selectKeyManager selects the key manager depending on the options provided by the user. func selectKeyManager(ctx *cli.Context) (keymanager.KeyManager, error) { manager := strings.ToLower(ctx.String(flags.KeyManager.Name)) - if manager == "" { - return nil, fmt.Errorf("please supply a keymanager with --keymanager") - } opts := ctx.String(flags.KeyManagerOpts.Name) if opts == "" { opts = "{}" @@ -212,6 +209,23 @@ func selectKeyManager(ctx *cli.Context) (keymanager.KeyManager, error) { opts = string(fileopts) } + if manager == "" { + // Attempt to work out keymanager from deprecated vars. + if unencryptedKeys := ctx.String(flags.UnencryptedKeysFlag.Name); unencryptedKeys != "" { + manager = "unencrypted" + opts = fmt.Sprintf(`{"path":%q}`, unencryptedKeys) + log.Warn(fmt.Sprintf("--unencrypted-keys flag is deprecated. Please use --keymanager=unencrypted --keymanageropts='%s'", opts)) + } else if numValidatorKeys := ctx.Uint64(flags.InteropNumValidators.Name); numValidatorKeys > 0 { + manager = "interop" + opts = fmt.Sprintf(`{"keys":%d,"offset":%d}`, numValidatorKeys, ctx.Uint64(flags.InteropStartIndex.Name)) + log.Warn(fmt.Sprintf("--interop-num-validators and --interop-start-index flags are deprecated. Please use --keymanager=interop --keymanageropts='%s'", opts)) + } + } + + if manager == "" { + return nil, fmt.Errorf("please supply a keymanager with --keymanager") + } + var km keymanager.KeyManager var help string var err error diff --git a/validator/usage.go b/validator/usage.go index 277f980a5f..54dd02ca55 100644 --- a/validator/usage.go +++ b/validator/usage.go @@ -78,6 +78,7 @@ var appHelpFlagGroups = []flagGroup{ flags.KeyManager, flags.KeyManagerOpts, flags.DisablePenaltyRewardLogFlag, + flags.UnencryptedKeysFlag, flags.GraffitiFlag, flags.GrpcMaxCallRecvMsgSizeFlag, flags.GrpcRetriesFlag, @@ -89,6 +90,13 @@ var appHelpFlagGroups = []flagGroup{ Name: "features", Flags: featureconfig.ActiveFlags(featureconfig.ValidatorFlags), }, + { + Name: "interop", + Flags: []cli.Flag{ + flags.InteropNumValidators, + flags.InteropStartIndex, + }, + }, } func init() {