29d3abcf09
* Reuse cosmos-sdk client library to create keyring Extracted from https://github.com/evmos/ethermint/pull/1168 Cleanup cmd code for easier to migration to cosmos-sdk 0.46 * Update cosmos-sdk v0.46 prepare for implementing cosmos-sdk feemarket and tx prioritization changelog refactor cmd use sdkmath fix lint fix unit tests fix unit test genesis fix unit tests fix unit test env setup fix unit tests fix unit tests register PrivKey impl fix extension options fix lint fix unit tests make HandlerOption.Validate private gofumpt fix msg response decoding fix sim test bump cosmos-sdk version fix sim test sdk 46 fix unit test fix unit tests update ibc-go
92 lines
3.3 KiB
Go
92 lines
3.3 KiB
Go
package client
|
|
|
|
import (
|
|
"bufio"
|
|
|
|
"github.com/cosmos/cosmos-sdk/client"
|
|
"github.com/cosmos/cosmos-sdk/client/flags"
|
|
"github.com/cosmos/cosmos-sdk/client/keys"
|
|
"github.com/spf13/cobra"
|
|
"github.com/tendermint/tendermint/libs/cli"
|
|
|
|
"github.com/cosmos/cosmos-sdk/crypto/keyring"
|
|
clientkeys "github.com/evmos/ethermint/client/keys"
|
|
"github.com/evmos/ethermint/crypto/hd"
|
|
)
|
|
|
|
// KeyCommands registers a sub-tree of commands to interact with
|
|
// local private key storage.
|
|
func KeyCommands(defaultNodeHome string) *cobra.Command {
|
|
cmd := &cobra.Command{
|
|
Use: "keys",
|
|
Short: "Manage your application's keys",
|
|
Long: `Keyring management commands. These keys may be in any format supported by the
|
|
Tendermint crypto library and can be used by light-clients, full nodes, or any other application
|
|
that needs to sign with a private key.
|
|
|
|
The keyring supports the following backends:
|
|
|
|
os Uses the operating system's default credentials store.
|
|
file Uses encrypted file-based keystore within the app's configuration directory.
|
|
This keyring will request a password each time it is accessed, which may occur
|
|
multiple times in a single command resulting in repeated password prompts.
|
|
kwallet Uses KDE Wallet Manager as a credentials management application.
|
|
pass Uses the pass command line utility to store and retrieve keys.
|
|
test Stores keys insecurely to disk. It does not prompt for a password to be unlocked
|
|
and it should be use only for testing purposes.
|
|
|
|
kwallet and pass backends depend on external tools. Refer to their respective documentation for more
|
|
information:
|
|
KWallet https://github.com/KDE/kwallet
|
|
pass https://www.passwordstore.org/
|
|
|
|
The pass backend requires GnuPG: https://gnupg.org/
|
|
`,
|
|
}
|
|
|
|
// support adding Ethereum supported keys
|
|
addCmd := keys.AddKeyCommand()
|
|
|
|
// update the default signing algorithm value to "eth_secp256k1"
|
|
algoFlag := addCmd.Flag(flags.FlagKeyAlgorithm)
|
|
algoFlag.DefValue = string(hd.EthSecp256k1Type)
|
|
err := algoFlag.Value.Set(string(hd.EthSecp256k1Type))
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
addCmd.RunE = runAddCmd
|
|
|
|
cmd.AddCommand(
|
|
keys.MnemonicKeyCommand(),
|
|
addCmd,
|
|
keys.ExportKeyCommand(),
|
|
keys.ImportKeyCommand(),
|
|
keys.ListKeysCmd(),
|
|
keys.ShowKeysCmd(),
|
|
keys.DeleteKeyCommand(),
|
|
keys.RenameKeyCommand(),
|
|
keys.ParseKeyStringCommand(),
|
|
keys.MigrateCommand(),
|
|
flags.LineBreak,
|
|
UnsafeExportEthKeyCommand(),
|
|
UnsafeImportKeyCommand(),
|
|
)
|
|
|
|
cmd.PersistentFlags().String(flags.FlagHome, defaultNodeHome, "The application home directory")
|
|
cmd.PersistentFlags().String(flags.FlagKeyringDir, "", "The client Keyring directory; if omitted, the default 'home' directory will be used")
|
|
cmd.PersistentFlags().String(flags.FlagKeyringBackend, keyring.BackendOS, "Select keyring's backend (os|file|test)")
|
|
cmd.PersistentFlags().String(cli.OutputFlag, "text", "Output format (text|json)")
|
|
return cmd
|
|
}
|
|
|
|
func runAddCmd(cmd *cobra.Command, args []string) error {
|
|
clientCtx := client.GetClientContextFromCmd(cmd).WithKeyringOptions(hd.EthSecp256k1Option())
|
|
clientCtx, err := client.ReadPersistentCommandFlags(clientCtx, cmd.Flags())
|
|
if err != nil {
|
|
return err
|
|
}
|
|
buf := bufio.NewReader(clientCtx.Input)
|
|
return clientkeys.RunAddCmd(clientCtx, cmd, args, buf)
|
|
}
|