accounts

package
v1.0.0-beta.0.rc Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 20, 2020 License: GPL-3.0 Imports: 43 Imported by: 17

Documentation

Overview

Package v2 defines a new model for accounts management in Prysm, using best practices for user security, UX, and extensibility via different wallet types including HD wallets, imported (non-HD) wallets, and remote-signing capable configurations. This model is compliant with the EIP-2333, EIP-2334, and EIP-2335 standards for key management in eth2.

Index

Constants

This section is empty.

Variables

View Source
var AccountCommands = &cli.Command{
	Name:     "accounts",
	Category: "accounts",
	Usage:    "defines commands for interacting with eth2 validator accounts (work in progress)",
	Subcommands: []*cli.Command{
		{
			Name: "create",
			Description: `creates a new validator account for eth2. If no wallet exists at the given wallet path, creates a new wallet for a user based on
specified input, capable of creating a imported, derived, or remote wallet.
this command outputs a deposit data string which is required to become a validator in eth2.`,
			Flags: cmd.WrapFlags([]cli.Flag{
				flags.WalletDirFlag,
				flags.WalletPasswordFileFlag,
				flags.NumAccountsFlag,
				featureconfig.AltonaTestnet,
				featureconfig.OnyxTestnet,
				featureconfig.MedallaTestnet,
				featureconfig.SpadinaTestnet,
				featureconfig.ZinkenTestnet,
			}),
			Before: func(cliCtx *cli.Context) error {
				return cmd.LoadFlagsFromConfig(cliCtx, cliCtx.Command.Flags)
			},
			Action: func(cliCtx *cli.Context) error {
				featureconfig.ConfigureValidator(cliCtx)
				if err := CreateAccountCli(cliCtx); err != nil {
					log.Fatalf("Could not create new account: %v", err)
				}
				return nil
			},
		},
		{
			Name:        "delete",
			Description: `deletes the selected accounts from a users wallet.`,
			Flags: cmd.WrapFlags([]cli.Flag{
				flags.WalletDirFlag,
				flags.WalletPasswordFileFlag,
				flags.DeletePublicKeysFlag,
				featureconfig.AltonaTestnet,
				featureconfig.OnyxTestnet,
				featureconfig.MedallaTestnet,
				featureconfig.SpadinaTestnet,
				featureconfig.ZinkenTestnet,
			}),
			Before: func(cliCtx *cli.Context) error {
				return cmd.LoadFlagsFromConfig(cliCtx, cliCtx.Command.Flags)
			},
			Action: func(cliCtx *cli.Context) error {
				featureconfig.ConfigureValidator(cliCtx)
				if err := DeleteAccountCli(cliCtx); err != nil {
					log.Fatalf("Could not delete account: %v", err)
				}
				return nil
			},
		},
		{
			Name:        "list",
			Description: "Lists all validator accounts in a user's wallet directory",
			Flags: cmd.WrapFlags([]cli.Flag{
				flags.WalletDirFlag,
				flags.WalletPasswordFileFlag,
				flags.ShowDepositDataFlag,
				flags.ShowPrivateKeysFlag,
				featureconfig.AltonaTestnet,
				featureconfig.OnyxTestnet,
				featureconfig.MedallaTestnet,
				featureconfig.SpadinaTestnet,
				featureconfig.ZinkenTestnet,
			}),
			Before: func(cliCtx *cli.Context) error {
				return cmd.LoadFlagsFromConfig(cliCtx, cliCtx.Command.Flags)
			},
			Action: func(cliCtx *cli.Context) error {
				featureconfig.ConfigureValidator(cliCtx)
				if err := ListAccountsCli(cliCtx); err != nil {
					log.Fatalf("Could not list accounts: %v", err)
				}
				return nil
			},
		},
		{
			Name: "backup",
			Description: "backup accounts into EIP-2335 compliant keystore.json files zipped into a backup.zip file " +
				"at a desired output directory. Accounts to backup can also " +
				"be specified programmatically via a --backup-for-public-keys flag which specifies a comma-separated " +
				"list of hex string public keys",
			Flags: cmd.WrapFlags([]cli.Flag{
				flags.WalletDirFlag,
				flags.WalletPasswordFileFlag,
				flags.BackupDirFlag,
				flags.BackupPublicKeysFlag,
				flags.BackupPasswordFile,
				featureconfig.AltonaTestnet,
				featureconfig.OnyxTestnet,
				featureconfig.MedallaTestnet,
				featureconfig.SpadinaTestnet,
				featureconfig.ZinkenTestnet,
			}),
			Before: func(cliCtx *cli.Context) error {
				return cmd.LoadFlagsFromConfig(cliCtx, cliCtx.Command.Flags)
			},
			Action: func(cliCtx *cli.Context) error {
				featureconfig.ConfigureValidator(cliCtx)
				if err := BackupAccountsCli(cliCtx); err != nil {
					log.Fatalf("Could not backup accounts: %v", err)
				}
				return nil
			},
		},
		{
			Name:        "import",
			Description: `imports eth2 validator accounts stored in EIP-2335 keystore.json files from an external directory`,
			Flags: cmd.WrapFlags([]cli.Flag{
				flags.WalletDirFlag,
				flags.KeysDirFlag,
				flags.WalletPasswordFileFlag,
				flags.AccountPasswordFileFlag,
				flags.ImportPrivateKeyFileFlag,
				featureconfig.AltonaTestnet,
				featureconfig.OnyxTestnet,
				featureconfig.MedallaTestnet,
				featureconfig.SpadinaTestnet,
				featureconfig.ZinkenTestnet,
			}),
			Before: func(cliCtx *cli.Context) error {
				return cmd.LoadFlagsFromConfig(cliCtx, cliCtx.Command.Flags)
			},
			Action: func(cliCtx *cli.Context) error {
				featureconfig.ConfigureValidator(cliCtx)
				if err := ImportAccountsCli(cliCtx); err != nil {
					log.Fatalf("Could not import accounts: %v", err)
				}
				return nil
			},
		},
		{
			Name:        "voluntary-exit",
			Description: "Performs a voluntary exit on selected accounts",
			Flags: cmd.WrapFlags([]cli.Flag{
				flags.WalletDirFlag,
				flags.WalletPasswordFileFlag,
				flags.AccountPasswordFileFlag,
				flags.VoluntaryExitPublicKeysFlag,
				flags.BeaconRPCProviderFlag,
				cmd.GrpcMaxCallRecvMsgSizeFlag,
				flags.CertFlag,
				flags.GrpcHeadersFlag,
				flags.GrpcRetriesFlag,
				flags.GrpcRetryDelayFlag,
				featureconfig.AltonaTestnet,
				featureconfig.OnyxTestnet,
				featureconfig.MedallaTestnet,
				featureconfig.SpadinaTestnet,
				featureconfig.ZinkenTestnet,
			}),
			Before: func(cliCtx *cli.Context) error {
				return cmd.LoadFlagsFromConfig(cliCtx, cliCtx.Command.Flags)
			},
			Action: func(cliCtx *cli.Context) error {
				featureconfig.ConfigureValidator(cliCtx)
				if err := ExitAccountsCli(cliCtx, os.Stdin); err != nil {
					msg := err.Error()
					if strings.Contains(msg, blocks.ValidatorAlreadyExitedMsg) ||
						strings.Contains(msg, blocks.ValidatorCannotExitYetMsg) {
						log.Errorf("Could not perform voluntary exit: %s", msg)
					}
					log.Fatalf("Could not perform voluntary exit: %v", err)
				}
				return nil
			},
		},
	},
}

