mirror of
https://github.com/OffchainLabs/prysm.git
synced 2026-01-09 15:37:56 -05:00
Listen for account changes only when required (#8503)
* initial implementation * remove listening for changes from wallet creation * goimports * test fix * more goimports * listen for changes when initializing wallet through gRPC Co-authored-by: Raul Jordan <raul@prysmaticlabs.com> Co-authored-by: prylabs-bulldozer[bot] <58059840+prylabs-bulldozer[bot]@users.noreply.github.com>
This commit is contained in:
@@ -37,6 +37,7 @@ go_library(
|
||||
"//shared/petnames:go_default_library",
|
||||
"//shared/promptutil:go_default_library",
|
||||
"//shared/tos:go_default_library",
|
||||
"//validator/accounts/iface:go_default_library",
|
||||
"//validator/accounts/prompt:go_default_library",
|
||||
"//validator/accounts/wallet:go_default_library",
|
||||
"//validator/client:go_default_library",
|
||||
@@ -86,6 +87,7 @@ go_test(
|
||||
"//shared/testutil/assert:go_default_library",
|
||||
"//shared/testutil/require:go_default_library",
|
||||
"//shared/timeutils:go_default_library",
|
||||
"//validator/accounts/iface:go_default_library",
|
||||
"//validator/accounts/wallet:go_default_library",
|
||||
"//validator/flags:go_default_library",
|
||||
"//validator/keymanager:go_default_library",
|
||||
|
||||
@@ -17,6 +17,7 @@ import (
|
||||
"github.com/prysmaticlabs/prysm/shared/fileutil"
|
||||
"github.com/prysmaticlabs/prysm/shared/petnames"
|
||||
"github.com/prysmaticlabs/prysm/shared/promptutil"
|
||||
"github.com/prysmaticlabs/prysm/validator/accounts/iface"
|
||||
"github.com/prysmaticlabs/prysm/validator/accounts/prompt"
|
||||
"github.com/prysmaticlabs/prysm/validator/accounts/wallet"
|
||||
"github.com/prysmaticlabs/prysm/validator/flags"
|
||||
@@ -51,7 +52,7 @@ func BackupAccountsCli(cliCtx *cli.Context) error {
|
||||
"remote wallets cannot backup accounts",
|
||||
)
|
||||
}
|
||||
km, err := w.InitializeKeymanager(cliCtx.Context)
|
||||
km, err := w.InitializeKeymanager(cliCtx.Context, iface.InitKeymanagerConfig{ListenForChanges: false})
|
||||
if err != nil {
|
||||
return errors.Wrap(err, ErrCouldNotInitializeKeymanager)
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@ import (
|
||||
"github.com/prysmaticlabs/prysm/shared/params"
|
||||
"github.com/prysmaticlabs/prysm/shared/testutil/assert"
|
||||
"github.com/prysmaticlabs/prysm/shared/testutil/require"
|
||||
"github.com/prysmaticlabs/prysm/validator/accounts/iface"
|
||||
"github.com/prysmaticlabs/prysm/validator/accounts/wallet"
|
||||
"github.com/prysmaticlabs/prysm/validator/keymanager"
|
||||
"github.com/prysmaticlabs/prysm/validator/keymanager/derived"
|
||||
@@ -63,7 +64,7 @@ func TestBackupAccounts_Noninteractive_Derived(t *testing.T) {
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
km, err := w.InitializeKeymanager(cliCtx.Context)
|
||||
km, err := w.InitializeKeymanager(cliCtx.Context, iface.InitKeymanagerConfig{ListenForChanges: false})
|
||||
require.NoError(t, err)
|
||||
// Create 2 accounts
|
||||
derivedKM, ok := km.(*derived.Keymanager)
|
||||
|
||||
@@ -9,6 +9,7 @@ import (
|
||||
"github.com/pkg/errors"
|
||||
"github.com/prysmaticlabs/prysm/shared/bytesutil"
|
||||
"github.com/prysmaticlabs/prysm/shared/promptutil"
|
||||
"github.com/prysmaticlabs/prysm/validator/accounts/iface"
|
||||
"github.com/prysmaticlabs/prysm/validator/accounts/prompt"
|
||||
"github.com/prysmaticlabs/prysm/validator/accounts/wallet"
|
||||
"github.com/prysmaticlabs/prysm/validator/flags"
|
||||
@@ -27,7 +28,7 @@ func DeleteAccountCli(cliCtx *cli.Context) error {
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "could not open wallet")
|
||||
}
|
||||
kManager, err := w.InitializeKeymanager(cliCtx.Context)
|
||||
kManager, err := w.InitializeKeymanager(cliCtx.Context, iface.InitKeymanagerConfig{ListenForChanges: false})
|
||||
if err != nil {
|
||||
return errors.Wrap(err, ErrCouldNotInitializeKeymanager)
|
||||
}
|
||||
|
||||
@@ -63,7 +63,8 @@ func TestDeleteAccounts_Noninteractive(t *testing.T) {
|
||||
keymanager, err := imported.NewKeymanager(
|
||||
cliCtx.Context,
|
||||
&imported.SetupConfig{
|
||||
Wallet: w,
|
||||
Wallet: w,
|
||||
ListenForChanges: false,
|
||||
},
|
||||
)
|
||||
require.NoError(t, err)
|
||||
|
||||
@@ -8,6 +8,7 @@ import (
|
||||
"github.com/pkg/errors"
|
||||
"github.com/prysmaticlabs/prysm/shared/bytesutil"
|
||||
"github.com/prysmaticlabs/prysm/shared/promptutil"
|
||||
"github.com/prysmaticlabs/prysm/validator/accounts/iface"
|
||||
"github.com/prysmaticlabs/prysm/validator/accounts/prompt"
|
||||
"github.com/prysmaticlabs/prysm/validator/accounts/wallet"
|
||||
"github.com/prysmaticlabs/prysm/validator/flags"
|
||||
@@ -23,7 +24,7 @@ func DisableAccountsCli(cliCtx *cli.Context) error {
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "could not open wallet")
|
||||
}
|
||||
km, err := w.InitializeKeymanager(cliCtx.Context)
|
||||
km, err := w.InitializeKeymanager(cliCtx.Context, iface.InitKeymanagerConfig{ListenForChanges: false})
|
||||
if err != nil {
|
||||
return errors.Wrap(err, ErrCouldNotInitializeKeymanager)
|
||||
}
|
||||
@@ -100,7 +101,7 @@ func EnableAccountsCli(cliCtx *cli.Context) error {
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "could not open wallet")
|
||||
}
|
||||
km, err := w.InitializeKeymanager(cliCtx.Context)
|
||||
km, err := w.InitializeKeymanager(cliCtx.Context, iface.InitKeymanagerConfig{ListenForChanges: false})
|
||||
if err != nil {
|
||||
return errors.Wrap(err, ErrCouldNotInitializeKeymanager)
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ import (
|
||||
"github.com/prysmaticlabs/prysm/shared/bytesutil"
|
||||
"github.com/prysmaticlabs/prysm/shared/testutil/assert"
|
||||
"github.com/prysmaticlabs/prysm/shared/testutil/require"
|
||||
"github.com/prysmaticlabs/prysm/validator/accounts/iface"
|
||||
"github.com/prysmaticlabs/prysm/validator/accounts/wallet"
|
||||
"github.com/prysmaticlabs/prysm/validator/keymanager"
|
||||
)
|
||||
@@ -63,7 +64,7 @@ func TestDisableAccounts_Noninteractive(t *testing.T) {
|
||||
// We attempt to disable the accounts specified.
|
||||
require.NoError(t, DisableAccountsCli(cliCtx))
|
||||
|
||||
keymanager, err := w.InitializeKeymanager(cliCtx.Context)
|
||||
keymanager, err := w.InitializeKeymanager(cliCtx.Context, iface.InitKeymanagerConfig{ListenForChanges: false})
|
||||
require.NoError(t, err)
|
||||
remainingAccounts, err := keymanager.FetchValidatingPublicKeys(cliCtx.Context)
|
||||
require.NoError(t, err)
|
||||
@@ -119,7 +120,7 @@ func TestEnableAccounts_Noninteractive(t *testing.T) {
|
||||
// We attempt to disable the accounts specified.
|
||||
require.NoError(t, DisableAccountsCli(cliCtx))
|
||||
|
||||
km, err := w.InitializeKeymanager(cliCtx.Context)
|
||||
km, err := w.InitializeKeymanager(cliCtx.Context, iface.InitKeymanagerConfig{ListenForChanges: false})
|
||||
require.NoError(t, err)
|
||||
remainingAccounts, err := km.FetchValidatingPublicKeys(cliCtx.Context)
|
||||
require.NoError(t, err)
|
||||
@@ -128,7 +129,7 @@ func TestEnableAccounts_Noninteractive(t *testing.T) {
|
||||
// We attempt to enable the accounts specified.
|
||||
require.NoError(t, EnableAccountsCli(cliCtx))
|
||||
|
||||
km, err = w.InitializeKeymanager(cliCtx.Context)
|
||||
km, err = w.InitializeKeymanager(cliCtx.Context, iface.InitKeymanagerConfig{ListenForChanges: false})
|
||||
require.NoError(t, err)
|
||||
remainingAccounts, err = km.FetchValidatingPublicKeys(cliCtx.Context)
|
||||
require.NoError(t, err)
|
||||
|
||||
@@ -15,6 +15,7 @@ import (
|
||||
"github.com/prysmaticlabs/prysm/shared/grpcutils"
|
||||
"github.com/prysmaticlabs/prysm/shared/params"
|
||||
"github.com/prysmaticlabs/prysm/shared/promptutil"
|
||||
"github.com/prysmaticlabs/prysm/validator/accounts/iface"
|
||||
"github.com/prysmaticlabs/prysm/validator/accounts/prompt"
|
||||
"github.com/prysmaticlabs/prysm/validator/accounts/wallet"
|
||||
"github.com/prysmaticlabs/prysm/validator/client"
|
||||
@@ -79,7 +80,7 @@ func prepareWallet(cliCtx *cli.Context) (validatingPublicKeys [][48]byte, km key
|
||||
return nil, nil, errors.Wrap(err, "could not open wallet")
|
||||
}
|
||||
|
||||
km, err = w.InitializeKeymanager(cliCtx.Context)
|
||||
km, err = w.InitializeKeymanager(cliCtx.Context, iface.InitKeymanagerConfig{ListenForChanges: false})
|
||||
if err != nil {
|
||||
return nil, nil, errors.Wrap(err, ErrCouldNotInitializeKeymanager)
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ import (
|
||||
"github.com/prysmaticlabs/prysm/shared/bytesutil"
|
||||
"github.com/prysmaticlabs/prysm/shared/fileutil"
|
||||
"github.com/prysmaticlabs/prysm/shared/promptutil"
|
||||
"github.com/prysmaticlabs/prysm/validator/accounts/iface"
|
||||
"github.com/prysmaticlabs/prysm/validator/accounts/prompt"
|
||||
"github.com/prysmaticlabs/prysm/validator/accounts/wallet"
|
||||
"github.com/prysmaticlabs/prysm/validator/flags"
|
||||
@@ -99,7 +100,7 @@ func ImportAccountsCli(cliCtx *cli.Context) error {
|
||||
return errors.Wrap(err, "could not initialize wallet")
|
||||
}
|
||||
|
||||
km, err := w.InitializeKeymanager(cliCtx.Context)
|
||||
km, err := w.InitializeKeymanager(cliCtx.Context, iface.InitKeymanagerConfig{ListenForChanges: false})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ import (
|
||||
"github.com/prysmaticlabs/prysm/shared/testutil/assert"
|
||||
"github.com/prysmaticlabs/prysm/shared/testutil/require"
|
||||
"github.com/prysmaticlabs/prysm/shared/timeutils"
|
||||
"github.com/prysmaticlabs/prysm/validator/accounts/iface"
|
||||
"github.com/prysmaticlabs/prysm/validator/accounts/wallet"
|
||||
"github.com/prysmaticlabs/prysm/validator/keymanager"
|
||||
"github.com/prysmaticlabs/prysm/validator/keymanager/imported"
|
||||
@@ -50,7 +51,8 @@ func TestImport_Noninteractive(t *testing.T) {
|
||||
keymanager, err := imported.NewKeymanager(
|
||||
cliCtx.Context,
|
||||
&imported.SetupConfig{
|
||||
Wallet: w,
|
||||
Wallet: w,
|
||||
ListenForChanges: false,
|
||||
},
|
||||
)
|
||||
require.NoError(t, err)
|
||||
@@ -72,7 +74,7 @@ func TestImport_Noninteractive(t *testing.T) {
|
||||
WalletPassword: password,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
km, err := w.InitializeKeymanager(cliCtx.Context)
|
||||
km, err := w.InitializeKeymanager(cliCtx.Context, iface.InitKeymanagerConfig{ListenForChanges: false})
|
||||
require.NoError(t, err)
|
||||
keys, err := km.FetchValidatingPublicKeys(cliCtx.Context)
|
||||
require.NoError(t, err)
|
||||
@@ -120,7 +122,7 @@ func TestImport_DuplicateKeys(t *testing.T) {
|
||||
WalletPassword: password,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
km, err := w.InitializeKeymanager(cliCtx.Context)
|
||||
km, err := w.InitializeKeymanager(cliCtx.Context, iface.InitKeymanagerConfig{ListenForChanges: false})
|
||||
require.NoError(t, err)
|
||||
keys, err := km.FetchValidatingPublicKeys(cliCtx.Context)
|
||||
require.NoError(t, err)
|
||||
@@ -181,7 +183,8 @@ func TestImport_Noninteractive_RandomName(t *testing.T) {
|
||||
keymanager, err := imported.NewKeymanager(
|
||||
cliCtx.Context,
|
||||
&imported.SetupConfig{
|
||||
Wallet: w,
|
||||
Wallet: w,
|
||||
ListenForChanges: false,
|
||||
},
|
||||
)
|
||||
require.NoError(t, err)
|
||||
@@ -203,7 +206,7 @@ func TestImport_Noninteractive_RandomName(t *testing.T) {
|
||||
WalletPassword: password,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
km, err := w.InitializeKeymanager(cliCtx.Context)
|
||||
km, err := w.InitializeKeymanager(cliCtx.Context, iface.InitKeymanagerConfig{ListenForChanges: false})
|
||||
require.NoError(t, err)
|
||||
keys, err := km.FetchValidatingPublicKeys(cliCtx.Context)
|
||||
require.NoError(t, err)
|
||||
@@ -237,7 +240,8 @@ func TestImport_Noninteractive_Filepath(t *testing.T) {
|
||||
keymanager, err := imported.NewKeymanager(
|
||||
cliCtx.Context,
|
||||
&imported.SetupConfig{
|
||||
Wallet: w,
|
||||
Wallet: w,
|
||||
ListenForChanges: false,
|
||||
},
|
||||
)
|
||||
require.NoError(t, err)
|
||||
@@ -254,7 +258,7 @@ func TestImport_Noninteractive_Filepath(t *testing.T) {
|
||||
WalletPassword: password,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
km, err := w.InitializeKeymanager(cliCtx.Context)
|
||||
km, err := w.InitializeKeymanager(cliCtx.Context, iface.InitKeymanagerConfig{ListenForChanges: false})
|
||||
require.NoError(t, err)
|
||||
keys, err := km.FetchValidatingPublicKeys(cliCtx.Context)
|
||||
require.NoError(t, err)
|
||||
@@ -358,7 +362,8 @@ func Test_importPrivateKeyAsAccount(t *testing.T) {
|
||||
keymanager, err := imported.NewKeymanager(
|
||||
cliCtx.Context,
|
||||
&imported.SetupConfig{
|
||||
Wallet: wallet,
|
||||
Wallet: wallet,
|
||||
ListenForChanges: false,
|
||||
},
|
||||
)
|
||||
require.NoError(t, err)
|
||||
@@ -368,7 +373,8 @@ func Test_importPrivateKeyAsAccount(t *testing.T) {
|
||||
keymanager, err = imported.NewKeymanager(
|
||||
cliCtx.Context,
|
||||
&imported.SetupConfig{
|
||||
Wallet: wallet,
|
||||
Wallet: wallet,
|
||||
ListenForChanges: false,
|
||||
},
|
||||
)
|
||||
require.NoError(t, err)
|
||||
|
||||
@@ -10,6 +10,7 @@ import (
|
||||
"github.com/pkg/errors"
|
||||
"github.com/prysmaticlabs/prysm/shared/bytesutil"
|
||||
"github.com/prysmaticlabs/prysm/shared/petnames"
|
||||
"github.com/prysmaticlabs/prysm/validator/accounts/iface"
|
||||
"github.com/prysmaticlabs/prysm/validator/accounts/wallet"
|
||||
"github.com/prysmaticlabs/prysm/validator/flags"
|
||||
"github.com/prysmaticlabs/prysm/validator/keymanager"
|
||||
@@ -27,7 +28,7 @@ func ListAccountsCli(cliCtx *cli.Context) error {
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "could not open wallet")
|
||||
}
|
||||
km, err := w.InitializeKeymanager(cliCtx.Context)
|
||||
km, err := w.InitializeKeymanager(cliCtx.Context, iface.InitKeymanagerConfig{ListenForChanges: false})
|
||||
if err != nil && strings.Contains(err.Error(), "invalid checksum") {
|
||||
return errors.New("wrong wallet password entered")
|
||||
}
|
||||
|
||||
@@ -83,7 +83,8 @@ func TestListAccounts_ImportedKeymanager(t *testing.T) {
|
||||
km, err := imported.NewKeymanager(
|
||||
cliCtx.Context,
|
||||
&imported.SetupConfig{
|
||||
Wallet: w,
|
||||
Wallet: w,
|
||||
ListenForChanges: false,
|
||||
},
|
||||
)
|
||||
require.NoError(t, err)
|
||||
@@ -236,7 +237,8 @@ func TestListAccounts_DerivedKeymanager(t *testing.T) {
|
||||
keymanager, err := derived.NewKeymanager(
|
||||
cliCtx.Context,
|
||||
&derived.SetupConfig{
|
||||
Wallet: w,
|
||||
Wallet: w,
|
||||
ListenForChanges: false,
|
||||
},
|
||||
)
|
||||
require.NoError(t, err)
|
||||
|
||||
@@ -6,6 +6,11 @@ import (
|
||||
"github.com/prysmaticlabs/prysm/validator/keymanager"
|
||||
)
|
||||
|
||||
// InitKeymanagerConfig defines configuration options for initializing a keymanager.
|
||||
type InitKeymanagerConfig struct {
|
||||
ListenForChanges bool
|
||||
}
|
||||
|
||||
// Wallet defines a struct which has capabilities and knowledge of how
|
||||
// to read and write important accounts-related files to the filesystem.
|
||||
// Useful for keymanagers to have persistent capabilities for accounts on-disk.
|
||||
@@ -18,5 +23,5 @@ type Wallet interface {
|
||||
// Write methods to persist important wallet and accounts-related files to disk.
|
||||
WriteFileAtPath(ctx context.Context, pathName string, fileName string, data []byte) error
|
||||
// Method for initializing a new keymanager.
|
||||
InitializeKeymanager(ctx context.Context) (keymanager.IKeymanager, error)
|
||||
InitializeKeymanager(ctx context.Context, cfg InitKeymanagerConfig) (keymanager.IKeymanager, error)
|
||||
}
|
||||
|
||||
@@ -9,5 +9,8 @@ go_library(
|
||||
"//validator:__pkg__",
|
||||
"//validator:__subpackages__",
|
||||
],
|
||||
deps = ["//validator/keymanager:go_default_library"],
|
||||
deps = [
|
||||
"//validator/accounts/iface:go_default_library",
|
||||
"//validator/keymanager:go_default_library",
|
||||
],
|
||||
)
|
||||
|
||||
@@ -6,6 +6,7 @@ import (
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
"github.com/prysmaticlabs/prysm/validator/accounts/iface"
|
||||
"github.com/prysmaticlabs/prysm/validator/keymanager"
|
||||
)
|
||||
|
||||
@@ -71,6 +72,6 @@ func (w *Wallet) ReadFileAtPath(_ context.Context, pathName, fileName string) ([
|
||||
}
|
||||
|
||||
// InitializeKeymanager --
|
||||
func (w *Wallet) InitializeKeymanager(_ context.Context) (keymanager.IKeymanager, error) {
|
||||
func (w *Wallet) InitializeKeymanager(_ context.Context, _ iface.InitKeymanagerConfig) (keymanager.IKeymanager, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ go_library(
|
||||
deps = [
|
||||
"//shared/fileutil:go_default_library",
|
||||
"//shared/promptutil:go_default_library",
|
||||
"//validator/accounts/iface:go_default_library",
|
||||
"//validator/accounts/prompt:go_default_library",
|
||||
"//validator/flags:go_default_library",
|
||||
"//validator/keymanager:go_default_library",
|
||||
|
||||
@@ -12,6 +12,7 @@ import (
|
||||
"github.com/pkg/errors"
|
||||
"github.com/prysmaticlabs/prysm/shared/fileutil"
|
||||
"github.com/prysmaticlabs/prysm/shared/promptutil"
|
||||
"github.com/prysmaticlabs/prysm/validator/accounts/iface"
|
||||
"github.com/prysmaticlabs/prysm/validator/accounts/prompt"
|
||||
"github.com/prysmaticlabs/prysm/validator/flags"
|
||||
"github.com/prysmaticlabs/prysm/validator/keymanager"
|
||||
@@ -253,20 +254,22 @@ func (w *Wallet) Password() string {
|
||||
|
||||
// InitializeKeymanager reads a keymanager config from disk at the wallet path,
|
||||
// unmarshals it based on the wallet's keymanager kind, and returns its value.
|
||||
func (w *Wallet) InitializeKeymanager(ctx context.Context) (keymanager.IKeymanager, error) {
|
||||
func (w *Wallet) InitializeKeymanager(ctx context.Context, cfg iface.InitKeymanagerConfig) (keymanager.IKeymanager, error) {
|
||||
var km keymanager.IKeymanager
|
||||
var err error
|
||||
switch w.KeymanagerKind() {
|
||||
case keymanager.Imported:
|
||||
km, err = imported.NewKeymanager(ctx, &imported.SetupConfig{
|
||||
Wallet: w,
|
||||
Wallet: w,
|
||||
ListenForChanges: cfg.ListenForChanges,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "could not initialize imported keymanager")
|
||||
}
|
||||
case keymanager.Derived:
|
||||
km, err = derived.NewKeymanager(ctx, &derived.SetupConfig{
|
||||
Wallet: w,
|
||||
Wallet: w,
|
||||
ListenForChanges: cfg.ListenForChanges,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "could not initialize derived keymanager")
|
||||
|
||||
@@ -10,6 +10,7 @@ import (
|
||||
"github.com/manifoldco/promptui"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/prysmaticlabs/prysm/shared/promptutil"
|
||||
"github.com/prysmaticlabs/prysm/validator/accounts/iface"
|
||||
"github.com/prysmaticlabs/prysm/validator/accounts/prompt"
|
||||
"github.com/prysmaticlabs/prysm/validator/accounts/wallet"
|
||||
"github.com/prysmaticlabs/prysm/validator/flags"
|
||||
@@ -22,11 +23,11 @@ import (
|
||||
|
||||
// CreateWalletConfig defines the parameters needed to call the create wallet functions.
|
||||
type CreateWalletConfig struct {
|
||||
WalletCfg *wallet.Config
|
||||
RemoteKeymanagerOpts *remote.KeymanagerOpts
|
||||
SkipMnemonicConfirm bool
|
||||
Mnemonic25thWord string
|
||||
NumAccounts int
|
||||
RemoteKeymanagerOpts *remote.KeymanagerOpts
|
||||
WalletCfg *wallet.Config
|
||||
Mnemonic25thWord string
|
||||
}
|
||||
|
||||
// CreateAndSaveWalletCli from user input with a desired keymanager. If a
|
||||
@@ -72,7 +73,7 @@ func CreateWalletWithKeymanager(ctx context.Context, cfg *CreateWalletConfig) (*
|
||||
if err = createImportedKeymanagerWallet(ctx, w); err != nil {
|
||||
return nil, errors.Wrap(err, "could not initialize wallet")
|
||||
}
|
||||
km, err := w.InitializeKeymanager(ctx)
|
||||
km, err := w.InitializeKeymanager(ctx, iface.InitKeymanagerConfig{ListenForChanges: false})
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, ErrCouldNotInitializeKeymanager)
|
||||
}
|
||||
@@ -219,7 +220,8 @@ func createDerivedKeymanagerWallet(
|
||||
return errors.Wrap(err, "could not save wallet to disk")
|
||||
}
|
||||
km, err := derived.NewKeymanager(ctx, &derived.SetupConfig{
|
||||
Wallet: wallet,
|
||||
Wallet: wallet,
|
||||
ListenForChanges: true,
|
||||
})
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "could not initialize HD keymanager")
|
||||
|
||||
@@ -129,7 +129,8 @@ func RecoverWallet(ctx context.Context, cfg *RecoverWalletConfig) (*wallet.Walle
|
||||
return nil, errors.Wrap(err, "could not save wallet to disk")
|
||||
}
|
||||
km, err := derived.NewKeymanager(ctx, &derived.SetupConfig{
|
||||
Wallet: w,
|
||||
Wallet: w,
|
||||
ListenForChanges: false,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "could not make keymanager for given phrase")
|
||||
|
||||
@@ -11,6 +11,7 @@ import (
|
||||
|
||||
"github.com/prysmaticlabs/prysm/shared/testutil/assert"
|
||||
"github.com/prysmaticlabs/prysm/shared/testutil/require"
|
||||
"github.com/prysmaticlabs/prysm/validator/accounts/iface"
|
||||
"github.com/prysmaticlabs/prysm/validator/accounts/wallet"
|
||||
"github.com/prysmaticlabs/prysm/validator/flags"
|
||||
"github.com/prysmaticlabs/prysm/validator/keymanager"
|
||||
@@ -71,7 +72,7 @@ func TestRecoverDerivedWallet(t *testing.T) {
|
||||
})
|
||||
assert.NoError(t, err)
|
||||
|
||||
km, err := w.InitializeKeymanager(cliCtx.Context)
|
||||
km, err := w.InitializeKeymanager(cliCtx.Context, iface.InitKeymanagerConfig{ListenForChanges: false})
|
||||
require.NoError(t, err)
|
||||
derivedKM, ok := km.(*derived.Keymanager)
|
||||
if !ok {
|
||||
|
||||
@@ -39,6 +39,7 @@ go_library(
|
||||
"//shared/slotutil:go_default_library",
|
||||
"//shared/timeutils:go_default_library",
|
||||
"//shared/traceutil:go_default_library",
|
||||
"//validator/accounts/iface:go_default_library",
|
||||
"//validator/accounts/wallet:go_default_library",
|
||||
"//validator/db:go_default_library",
|
||||
"//validator/db/kv:go_default_library",
|
||||
|
||||
@@ -11,7 +11,7 @@ import (
|
||||
ptypes "github.com/gogo/protobuf/types"
|
||||
"github.com/golang/mock/gomock"
|
||||
lru "github.com/hashicorp/golang-lru"
|
||||
"github.com/prysmaticlabs/eth2-types"
|
||||
types "github.com/prysmaticlabs/eth2-types"
|
||||
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
|
||||
validatorpb "github.com/prysmaticlabs/prysm/proto/validator/accounts/v2"
|
||||
"github.com/prysmaticlabs/prysm/shared/bls"
|
||||
|
||||
@@ -20,6 +20,7 @@ import (
|
||||
"github.com/prysmaticlabs/prysm/shared/event"
|
||||
"github.com/prysmaticlabs/prysm/shared/grpcutils"
|
||||
"github.com/prysmaticlabs/prysm/shared/params"
|
||||
accountsiface "github.com/prysmaticlabs/prysm/validator/accounts/iface"
|
||||
"github.com/prysmaticlabs/prysm/validator/accounts/wallet"
|
||||
"github.com/prysmaticlabs/prysm/validator/db"
|
||||
"github.com/prysmaticlabs/prysm/validator/graffiti"
|
||||
@@ -229,7 +230,7 @@ func (v *ValidatorService) recheckKeys(ctx context.Context) {
|
||||
cleanup := sub.Unsubscribe
|
||||
defer cleanup()
|
||||
w := <-initializedChan
|
||||
keyManager, err := w.InitializeKeymanager(ctx)
|
||||
keyManager, err := w.InitializeKeymanager(ctx, accountsiface.InitKeymanagerConfig{ListenForChanges: true})
|
||||
if err != nil {
|
||||
// log.Fatalf will prevent defer from being called
|
||||
cleanup()
|
||||
|
||||
@@ -28,6 +28,7 @@ import (
|
||||
"github.com/prysmaticlabs/prysm/shared/hashutil"
|
||||
"github.com/prysmaticlabs/prysm/shared/params"
|
||||
"github.com/prysmaticlabs/prysm/shared/slotutil"
|
||||
accountsiface "github.com/prysmaticlabs/prysm/validator/accounts/iface"
|
||||
"github.com/prysmaticlabs/prysm/validator/accounts/wallet"
|
||||
vdb "github.com/prysmaticlabs/prysm/validator/db"
|
||||
"github.com/prysmaticlabs/prysm/validator/graffiti"
|
||||
@@ -114,7 +115,7 @@ func (v *validator) WaitForWalletInitialization(ctx context.Context) error {
|
||||
for {
|
||||
select {
|
||||
case w := <-walletChan:
|
||||
keyManager, err := w.InitializeKeymanager(ctx)
|
||||
keyManager, err := w.InitializeKeymanager(ctx, accountsiface.InitKeymanagerConfig{ListenForChanges: true})
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "could not read keymanager")
|
||||
}
|
||||
|
||||
@@ -323,7 +323,8 @@ func TestWaitForActivation_AccountsChanged(t *testing.T) {
|
||||
}
|
||||
ctx := context.Background()
|
||||
km, err := derived.NewKeymanager(ctx, &derived.SetupConfig{
|
||||
Wallet: wallet,
|
||||
Wallet: wallet,
|
||||
ListenForChanges: true,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
err = km.RecoverAccountsFromMnemonic(ctx, mnemonic, "", 1)
|
||||
|
||||
@@ -26,7 +26,8 @@ const (
|
||||
// SetupConfig includes configuration values for initializing
|
||||
// a keymanager, such as passwords, the wallet, and more.
|
||||
type SetupConfig struct {
|
||||
Wallet iface.Wallet
|
||||
Wallet iface.Wallet
|
||||
ListenForChanges bool
|
||||
}
|
||||
|
||||
// Keymanager implementation for derived, HD keymanager using EIP-2333 and EIP-2334.
|
||||
@@ -40,7 +41,8 @@ func NewKeymanager(
|
||||
cfg *SetupConfig,
|
||||
) (*Keymanager, error) {
|
||||
importedKM, err := imported.NewKeymanager(ctx, &imported.SetupConfig{
|
||||
Wallet: cfg.Wallet,
|
||||
Wallet: cfg.Wallet,
|
||||
ListenForChanges: cfg.ListenForChanges,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
||||
@@ -26,7 +26,8 @@ func TestDerivedKeymanager_MnemnonicPassphrase_DifferentResults(t *testing.T) {
|
||||
WalletPassword: "secretPassw0rd$1999",
|
||||
}
|
||||
km, err := NewKeymanager(ctx, &SetupConfig{
|
||||
Wallet: wallet,
|
||||
Wallet: wallet,
|
||||
ListenForChanges: false,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
numAccounts := 5
|
||||
@@ -40,7 +41,8 @@ func TestDerivedKeymanager_MnemnonicPassphrase_DifferentResults(t *testing.T) {
|
||||
WalletPassword: "secretPassw0rd$1999",
|
||||
}
|
||||
km, err = NewKeymanager(ctx, &SetupConfig{
|
||||
Wallet: wallet,
|
||||
Wallet: wallet,
|
||||
ListenForChanges: false,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
// No mnemonic passphrase this time.
|
||||
@@ -80,7 +82,8 @@ func TestDerivedKeymanager_FetchValidatingPublicKeys(t *testing.T) {
|
||||
}
|
||||
ctx := context.Background()
|
||||
dr, err := NewKeymanager(ctx, &SetupConfig{
|
||||
Wallet: wallet,
|
||||
Wallet: wallet,
|
||||
ListenForChanges: false,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
numAccounts := 5
|
||||
@@ -119,7 +122,8 @@ func TestDerivedKeymanager_FetchValidatingPrivateKeys(t *testing.T) {
|
||||
}
|
||||
ctx := context.Background()
|
||||
dr, err := NewKeymanager(ctx, &SetupConfig{
|
||||
Wallet: wallet,
|
||||
Wallet: wallet,
|
||||
ListenForChanges: false,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
numAccounts := 5
|
||||
@@ -156,7 +160,8 @@ func TestDerivedKeymanager_Sign(t *testing.T) {
|
||||
}
|
||||
ctx := context.Background()
|
||||
dr, err := NewKeymanager(ctx, &SetupConfig{
|
||||
Wallet: wallet,
|
||||
Wallet: wallet,
|
||||
ListenForChanges: false,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
numAccounts := 5
|
||||
|
||||
@@ -49,7 +49,8 @@ type Keymanager struct {
|
||||
// SetupConfig includes configuration values for initializing
|
||||
// a keymanager, such as passwords, the wallet, and more.
|
||||
type SetupConfig struct {
|
||||
Wallet iface.Wallet
|
||||
Wallet iface.Wallet
|
||||
ListenForChanges bool
|
||||
}
|
||||
|
||||
// Defines a struct containing 1-to-1 corresponding
|
||||
@@ -91,9 +92,11 @@ func NewKeymanager(ctx context.Context, cfg *SetupConfig) (*Keymanager, error) {
|
||||
return nil, errors.Wrap(err, "failed to initialize account store")
|
||||
}
|
||||
|
||||
// We begin a goroutine to listen for file changes to our
|
||||
// all-accounts.keystore.json file in the wallet directory.
|
||||
go k.listenForAccountChanges(ctx)
|
||||
if cfg.ListenForChanges {
|
||||
// We begin a goroutine to listen for file changes to our
|
||||
// all-accounts.keystore.json file in the wallet directory.
|
||||
go k.listenForAccountChanges(ctx)
|
||||
}
|
||||
return k, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -38,6 +38,7 @@ go_library(
|
||||
"//shared/prometheus:go_default_library",
|
||||
"//shared/tracing:go_default_library",
|
||||
"//shared/version:go_default_library",
|
||||
"//validator/accounts/iface:go_default_library",
|
||||
"//validator/accounts/wallet:go_default_library",
|
||||
"//validator/client:go_default_library",
|
||||
"//validator/db/kv:go_default_library",
|
||||
|
||||
@@ -26,6 +26,7 @@ import (
|
||||
"github.com/prysmaticlabs/prysm/shared/prometheus"
|
||||
"github.com/prysmaticlabs/prysm/shared/tracing"
|
||||
"github.com/prysmaticlabs/prysm/shared/version"
|
||||
accountsiface "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/db/kv"
|
||||
@@ -186,7 +187,7 @@ func (c *ValidatorClient) initializeFromCLI(cliCtx *cli.Context) error {
|
||||
"wallet": w.AccountsDir(),
|
||||
"keymanager-kind": w.KeymanagerKind().String(),
|
||||
}).Info("Opened validator wallet")
|
||||
keyManager, err = w.InitializeKeymanager(cliCtx.Context)
|
||||
keyManager, err = w.InitializeKeymanager(cliCtx.Context, accountsiface.InitKeymanagerConfig{ListenForChanges: true})
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "could not read keymanager for wallet")
|
||||
}
|
||||
@@ -282,7 +283,7 @@ func (c *ValidatorClient) initializeForWeb(cliCtx *cli.Context) error {
|
||||
"wallet": w.AccountsDir(),
|
||||
"keymanager-kind": w.KeymanagerKind().String(),
|
||||
}).Info("Opened validator wallet")
|
||||
keyManager, err = w.InitializeKeymanager(cliCtx.Context)
|
||||
keyManager, err = w.InitializeKeymanager(cliCtx.Context, accountsiface.InitKeymanagerConfig{ListenForChanges: true})
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "could not read keymanager for wallet")
|
||||
}
|
||||
|
||||
@@ -33,6 +33,7 @@ go_library(
|
||||
"//shared/traceutil:go_default_library",
|
||||
"//shared/version:go_default_library",
|
||||
"//validator/accounts:go_default_library",
|
||||
"//validator/accounts/iface:go_default_library",
|
||||
"//validator/accounts/wallet:go_default_library",
|
||||
"//validator/client:go_default_library",
|
||||
"//validator/db:go_default_library",
|
||||
@@ -84,6 +85,7 @@ go_test(
|
||||
"//shared/testutil/require:go_default_library",
|
||||
"//shared/timeutils:go_default_library",
|
||||
"//validator/accounts:go_default_library",
|
||||
"//validator/accounts/iface:go_default_library",
|
||||
"//validator/accounts/wallet:go_default_library",
|
||||
"//validator/client:go_default_library",
|
||||
"//validator/db/testing:go_default_library",
|
||||
|
||||
@@ -14,6 +14,7 @@ import (
|
||||
"github.com/prysmaticlabs/prysm/shared/testutil/assert"
|
||||
"github.com/prysmaticlabs/prysm/shared/testutil/require"
|
||||
"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/flags"
|
||||
"github.com/prysmaticlabs/prysm/validator/keymanager"
|
||||
@@ -40,7 +41,7 @@ func TestServer_ListAccounts(t *testing.T) {
|
||||
SkipMnemonicConfirm: true,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
km, err := w.InitializeKeymanager(ctx)
|
||||
km, err := w.InitializeKeymanager(ctx, iface.InitKeymanagerConfig{ListenForChanges: false})
|
||||
require.NoError(t, err)
|
||||
s := &Server{
|
||||
keymanager: km,
|
||||
@@ -106,7 +107,7 @@ func TestServer_BackupAccounts(t *testing.T) {
|
||||
SkipMnemonicConfirm: true,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
km, err := w.InitializeKeymanager(ctx)
|
||||
km, err := w.InitializeKeymanager(ctx, iface.InitKeymanagerConfig{ListenForChanges: false})
|
||||
require.NoError(t, err)
|
||||
s := &Server{
|
||||
keymanager: km,
|
||||
|
||||
@@ -14,6 +14,7 @@ import (
|
||||
"github.com/prysmaticlabs/prysm/shared/fileutil"
|
||||
"github.com/prysmaticlabs/prysm/shared/rand"
|
||||
"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/keymanager"
|
||||
"github.com/prysmaticlabs/prysm/validator/keymanager/imported"
|
||||
@@ -263,7 +264,7 @@ func (s *Server) initializeWallet(ctx context.Context, cfg *wallet.Config) error
|
||||
}
|
||||
|
||||
s.walletInitialized = true
|
||||
km, err := w.InitializeKeymanager(ctx)
|
||||
km, err := w.InitializeKeymanager(ctx, iface.InitKeymanagerConfig{ListenForChanges: true})
|
||||
if err != nil {
|
||||
return errors.Wrap(err, accounts.ErrCouldNotInitializeKeymanager)
|
||||
}
|
||||
|
||||
@@ -10,8 +10,6 @@ import (
|
||||
|
||||
ptypes "github.com/gogo/protobuf/types"
|
||||
"github.com/google/uuid"
|
||||
keystorev4 "github.com/wealdtech/go-eth2-wallet-encryptor-keystorev4"
|
||||
|
||||
pb "github.com/prysmaticlabs/prysm/proto/validator/accounts/v2"
|
||||
"github.com/prysmaticlabs/prysm/shared/bls"
|
||||
"github.com/prysmaticlabs/prysm/shared/event"
|
||||
@@ -20,9 +18,11 @@ import (
|
||||
"github.com/prysmaticlabs/prysm/shared/testutil/assert"
|
||||
"github.com/prysmaticlabs/prysm/shared/testutil/require"
|
||||
"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/keymanager"
|
||||
"github.com/prysmaticlabs/prysm/validator/keymanager/imported"
|
||||
keystorev4 "github.com/wealdtech/go-eth2-wallet-encryptor-keystorev4"
|
||||
)
|
||||
|
||||
func TestServer_CreateWallet_Imported(t *testing.T) {
|
||||
@@ -140,7 +140,7 @@ func TestServer_WalletConfig(t *testing.T) {
|
||||
SkipMnemonicConfirm: true,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
km, err := w.InitializeKeymanager(ctx)
|
||||
km, err := w.InitializeKeymanager(ctx, iface.InitKeymanagerConfig{ListenForChanges: false})
|
||||
require.NoError(t, err)
|
||||
s.wallet = w
|
||||
s.keymanager = km
|
||||
@@ -167,7 +167,7 @@ func TestServer_ImportKeystores_FailedPreconditions_WrongKeymanagerKind(t *testi
|
||||
SkipMnemonicConfirm: true,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
km, err := w.InitializeKeymanager(ctx)
|
||||
km, err := w.InitializeKeymanager(ctx, iface.InitKeymanagerConfig{ListenForChanges: false})
|
||||
require.NoError(t, err)
|
||||
ss := &Server{
|
||||
wallet: w,
|
||||
@@ -191,7 +191,7 @@ func TestServer_ImportKeystores_FailedPreconditions(t *testing.T) {
|
||||
SkipMnemonicConfirm: true,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
km, err := w.InitializeKeymanager(ctx)
|
||||
km, err := w.InitializeKeymanager(ctx, iface.InitKeymanagerConfig{ListenForChanges: false})
|
||||
require.NoError(t, err)
|
||||
ss := &Server{
|
||||
keymanager: km,
|
||||
@@ -227,7 +227,7 @@ func TestServer_ImportKeystores_OK(t *testing.T) {
|
||||
SkipMnemonicConfirm: true,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
km, err := w.InitializeKeymanager(ctx)
|
||||
km, err := w.InitializeKeymanager(ctx, iface.InitKeymanagerConfig{ListenForChanges: false})
|
||||
require.NoError(t, err)
|
||||
ss := &Server{
|
||||
keymanager: km,
|
||||
@@ -275,7 +275,7 @@ func TestServer_ImportKeystores_OK(t *testing.T) {
|
||||
ImportedPublicKeys: pubKeys,
|
||||
}, res)
|
||||
|
||||
km, err = w.InitializeKeymanager(ctx)
|
||||
km, err = w.InitializeKeymanager(ctx, iface.InitKeymanagerConfig{ListenForChanges: false})
|
||||
require.NoError(t, err)
|
||||
keys, err = km.FetchValidatingPublicKeys(ctx)
|
||||
require.NoError(t, err)
|
||||
|
||||
Reference in New Issue
Block a user