package accounts import ( "io" "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/client" "github.com/urfave/cli/v2" ) func accountsExit(c *cli.Context, r io.Reader) 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), } // Get full set of public keys from the keymanager. validatingPublicKeys, err := km.FetchValidatingPublicKeys(c.Context) if err != nil { return err } if len(validatingPublicKeys) == 0 { return errors.New("wallet is empty, no accounts to delete") } // Filter keys either from CLI flag or from interactive session. rawPubKey, formattedPubKeys, err := accounts.FilterExitAccountsFromUserInput(c, r, validatingPublicKeys) if err != nil { return errors.Wrap(err, "could not filter public keys for deletion") } opts = append(opts, accounts.WithRawPubKeys(rawPubKey)) opts = append(opts, accounts.WithFormattedPubKeys(formattedPubKeys)) acc, err := accounts.NewCLIManager(opts...) if err != nil { return err } return acc.Exit(c.Context) }