AccountCommands for Prysm validators.

View Source
var WalletCommands = &cli.Command{
	Name:     "wallet",
	Category: "wallet",
	Usage:    "defines commands for interacting with eth2 validator wallets (work in progress)",
	Subcommands: []*cli.Command{
		{
			Name: "create",
			Usage: "creates a new wallet with a desired type of keymanager: " +
				"either on-disk (imported), derived, or using remote credentials",
			Flags: []cli.Flag{
				flags.WalletDirFlag,
				flags.KeymanagerKindFlag,
				flags.GrpcRemoteAddressFlag,
				flags.RemoteSignerCertPathFlag,
				flags.RemoteSignerKeyPathFlag,
				flags.RemoteSignerCACertPathFlag,
				flags.WalletPasswordFileFlag,
				featureconfig.AltonaTestnet,
				featureconfig.OnyxTestnet,
				featureconfig.MedallaTestnet,
				featureconfig.SpadinaTestnet,
				featureconfig.ZinkenTestnet,
			},
			Action: func(cliCtx *cli.Context) error {
				featureconfig.ConfigureValidator(cliCtx)
				if _, err := CreateAndSaveWalletCli(cliCtx); err != nil {
					log.Fatalf("Could not create a wallet: %v", err)
				}
				return nil
			},
		},
		{
			Name:  "edit-config",
			Usage: "edits a wallet configuration options, such as gRPC connection credentials and TLS certificates",
			Flags: []cli.Flag{
				flags.WalletDirFlag,
				flags.GrpcRemoteAddressFlag,
				flags.RemoteSignerCertPathFlag,
				flags.RemoteSignerKeyPathFlag,
				flags.RemoteSignerCACertPathFlag,
				featureconfig.AltonaTestnet,
				featureconfig.OnyxTestnet,
				featureconfig.MedallaTestnet,
				featureconfig.SpadinaTestnet,
				featureconfig.ZinkenTestnet,
			},
			Action: func(cliCtx *cli.Context) error {
				featureconfig.ConfigureValidator(cliCtx)
				if err := EditWalletConfigurationCli(cliCtx); err != nil {
					log.Fatalf("Could not edit wallet configuration: %v", err)
				}
				return nil
			},
		},
		{
			Name:  "recover",
			Usage: "uses a derived wallet seed recovery phase to recreate an existing HD wallet",
			Flags: []cli.Flag{
				flags.WalletDirFlag,
				flags.MnemonicFileFlag,
				flags.WalletPasswordFileFlag,
				flags.NumAccountsFlag,
				featureconfig.AltonaTestnet,
				featureconfig.OnyxTestnet,
				featureconfig.MedallaTestnet,
				featureconfig.SpadinaTestnet,
				featureconfig.ZinkenTestnet,
			},
			Action: func(cliCtx *cli.Context) error {
				featureconfig.ConfigureValidator(cliCtx)
				if err := RecoverWalletCli(cliCtx); err != nil {
					log.Fatalf("Could not recover wallet: %v", err)
				}
				return nil
			},
		},
	},
}

