package accounts import ( "strings" "github.com/pkg/errors" "github.com/prysmaticlabs/prysm/cmd" "github.com/prysmaticlabs/prysm/cmd/validator/flags" "github.com/prysmaticlabs/prysm/validator/accounts" "github.com/prysmaticlabs/prysm/validator/accounts/iface" "github.com/prysmaticlabs/prysm/validator/accounts/wallet" "github.com/prysmaticlabs/prysm/validator/client" "github.com/prysmaticlabs/prysm/validator/keymanager" "github.com/urfave/cli/v2" ) func accountsList(c *cli.Context) error { w, km, err := walletWithKeymanager(c) if err != nil { return err } dialOpts := client.ConstructDialOptions( c.Int(cmd.GrpcMaxCallRecvMsgSizeFlag.Name), c.String(flags.CertFlag.Name), c.Uint(flags.GrpcRetriesFlag.Name), c.Duration(flags.GrpcRetryDelayFlag.Name), ) grpcHeaders := strings.Split(c.String(flags.GrpcHeadersFlag.Name), ",") opts := []accounts.Option{ accounts.WithWallet(w), accounts.WithKeymanager(km), accounts.WithGRPCDialOpts(dialOpts), accounts.WithBeaconRPCProvider(c.String(flags.BeaconRPCProviderFlag.Name)), accounts.WithGRPCHeaders(grpcHeaders), } if c.IsSet(flags.ShowDepositDataFlag.Name) { opts = append(opts, accounts.WithShowDepositData()) } if c.IsSet(flags.ShowPrivateKeysFlag.Name) { opts = append(opts, accounts.WithShowPrivateKeys()) } if c.IsSet(flags.ListValidatorIndices.Name) { opts = append(opts, accounts.WithListValidatorIndices()) } acc, err := accounts.NewCLIManager(opts...) if err != nil { return err } return acc.List( c.Context, ) } func walletWithKeymanager(c *cli.Context) (*wallet.Wallet, keymanager.IKeymanager, error) { w, err := wallet.OpenWalletOrElseCli(c, func(cliCtx *cli.Context) (*wallet.Wallet, error) { return nil, wallet.ErrNoWalletFound }) if err != nil { return nil, nil, errors.Wrap(err, "could not open wallet") } // TODO(#9883) - Remove this when we have a better way to handle this. this is fine. // genesis root is not set here which is used for sign function, but fetch keys should be fine. km, err := w.InitializeKeymanager(c.Context, iface.InitKeymanagerConfig{ListenForChanges: false}) if err != nil && strings.Contains(err.Error(), keymanager.IncorrectPasswordErrMsg) { return nil, nil, errors.New("wrong wallet password entered") } if err != nil { return nil, nil, errors.Wrap(err, accounts.ErrCouldNotInitializeKeymanager) } return w, km, nil }