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 ¶
- Variables
- func BackupAccountsCli(cliCtx *cli.Context) error
- func CreateAccount(ctx context.Context, cfg *CreateAccountConfig) error
- func CreateAccountCli(cliCtx *cli.Context) error
- func CreateAndSaveWalletCli(cliCtx *cli.Context) (*wallet.Wallet, error)
- func CreateWalletWithKeymanager(ctx context.Context, cfg *CreateWalletConfig) (*wallet.Wallet, error)
- func DeleteAccount(ctx context.Context, cfg *DeleteAccountConfig) error
- func DeleteAccountCli(cliCtx *cli.Context) error
- func DepositDataJSON(depositData *ethpb.Deposit_Data) (map[string]string, error)
- func EditWalletConfigurationCli(cliCtx *cli.Context) error
- func ExitAccountsCli(cliCtx *cli.Context, r io.Reader) error
- func ImportAccounts(ctx context.Context, cfg *ImportAccountsConfig) error
- func ImportAccountsCli(cliCtx *cli.Context) error
- func ListAccountsCli(cliCtx *cli.Context) error
- func RecoverWallet(ctx context.Context, cfg *RecoverWalletConfig) (*wallet.Wallet, []*ethpb.Deposit_Data, error)
- func RecoverWalletCli(cliCtx *cli.Context) error
- type CreateAccountConfig
- type CreateWalletConfig
- type DeleteAccountConfig
- type ImportAccountsConfig
- type RecoverWalletConfig
Constants ¶
This section is empty.
Variables ¶
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.
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
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
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 ¶
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.