WalletCommands for accounts for Prysm validators.

Functions

func BackupAccountsCli added in v1.0.0

func BackupAccountsCli(cliCtx *cli.Context) error

BackupAccountsCli allows users to select validator accounts from their wallet and export them as a backup.zip file containing the keys as EIP-2335 compliant keystore.json files, which are compatible with importing in other eth2 clients.

func CreateAccount

func CreateAccount(ctx context.Context, cfg *CreateAccountConfig) error

CreateAccount creates a new validator account from user input by opening a wallet from the user's specified path.

func CreateAccountCli

func CreateAccountCli(cliCtx *cli.Context) error

CreateAccountCli creates a new validator account from user input by opening a wallet from the user's specified path. This uses the CLI to extract information to perform account creation.

func CreateAndSaveWalletCli added in v1.0.0

func CreateAndSaveWalletCli(cliCtx *cli.Context) (*wallet.Wallet, error)

CreateAndSaveWalletCli from user input with a desired keymanager. If a wallet already exists in the path, it suggests the user alternatives such as how to edit their existing wallet configuration.

func CreateWalletWithKeymanager added in v1.0.0

func CreateWalletWithKeymanager(ctx context.Context, cfg *CreateWalletConfig) (*wallet.Wallet, error)

CreateWalletWithKeymanager specified by configuration options.

