github.com/prysmaticlabs/prysm@v1.4.4/validator/accounts/wallet_edit.go (about)

     1  package accounts
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/pkg/errors"
     7  	"github.com/prysmaticlabs/prysm/validator/accounts/prompt"
     8  	"github.com/prysmaticlabs/prysm/validator/accounts/wallet"
     9  	"github.com/prysmaticlabs/prysm/validator/keymanager"
    10  	"github.com/prysmaticlabs/prysm/validator/keymanager/remote"
    11  	"github.com/urfave/cli/v2"
    12  )
    13  
    14  // EditWalletConfigurationCli for a user's on-disk wallet, being able to change
    15  // things such as remote gRPC credentials for remote signing, derivation paths
    16  // for HD wallets, and more.
    17  func EditWalletConfigurationCli(cliCtx *cli.Context) error {
    18  	w, err := wallet.OpenWalletOrElseCli(cliCtx, func(cliCtx *cli.Context) (*wallet.Wallet, error) {
    19  		return nil, wallet.ErrNoWalletFound
    20  	})
    21  	if err != nil {
    22  		return errors.Wrap(err, "could not open wallet")
    23  	}
    24  	switch w.KeymanagerKind() {
    25  	case keymanager.Imported:
    26  		return errors.New("not possible to edit imported keymanager configuration")
    27  	case keymanager.Derived:
    28  		return errors.New("derived keymanager is not yet supported")
    29  	case keymanager.Remote:
    30  		enc, err := w.ReadKeymanagerConfigFromDisk(cliCtx.Context)
    31  		if err != nil {
    32  			return errors.Wrap(err, "could not read config")
    33  		}
    34  		opts, err := remote.UnmarshalOptionsFile(enc)
    35  		if err != nil {
    36  			return errors.Wrap(err, "could not unmarshal config")
    37  		}
    38  		log.Info("Current configuration")
    39  		// Prints the current configuration to stdout.
    40  		fmt.Println(opts)
    41  		newCfg, err := prompt.InputRemoteKeymanagerConfig(cliCtx)
    42  		if err != nil {
    43  			return errors.Wrap(err, "could not get keymanager config")
    44  		}
    45  		encodedCfg, err := remote.MarshalOptionsFile(cliCtx.Context, newCfg)
    46  		if err != nil {
    47  			return errors.Wrap(err, "could not marshal config file")
    48  		}
    49  		if err := w.WriteKeymanagerConfigToDisk(cliCtx.Context, encodedCfg); err != nil {
    50  			return errors.Wrap(err, "could not write config to disk")
    51  		}
    52  	default:
    53  		return fmt.Errorf(errKeymanagerNotSupported, w.KeymanagerKind())
    54  	}
    55  	return nil
    56  }