func DeleteAccount added in v1.0.0

func DeleteAccount(ctx context.Context, cfg *DeleteAccountConfig) error

DeleteAccount deletes the accounts that the user requests to be deleted from the wallet.

func DeleteAccountCli added in v1.0.0

func DeleteAccountCli(cliCtx *cli.Context) error

DeleteAccountCli deletes the accounts that the user requests to be deleted from the wallet. This function uses the CLI to extract necessary values.

func DepositDataJSON

func DepositDataJSON(depositData *ethpb.Deposit_Data) (map[string]string, error)

DepositDataJSON creates a raw map to match the deposit_data.json file format from the official eth2.0-deposit-cli https://github.com/ethereum/eth2.0-deposit-cli. The reason we utilize this map is to ensure we match the format of the eth2 deposit cli, which utilizes snake case and hex strings to represent binary data. Our gRPC gateway instead uses camel case and base64, which is why we use this workaround.

func EditWalletConfigurationCli added in v1.0.0

func EditWalletConfigurationCli(cliCtx *cli.Context) error

EditWalletConfigurationCli for a user's on-disk wallet, being able to change things such as remote gRPC credentials for remote signing, derivation paths for HD wallets, and more.

func ExitAccountsCli added in v1.0.0

func ExitAccountsCli(cliCtx *cli.Context, r io.Reader) error

ExitAccountsCli performs a voluntary exit on one or more accounts.

func ImportAccounts added in v1.0.0

func ImportAccounts(ctx context.Context, cfg *ImportAccountsConfig) error

ImportAccounts can import external, EIP-2335 compliant keystore.json files as new accounts into the Prysm validator wallet.

func ImportAccountsCli added in v1.0.0

func ImportAccountsCli(cliCtx *cli.Context) error

ImportAccountsCli can import external, EIP-2335 compliant keystore.json files as new accounts into the Prysm validator wallet. This uses the CLI to extract values necessary to run the function.

func ListAccountsCli added in v1.0.0

func ListAccountsCli(cliCtx *cli.Context) error

ListAccountsCli displays all available validator accounts in a Prysm wallet.

func RecoverWallet added in v1.0.0

func RecoverWallet(ctx context.Context, cfg *RecoverWalletConfig) (*wallet.Wallet, []*ethpb.Deposit_Data, error)

RecoverWallet uses a menmonic seed phrase to recover a wallet into the path provided.

func RecoverWalletCli added in v1.0.0

func RecoverWalletCli(cliCtx *cli.Context) error

RecoverWalletCli uses a menmonic seed phrase to recover a wallet into the path provided. This uses the CLI to extract necessary values to run the function.

Types

type CreateAccountConfig

type CreateAccountConfig struct {
	Wallet      *wallet.Wallet
	NumAccounts int64
}

CreateAccountConfig to run the create account function.

type CreateWalletConfig added in v1.0.0

type CreateWalletConfig struct {
	WalletCfg            *wallet.Config
	RemoteKeymanagerOpts *remote.KeymanagerOpts
	SkipMnemonicConfirm  bool
}

CreateWalletConfig defines the parameters needed to call the create wallet functions.

type DeleteAccountConfig

type DeleteAccountConfig struct {
	Wallet     *wallet.Wallet
	Keymanager keymanager.IKeymanager
	PublicKeys [][]byte
}

DeleteAccountConfig specifies parameters to run the delete account function.

type ImportAccountsConfig added in v1.0.0

type ImportAccountsConfig struct {
	Keystores       []*keymanager.Keystore
	Keymanager      *imported.Keymanager
	AccountPassword string
}

ImportAccountsConfig defines values to run the import accounts function.

type RecoverWalletConfig added in v1.0.0

type RecoverWalletConfig struct {
	WalletDir      string
	WalletPassword string
	Mnemonic       string
	NumAccounts    int64
}

RecoverWalletConfig to run the recover wallet function.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL