Merge PR #7485: keyring-dir flag
This commit is contained in:
parent
1832ab2c92
commit
f3733aaecb
@ -38,6 +38,7 @@ Ref: https://keepachangelog.com/en/1.0.0/
|
||||
## [Unreleased]
|
||||
|
||||
### Client Breaking
|
||||
|
||||
* (modules) [\#7243](https://github.com/cosmos/cosmos-sdk/pull/7243) Rename `RegisterCodec` to `RegisterLegacyAminoCodec` and `codec.New()` is now renamed to `codec.NewLegacyAmino()`
|
||||
* (cli) [\#6651](https://github.com/cosmos/cosmos-sdk/pull/6651) The `gentx` command has been improved. No longer are `--from` and `--name` flags required. Instead, a single argument, `name`, is required which refers to the key pair in the Keyring. In addition, an optional
|
||||
`--moniker` flag can be provided to override the moniker found in `config.toml`.
|
||||
@ -163,6 +164,7 @@ be used to retrieve the actual proposal `Content`. Also the `NewMsgSubmitProposa
|
||||
|
||||
### Features
|
||||
|
||||
* [\#7485](https://github.com/cosmos/cosmos-sdk/pull/7485) Introduce a new optional `--keyring-dir` flag that allows clients to specify a Keyring directory if it does not reside in the directory specified by `--home`.
|
||||
* [\#6755](https://github.com/cosmos/cosmos-sdk/pull/6755) Add custom regex validation for `Coin` denom by overwriting `CoinDenomRegex` when using `/types/coin.go`.
|
||||
* [\#7265](https://github.com/cosmos/cosmos-sdk/pull/7265) Support Tendermint block pruning through a new `min-retain-blocks` configuration that can be set in either `app.toml` or via the CLI. This parameter is used in conjunction with other criteria to determine the height at which Tendermint should prune blocks.
|
||||
* (vesting) [\#7209](https://github.com/cosmos/cosmos-sdk/pull/7209) Create new `MsgCreateVestingAccount` message type along with CLI handler that allows for the creation of delayed and continuous vesting types.
|
||||
|
||||
@ -97,6 +97,18 @@ func ReadPersistentCommandFlags(clientCtx Context, flagSet *pflag.FlagSet) (Cont
|
||||
clientCtx = clientCtx.WithHomeDir(homeDir)
|
||||
}
|
||||
|
||||
if clientCtx.KeyringDir == "" || flagSet.Changed(flags.FlagKeyringDir) {
|
||||
keyringDir, _ := flagSet.GetString(flags.FlagKeyringDir)
|
||||
|
||||
// The keyring directory is optional and falls back to the home directory
|
||||
// if omitted.
|
||||
if keyringDir == "" {
|
||||
keyringDir = clientCtx.HomeDir
|
||||
}
|
||||
|
||||
clientCtx = clientCtx.WithKeyringDir(keyringDir)
|
||||
}
|
||||
|
||||
if clientCtx.ChainID == "" || flagSet.Changed(flags.FlagChainID) {
|
||||
chainID, _ := flagSet.GetString(flags.FlagChainID)
|
||||
clientCtx = clientCtx.WithChainID(chainID)
|
||||
|
||||
@ -56,7 +56,7 @@ func TestValidateCmd(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestSetCmdClientContextHandler(t *testing.T) {
|
||||
initClientCtx := client.Context{}.WithHomeDir("/foo/bar").WithChainID("test-chain")
|
||||
initClientCtx := client.Context{}.WithHomeDir("/foo/bar").WithChainID("test-chain").WithKeyringDir("/foo/bar")
|
||||
|
||||
newCmd := func() *cobra.Command {
|
||||
c := &cobra.Command{
|
||||
|
||||
@ -32,6 +32,7 @@ type Context struct {
|
||||
OutputFormat string
|
||||
Height int64
|
||||
HomeDir string
|
||||
KeyringDir string
|
||||
From string
|
||||
BroadcastMode string
|
||||
FromName string
|
||||
@ -134,6 +135,12 @@ func (ctx Context) WithHomeDir(dir string) Context {
|
||||
return ctx
|
||||
}
|
||||
|
||||
// WithKeyringDir returns a copy of the Context with KeyringDir set.
|
||||
func (ctx Context) WithKeyringDir(dir string) Context {
|
||||
ctx.KeyringDir = dir
|
||||
return ctx
|
||||
}
|
||||
|
||||
// WithGenerateOnly returns a copy of the context with updated GenerateOnly value
|
||||
func (ctx Context) WithGenerateOnly(generateOnly bool) Context {
|
||||
ctx.GenerateOnly = generateOnly
|
||||
@ -302,8 +309,8 @@ func GetFromFields(kr keyring.Keyring, from string, genOnly bool) (sdk.AccAddres
|
||||
|
||||
func newKeyringFromFlags(ctx Context, backend string) (keyring.Keyring, error) {
|
||||
if ctx.GenerateOnly {
|
||||
return keyring.New(sdk.KeyringServiceName(), keyring.BackendMemory, ctx.HomeDir, ctx.Input)
|
||||
return keyring.New(sdk.KeyringServiceName(), keyring.BackendMemory, ctx.KeyringDir, ctx.Input)
|
||||
}
|
||||
|
||||
return keyring.New(sdk.KeyringServiceName(), backend, ctx.HomeDir, ctx.Input)
|
||||
return keyring.New(sdk.KeyringServiceName(), backend, ctx.KeyringDir, ctx.Input)
|
||||
}
|
||||
|
||||
@ -35,6 +35,7 @@ const (
|
||||
// List of CLI flags
|
||||
const (
|
||||
FlagHome = tmcli.HomeFlag
|
||||
FlagKeyringDir = "keyring-dir"
|
||||
FlagUseLedger = "ledger"
|
||||
FlagChainID = "chain-id"
|
||||
FlagNode = "node"
|
||||
@ -84,6 +85,7 @@ func AddQueryFlagsToCmd(cmd *cobra.Command) {
|
||||
|
||||
// AddTxFlagsToCmd adds common flags to a module tx command.
|
||||
func AddTxFlagsToCmd(cmd *cobra.Command) {
|
||||
cmd.Flags().String(FlagKeyringDir, "", "The client Keyring directory; if omitted, the default 'home' directory will be used")
|
||||
cmd.Flags().String(FlagFrom, "", "Name or address of private key with which to sign")
|
||||
cmd.Flags().Uint64P(FlagAccountNumber, "a", 0, "The account number of the signing account (offline mode only)")
|
||||
cmd.Flags().Uint64P(FlagSequence, "s", 0, "The sequence number of the signing account (offline mode only)")
|
||||
|
||||
@ -12,6 +12,7 @@ import (
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
"github.com/tendermint/tendermint/libs/cli"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/client"
|
||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
||||
"github.com/cosmos/cosmos-sdk/client/input"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/hd"
|
||||
@ -84,20 +85,19 @@ the flag --nosort is set.
|
||||
|
||||
func runAddCmd(cmd *cobra.Command, args []string) error {
|
||||
buf := bufio.NewReader(cmd.InOrStdin())
|
||||
|
||||
homeDir, _ := cmd.Flags().GetString(flags.FlagHome)
|
||||
dryRun, _ := cmd.Flags().GetBool(flags.FlagHome)
|
||||
clientCtx := client.GetClientContextFromCmd(cmd)
|
||||
|
||||
var (
|
||||
kr keyring.Keyring
|
||||
err error
|
||||
)
|
||||
|
||||
dryRun, _ := cmd.Flags().GetBool(flags.FlagDryRun)
|
||||
if dryRun {
|
||||
kr, err = keyring.New(sdk.KeyringServiceName(), keyring.BackendMemory, homeDir, buf)
|
||||
kr, err = keyring.New(sdk.KeyringServiceName(), keyring.BackendMemory, clientCtx.KeyringDir, buf)
|
||||
} else {
|
||||
backend, _ := cmd.Flags().GetString(flags.FlagKeyringBackend)
|
||||
kr, err = keyring.New(sdk.KeyringServiceName(), backend, homeDir, buf)
|
||||
kr, err = keyring.New(sdk.KeyringServiceName(), backend, clientCtx.KeyringDir, buf)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
package keys
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
@ -10,6 +11,7 @@ import (
|
||||
|
||||
"github.com/tendermint/tendermint/libs/cli"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/client"
|
||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/hd"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keyring"
|
||||
@ -39,9 +41,11 @@ func Test_runAddCmdLedgerWithCustomCoinType(t *testing.T) {
|
||||
// Prepare a keybase
|
||||
kbHome := t.TempDir()
|
||||
|
||||
clientCtx := client.Context{}.WithKeyringDir(kbHome)
|
||||
ctx := context.WithValue(context.Background(), client.ClientContextKey, &clientCtx)
|
||||
|
||||
cmd.SetArgs([]string{
|
||||
"keyname1",
|
||||
fmt.Sprintf("--%s=%s", flags.FlagHome, kbHome),
|
||||
fmt.Sprintf("--%s=true", flags.FlagUseLedger),
|
||||
fmt.Sprintf("--%s=0", flagAccount),
|
||||
fmt.Sprintf("--%s=0", flagIndex),
|
||||
@ -53,7 +57,7 @@ func Test_runAddCmdLedgerWithCustomCoinType(t *testing.T) {
|
||||
|
||||
mockIn := testutil.ApplyMockIODiscardOutErr(cmd)
|
||||
mockIn.Reset("test1234\ntest1234\n")
|
||||
require.NoError(t, cmd.Execute())
|
||||
require.NoError(t, cmd.ExecuteContext(ctx))
|
||||
|
||||
// Now check that it has been stored properly
|
||||
kb, err := keyring.New(sdk.KeyringServiceName(), keyring.BackendTest, kbHome, mockIn)
|
||||
@ -83,12 +87,15 @@ func Test_runAddCmdLedgerWithCustomCoinType(t *testing.T) {
|
||||
func Test_runAddCmdLedger(t *testing.T) {
|
||||
cmd := AddKeyCommand()
|
||||
cmd.Flags().AddFlagSet(Commands("home").PersistentFlags())
|
||||
|
||||
mockIn := testutil.ApplyMockIODiscardOutErr(cmd)
|
||||
kbHome := t.TempDir()
|
||||
|
||||
clientCtx := client.Context{}.WithKeyringDir(kbHome)
|
||||
ctx := context.WithValue(context.Background(), client.ClientContextKey, &clientCtx)
|
||||
|
||||
cmd.SetArgs([]string{
|
||||
"keyname1",
|
||||
fmt.Sprintf("--%s=%s", flags.FlagHome, kbHome),
|
||||
fmt.Sprintf("--%s=true", flags.FlagUseLedger),
|
||||
fmt.Sprintf("--%s=%s", cli.OutputFlag, OutputFormatText),
|
||||
fmt.Sprintf("--%s=%s", flags.FlagKeyAlgorithm, string(hd.Secp256k1Type)),
|
||||
@ -97,7 +104,7 @@ func Test_runAddCmdLedger(t *testing.T) {
|
||||
})
|
||||
mockIn.Reset("test1234\ntest1234\n")
|
||||
|
||||
require.NoError(t, cmd.Execute())
|
||||
require.NoError(t, cmd.ExecuteContext(ctx))
|
||||
|
||||
// Now check that it has been stored properly
|
||||
kb, err := keyring.New(sdk.KeyringServiceName(), keyring.BackendTest, kbHome, mockIn)
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
package keys
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
@ -8,6 +9,7 @@ import (
|
||||
|
||||
"github.com/tendermint/tendermint/libs/cli"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/client"
|
||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/hd"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keyring"
|
||||
@ -21,9 +23,13 @@ func Test_runAddCmdBasic(t *testing.T) {
|
||||
|
||||
mockIn := testutil.ApplyMockIODiscardOutErr(cmd)
|
||||
kbHome := t.TempDir()
|
||||
kb, err := keyring.New(sdk.KeyringServiceName(), keyring.BackendTest, kbHome, mockIn)
|
||||
|
||||
kb, err := keyring.New(sdk.KeyringServiceName(), keyring.BackendTest, kbHome, mockIn)
|
||||
require.NoError(t, err)
|
||||
|
||||
clientCtx := client.Context{}.WithKeyringDir(kbHome)
|
||||
ctx := context.WithValue(context.Background(), client.ClientContextKey, &clientCtx)
|
||||
|
||||
t.Cleanup(func() {
|
||||
_ = kb.Delete("keyname1")
|
||||
_ = kb.Delete("keyname2")
|
||||
@ -37,10 +43,10 @@ func Test_runAddCmdBasic(t *testing.T) {
|
||||
fmt.Sprintf("--%s=%s", flags.FlagKeyringBackend, keyring.BackendTest),
|
||||
})
|
||||
mockIn.Reset("y\n")
|
||||
require.NoError(t, cmd.Execute())
|
||||
require.NoError(t, cmd.ExecuteContext(ctx))
|
||||
|
||||
mockIn.Reset("N\n")
|
||||
require.Error(t, cmd.Execute())
|
||||
require.Error(t, cmd.ExecuteContext(ctx))
|
||||
|
||||
cmd.SetArgs([]string{
|
||||
"keyname2",
|
||||
@ -50,11 +56,11 @@ func Test_runAddCmdBasic(t *testing.T) {
|
||||
fmt.Sprintf("--%s=%s", flags.FlagKeyringBackend, keyring.BackendTest),
|
||||
})
|
||||
|
||||
require.NoError(t, cmd.Execute())
|
||||
require.Error(t, cmd.Execute())
|
||||
require.NoError(t, cmd.ExecuteContext(ctx))
|
||||
require.Error(t, cmd.ExecuteContext(ctx))
|
||||
|
||||
mockIn.Reset("y\n")
|
||||
require.NoError(t, cmd.Execute())
|
||||
require.NoError(t, cmd.ExecuteContext(ctx))
|
||||
|
||||
cmd.SetArgs([]string{
|
||||
"keyname4",
|
||||
@ -64,8 +70,8 @@ func Test_runAddCmdBasic(t *testing.T) {
|
||||
fmt.Sprintf("--%s=%s", flags.FlagKeyringBackend, keyring.BackendTest),
|
||||
})
|
||||
|
||||
require.NoError(t, cmd.Execute())
|
||||
require.Error(t, cmd.Execute())
|
||||
require.NoError(t, cmd.ExecuteContext(ctx))
|
||||
require.Error(t, cmd.ExecuteContext(ctx))
|
||||
|
||||
cmd.SetArgs([]string{
|
||||
"keyname5",
|
||||
@ -75,7 +81,7 @@ func Test_runAddCmdBasic(t *testing.T) {
|
||||
fmt.Sprintf("--%s=%s", flags.FlagKeyAlgorithm, string(hd.Secp256k1Type)),
|
||||
})
|
||||
|
||||
require.NoError(t, cmd.Execute())
|
||||
require.NoError(t, cmd.ExecuteContext(ctx))
|
||||
|
||||
// In recovery mode
|
||||
cmd.SetArgs([]string{
|
||||
@ -85,11 +91,11 @@ func Test_runAddCmdBasic(t *testing.T) {
|
||||
|
||||
// use valid mnemonic and complete recovery key generation successfully
|
||||
mockIn.Reset("decide praise business actor peasant farm drastic weather extend front hurt later song give verb rhythm worry fun pond reform school tumble august one\n")
|
||||
require.NoError(t, cmd.Execute())
|
||||
require.NoError(t, cmd.ExecuteContext(ctx))
|
||||
|
||||
// use invalid mnemonic and fail recovery key generation
|
||||
mockIn.Reset("invalid mnemonic\n")
|
||||
require.Error(t, cmd.Execute())
|
||||
require.Error(t, cmd.ExecuteContext(ctx))
|
||||
|
||||
// In interactive mode
|
||||
cmd.SetArgs([]string{
|
||||
@ -102,9 +108,9 @@ func Test_runAddCmdBasic(t *testing.T) {
|
||||
|
||||
// set password and complete interactive key generation successfully
|
||||
mockIn.Reset("\n" + password + "\n" + password + "\n")
|
||||
require.NoError(t, cmd.Execute())
|
||||
require.NoError(t, cmd.ExecuteContext(ctx))
|
||||
|
||||
// passwords don't match and fail interactive key generation
|
||||
mockIn.Reset("\n" + password + "\n" + "fail" + "\n")
|
||||
require.Error(t, cmd.Execute())
|
||||
require.Error(t, cmd.ExecuteContext(ctx))
|
||||
}
|
||||
|
||||
@ -3,10 +3,9 @@ package keys
|
||||
import (
|
||||
"bufio"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
||||
"github.com/cosmos/cosmos-sdk/client"
|
||||
"github.com/cosmos/cosmos-sdk/client/input"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keyring"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
@ -30,16 +29,10 @@ private keys stored in a ledger device cannot be deleted with the CLI.
|
||||
Args: cobra.MinimumNArgs(1),
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
buf := bufio.NewReader(cmd.InOrStdin())
|
||||
|
||||
backend, _ := cmd.Flags().GetString(flags.FlagKeyringBackend)
|
||||
homeDir, _ := cmd.Flags().GetString(flags.FlagHome)
|
||||
kb, err := keyring.New(sdk.KeyringServiceName(), backend, homeDir, buf)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
clientCtx := client.GetClientContextFromCmd(cmd)
|
||||
|
||||
for _, name := range args {
|
||||
info, err := kb.Key(name)
|
||||
info, err := clientCtx.Keyring.Key(name)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -53,7 +46,7 @@ private keys stored in a ledger device cannot be deleted with the CLI.
|
||||
}
|
||||
}
|
||||
|
||||
if err := kb.Delete(name); err != nil {
|
||||
if err := clientCtx.Keyring.Delete(name); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
@ -1,11 +1,13 @@
|
||||
package keys
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/client"
|
||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/hd"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keyring"
|
||||
@ -41,7 +43,11 @@ func Test_runDeleteCmd(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
|
||||
cmd.SetArgs([]string{"blah", fmt.Sprintf("--%s=%s", flags.FlagHome, kbHome)})
|
||||
err = cmd.Execute()
|
||||
|
||||
clientCtx := client.Context{}.WithKeyring(kb)
|
||||
ctx := context.WithValue(context.Background(), client.ClientContextKey, &clientCtx)
|
||||
|
||||
err = cmd.ExecuteContext(ctx)
|
||||
require.Error(t, err)
|
||||
require.Equal(t, "The specified item could not be found in the keyring", err.Error())
|
||||
|
||||
|
||||
@ -5,10 +5,8 @@ import (
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
||||
"github.com/cosmos/cosmos-sdk/client"
|
||||
"github.com/cosmos/cosmos-sdk/client/input"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keyring"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
)
|
||||
|
||||
// ExportKeyCommand exports private keys from the key store.
|
||||
@ -20,20 +18,14 @@ func ExportKeyCommand() *cobra.Command {
|
||||
Args: cobra.ExactArgs(1),
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
buf := bufio.NewReader(cmd.InOrStdin())
|
||||
|
||||
backend, _ := cmd.Flags().GetString(flags.FlagKeyringBackend)
|
||||
homeDir, _ := cmd.Flags().GetString(flags.FlagHome)
|
||||
kb, err := keyring.New(sdk.KeyringServiceName(), backend, homeDir, buf)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
clientCtx := client.GetClientContextFromCmd(cmd)
|
||||
|
||||
encryptPassword, err := input.GetPassword("Enter passphrase to encrypt the exported key:", buf)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
armored, err := kb.ExportPrivKeyArmor(args[0], encryptPassword)
|
||||
armored, err := clientCtx.Keyring.ExportPrivKeyArmor(args[0], encryptPassword)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@ -1,11 +1,13 @@
|
||||
package keys
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/client"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/hd"
|
||||
"github.com/cosmos/cosmos-sdk/testutil"
|
||||
|
||||
@ -41,5 +43,8 @@ func Test_runExportCmd(t *testing.T) {
|
||||
fmt.Sprintf("--%s=%s", flags.FlagKeyringBackend, keyring.BackendTest),
|
||||
})
|
||||
|
||||
require.NoError(t, cmd.Execute())
|
||||
clientCtx := client.Context{}.WithKeyring(kb)
|
||||
ctx := context.WithValue(context.Background(), client.ClientContextKey, &clientCtx)
|
||||
|
||||
require.NoError(t, cmd.ExecuteContext(ctx))
|
||||
}
|
||||
|
||||
@ -6,10 +6,8 @@ import (
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
||||
"github.com/cosmos/cosmos-sdk/client"
|
||||
"github.com/cosmos/cosmos-sdk/client/input"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keyring"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
)
|
||||
|
||||
// ImportKeyCommand imports private keys from a keyfile.
|
||||
@ -21,13 +19,7 @@ func ImportKeyCommand() *cobra.Command {
|
||||
Args: cobra.ExactArgs(2),
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
buf := bufio.NewReader(cmd.InOrStdin())
|
||||
|
||||
backend, _ := cmd.Flags().GetString(flags.FlagKeyringBackend)
|
||||
homeDir, _ := cmd.Flags().GetString(flags.FlagHome)
|
||||
kb, err := keyring.New(sdk.KeyringServiceName(), backend, homeDir, buf)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
clientCtx := client.GetClientContextFromCmd(cmd)
|
||||
|
||||
bz, err := ioutil.ReadFile(args[1])
|
||||
if err != nil {
|
||||
@ -39,7 +31,7 @@ func ImportKeyCommand() *cobra.Command {
|
||||
return err
|
||||
}
|
||||
|
||||
return kb.ImportPrivKey(args[0], string(bz), passphrase)
|
||||
return clientCtx.Keyring.ImportPrivKey(args[0], string(bz), passphrase)
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
package keys
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"path/filepath"
|
||||
@ -8,6 +9,7 @@ import (
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/client"
|
||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keyring"
|
||||
"github.com/cosmos/cosmos-sdk/testutil"
|
||||
@ -23,6 +25,9 @@ func Test_runImportCmd(t *testing.T) {
|
||||
kbHome := t.TempDir()
|
||||
kb, err := keyring.New(sdk.KeyringServiceName(), keyring.BackendTest, kbHome, mockIn)
|
||||
|
||||
clientCtx := client.Context{}.WithKeyring(kb)
|
||||
ctx := context.WithValue(context.Background(), client.ClientContextKey, &clientCtx)
|
||||
|
||||
require.NoError(t, err)
|
||||
t.Cleanup(func() {
|
||||
kb.Delete("keyname1") // nolint:errcheck
|
||||
@ -43,8 +48,7 @@ HbP+c6JmeJy9JXe2rbbF1QtCX1gLqGcDQPBXiCtFvP7/8wTZtVOPj8vREzhZ9ElO
|
||||
mockIn.Reset("123456789\n")
|
||||
cmd.SetArgs([]string{
|
||||
"keyname1", keyfile,
|
||||
fmt.Sprintf("--%s=%s", flags.FlagHome, kbHome),
|
||||
fmt.Sprintf("--%s=%s", flags.FlagKeyringBackend, keyring.BackendTest),
|
||||
})
|
||||
require.NoError(t, cmd.Execute())
|
||||
require.NoError(t, cmd.ExecuteContext(ctx))
|
||||
}
|
||||
|
||||
@ -0,0 +1 @@
|
||||
eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyMC0xMC0wOCAxMzowNjozOC45MTAzNTggLTA0MDAgRURUIG09KzAuMDUwMTczMjM4IiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiT25IN1lscERZSHZUVFFQcCJ9.27X3naS_OL75csQLEIFoPvvCyYb9R4D573z1Z1obm3TRGn4HyPFN_w.GXNcqKAUkxqM537Q.cT169l1KGKeOra6NXHbx3kEOEDw77Lom-42mwKV0bRQ_5WZU3kG5o6Ix14r7LFL1ajjc8rdXkuiUgKQyVXEXVpo-6WkEfk2-D_CQaaUgq0-UErT-9Pj7djI3FZkPPG-yxlVSiQXB1xMk38I_AxYwAakctpwHlEK_YC0-UycFmk25Qjezar_ni69KDRPyuqCYh3dyhimG6LgdpWF4pQHjtZPy5qIqcaE7TR0OeKvf9MtsaKEzpAQOeAvh.WbbZ_Fs8qk9rsN6FuWa2zg
|
||||
@ -0,0 +1 @@
|
||||
eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyMC0xMC0wOCAxMjo1MDoxOC4yMzA4ODggLTA0MDAgRURUIG09KzAuMTYxMTg1Nzk2IiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiU3ZNM1hfZU42VHhpSVg3aiJ9.BjL9xqItRueA3u4ujcWPTp4TJjO6w4NeR9G7p32ndo63ADDGJ7j1JQ.8Fd_XM52yxKhF31U.7Cm3SBAmp0u4QffFwBgeueuU3rWT1npSKI5CUROX5COgKbDpqj5CaT54k6UGeZiUxv8itQXglUpAsg7XsF-1LjbbUAfVxXe9H9n1GcfxrLov0L8_Ia-5JadXMXkbvv9jKyjhVg6kSziQXoHcHaeauF1X0_ij3a-UVH87cLqsdAI_OXtptyU8GonVyt_Q0n8mljonjZhj2c_bmXmHARYXZOmCj52dmzSpmkyQ9vqdhlRPco93-JWR5P1V.5J7fb71-1WKJ91g02D0JGg
|
||||
@ -0,0 +1 @@
|
||||
eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyMC0xMC0wOCAxMjo1MzoyMy4yNjI0NzEgLTA0MDAgRURUIG09KzAuMDc2MzQ4MjA5IiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiTE02SnY0RUdZNHBPLTQxWSJ9.wsqaCPHz_PlOH4_B3QlKT_4N9nTEjMzqn_Rqjq2ZM3vzf1dTO1_gjA.WVEaKSvNNWJ3ZaTT.eWrtCGCCplDULPw1QEyijVO_totUT5-6yx-TK4KP_BdKmhdEG8Bm319dXU33BchHthFa2VxDyB4NH_hsUenErJSKIJgJGoVc_AMwqrVZr0Wg0qJaay7jRGh1IRNXc0cuEsNpEek1C31tNaXjD2IuJzkicwdDT3BARFLFFdRhY97LG83YTvX0gVKyJFfjx8TAgUHZgpYyJMI4_vVajnneI-v1SYCY_VMbFTaCqWKFZdYOhu3x-hXfFBww.rxnMJbBz5OU4itr8nuyZgA
|
||||
@ -0,0 +1 @@
|
||||
eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyMC0xMC0wOCAxMjo1MDoxOC4yNDQwMTEgLTA0MDAgRURUIG09KzAuMTc0MzMxMjAxIiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiYmlQLXR5Mnlvc3U2aHBvLSJ9.3drCmgYTeqS3PohaYKQc7i1fyjtOMuEPu_pDqMpT0UStPNDxG_LUDg.VS6Au9HoIruV0RiE._2BmFif-VbT_x4OD1NfsOCVFdL2MZfsG645SkptEKZAncOwHkKmWnBlKiV_LwnNzRBh-9eGGsCGfyou3zjUQRMDDHJOuW2EaVNmufmBWcAb9UoNO8O5kzPHwIvNqqJo5TQyjOviKCoP2PVcJXAwzttqDOw71B-9OuPwt_Ed4G6u8evwGIe08CzV6CKVImzj-AQg-1UI-uL06yFIEJ6CzB1DMdPR0qDQddP8pSYR_RTHnEUsii7HeKK1O.jqlYm4IZhXqe1k5kBQtguA
|
||||
@ -0,0 +1 @@
|
||||
eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyMC0xMC0wOCAxMjo1MDoxOC4yMDQ1NjYgLTA0MDAgRURUIG09KzAuMTM0ODY0MzE4IiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoidjVpMzRMY3NNbXduakEyMiJ9.XTokiwtSrKOIGREG7P7uaSfcV3hEr2ANHVUwaKbvLbuQVlTQO8fALw.bldSMLqfirE4GM9S.kNlvEojt1cavNW-nCaxX-Qk3tNm09xtXbuKppWbmMBUCf-_p-U_TWsnHuKbLon47RH1lxomrc1RpcfXwWhDEsGLwibtsjRdxz_2DGh124jeKOr4-Bl2raoPWdHKimm_cf5Ve17ChFfVy1AOaXwIr97ZdGWSU0FP8hOvv5_z5iUsuMK9T0DLxjz0162-_xSQMWWl4-hLknHz-QdO3oR_FpYo2K2eucNaFKmcN5Rn4s2n8FYLU9dIcopUF.WpNuRheBDoTiv3rK95yNjA
|
||||
@ -0,0 +1 @@
|
||||
eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyMC0xMC0wOCAxMjo1MDoxOC4yMjAyOSAtMDQwMCBFRFQgbT0rMC4xNTA1ODc4MjYiLCJlbmMiOiJBMjU2R0NNIiwicDJjIjo4MTkyLCJwMnMiOiJJYXRUWEFMVjBfeXV2ZnNMIn0.kCXD6XXDHeBiXR-GqF10fbMWBvy3qe38r16b92Xu3oLpA5c0a6ByMg.ONW9ggBJFhdfIA8M.IWm_ioQqOCLSK3FbSwjAlEVtzRR4AAW7ceIXpKzv_voaCGDNgcr7xSyRR5N-YK-sVYInwUDrme8rb5T14mjcsNgoGdKKB2QXuApY-GcPwpe2Tf7TyiCxFp91VotHnrbjCh1NvWnjDC-SZNm8HDVolkYtiBPkIkk0uFGh35WWprkVpgEYFyNIFQ0PP3XD4D9A58X0UXdGEu5Q8VcJnt1p86XUyI1le_LufJUrWAz3o_89n3xKj-b6sYzQ.KZSIrdNzE97BxrTSNkMkTw
|
||||
1
client/keys/keyring-test/keyname1.info
Normal file
1
client/keys/keyring-test/keyname1.info
Normal file
@ -0,0 +1 @@
|
||||
eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyMC0xMC0wOCAxMzowNjozOC45MDMwMjcgLTA0MDAgRURUIG09KzAuMDQyODQyNTY4IiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiSjBxN2Zza0pGRUJJR25mYSJ9.W91-I2lpaBfacsUO2Xn2_tCadqztjGX7MjAkA6GKL4uMkqjEHDXyhw.c8uKD9z5w-jpSmq1.XGnt9JaOg0VT1cjg4RAlwC6Bsq9KowSF6wM6Ak1Y16Kq4sV3NnwA4CqJKnluIjAG6D4sfBKEs2FCHy5zux4uaOQ3Y5EJjRxWoTdBP7HahmO2-jsSFX_sPIzr86KIlKIqaYFJAOUqvaObOsQkX3EL_2-vDonSRMz32abg8thFS6mNi7NtM4xGXQ5Knrix-6OgzBmvWbn4Y0v82vNNWh8d4ubKf_RSEBV7CIWfuFg2CxfRq5EbUUmtMINF74eG52F8y8zjTDcn6n3qKLcecdr6s0n1tc7iq-f3s1EHnzPefwROPLFxiq0Zyt7N7vZCSowOElYZtgQWEg0dy6CIyZ274gNPlfLXMHA-kUsZj4Q_3w.sUPc7D8bBR4I3S-njXa4Ww
|
||||
1
client/keys/keyring-test/keyname2.info
Normal file
1
client/keys/keyring-test/keyname2.info
Normal file
@ -0,0 +1 @@
|
||||
eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyMC0xMC0wOCAxMjo1MzoyMy4yNTg0OTUgLTA0MDAgRURUIG09KzAuMDcyMzcyNTM1IiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiTW1XOFlVU0Nia2JUNW9iSSJ9.JyBrlPAvgtgYWwu0rcfTn6k9qvv6DywUotcWxPUiJncCBue2WPC5cQ.CmWeu5wMFFinUfiE.FA9k3Q_W8mBgSuJRkYV8h_U5YR2mDmW595L4DnFzuSFJ19Us0O1SQF9-xPJQAyjh4jli46o5mfFfsmU0ce1h4HwklW7AdrRJXVXZ0reZLjrdiojCbLvzyM9tsWInRXi6izUcwLggv2lNCXP5UIRpjMpUPiEC4GsHiwNH8qN04_feICxHuSWJ4mKLWEDtgKxHTrBqvaHT304UF6gRD-_W9_hWdEIj66-5HE4jlxcJAe22WdoF2Z1c3ujhm4piSfHaNnWYsZHLI5Jy1WhkFC2eULOe31c6eAeik5DyUUdWKvAoSiEk4H0Z9EcSbNzlW2rrU30WIIb-icK1qLID21WYurbxM8zvXl-CvhSM2VRN1g.tu_usvTlCOy3okBKmC6zHg
|
||||
1
client/keys/keyring-test/keyname4.info
Normal file
1
client/keys/keyring-test/keyname4.info
Normal file
@ -0,0 +1 @@
|
||||
eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyMC0xMC0wOCAxMjo1MDoxOC4xOTkwMDUgLTA0MDAgRURUIG09KzAuMTI5MzA0MDMxIiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiYzVYM09VdTBtQmJ4TFd4ayJ9.Pa4p1u-9N9x4E9-5rjUlReLsfH3TvTfAw-Dr1iV8z5ccAfnqLY1UWQ.Q41_cYh4c-C2zi3v.aFna4CwpZeGQBI2_ecOzlJSKypCV0NLCD8PCOnpYvY-k-HqoUFSeouFbuKeN9VaIo12JSZmjzGhfCAupZDBcSJisLVHOvaBAjl5XCOa8k49jb-aSopMI4HXQWatBJcnM65p9Hl1JrYOcnoKPxNKzJ4PiPQnHKv_VgAvWU_CBt6nnSjkwwVJjPMobgvNzeQTEFq-4pyziJNDbDWKUrQSrc-VaO-31JBlhpu6dPOJPFsnOcMyPc76po5cAQQdog-g79d59_Y4vj8s7qd-YPCHnWmoCbgf9w8vbpmJ4Y9evXZQz8A0-c0rFX7F96aZBYtQOeC1ZpRi0BMsbs_WHrpdN678HXej6YpfNDijQmiNYzQ.ayDBvX4W6GiGxAjN3ch8DA
|
||||
1
client/keys/keyring-test/keyname5.info
Normal file
1
client/keys/keyring-test/keyname5.info
Normal file
@ -0,0 +1 @@
|
||||
eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyMC0xMC0wOCAxMjo1MDoxOC4yMTYwNTkgLTA0MDAgRURUIG09KzAuMTQ2MzU3MTI5IiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoidmNnOXNfXzFvY0N1ZC1YTCJ9.hQ21Z1cXTw925V8Xxm_Gywb05S92rKEX54tnELv16xZvkgV8XiEj9A.4Wnaa4LemIi3bdIT.kEJyzWUvmLof5_bYbDePbrYyfjyqTLuUIOdnom3igOuwfzFDHtPuEb3rSLKjxj7LgJOmZVqZGP_ihW1sJQPXbK7ZuWA4zH_Wf-n5T8CFDmNIUhlUIb6sfd_ze-s45CE58hjKRkp7b5k61xBnMujZ5KC5Vk_JHUOUyZB5SqhTuEUJDjSSCFnMDJ1UYKEp23U__XFwcZonent4IMfM0fWvmA6NC2h0qLAMcKw9hbJ_yyNHt2I3lI5twthsAOsXKxUkjhx7c9Tc7BnttFxq-puD_QyjReExP77DzuueDJ-5KBd8PMgeiQMHoYM8e2NAAJU7MXe7voB-D8Ki2QcEgH7GfHNcr6vP1by3hvV5M32OXg.ifBDbtRjrXBOdH_jEORHgw
|
||||
1
client/keys/keyring-test/keyname6.info
Normal file
1
client/keys/keyring-test/keyname6.info
Normal file
@ -0,0 +1 @@
|
||||
eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyMC0xMC0wOCAxMjo1MDoxOC4yMjY1OTEgLTA0MDAgRURUIG09KzAuMTU2ODg5MTU0IiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiNUtTSWJtdGhCVHVSUnRjYyJ9.qD2C7cQK5P0EHy2Yr-uQZzMHep6U6n57z2LwWTmgxQp6m7ujLw-C-g.rmsltoJfFO4e56RZ.IDpVmduqe2WgyepT_-paXzcosHQzK6sfKY9JH16lT4QRVJ_lAozQOyZrW3X5MbgefrmtXGsoEIEFYhTDYBtXxrW7IqLaBhSCiA5MVwR403H3C2NkcygdGDdR-uDQGW3_bp7xnOhVL_3ofu0-7MQMMhZyz_wEmVW-aG7F6lN68TPaO5KTIqfnI8vOJyyZsSgB0M0gA3f-P4aar64YDTUdjgXPOSBkyRZr07JIOauGhTFXwmHWsDVBvGo3aIIx9ybAg_Blgo8ZAPqOJ6EYmA3J5RE2_LkfJjgI8dEpIFaviBHeWrG54AAN0klQ7trq9MOCpUGPc7PqySwiwTmxb2g4kFH9fR_yQ-g5g6mjj3JYVA.GRnNxd28SYmRt1I9twptPw
|
||||
1
client/keys/keyring-test/keyname7.info
Normal file
1
client/keys/keyring-test/keyname7.info
Normal file
@ -0,0 +1 @@
|
||||
eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyMC0xMC0wOCAxMjo1MDoxOC4yMzg1MTQgLTA0MDAgRURUIG09KzAuMTY4ODExNzMwIiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiUmZDZC0xeGh6OVJ3RzJfViJ9.hMyIYfHwLYAwJs6THPC30rWfhd1SRUl5po4ifTvln5cV_VHyHLW3MQ.ku5jtKB-G5acpq4v.s0oNPaUaRQbFk-X8AL8QitkI_SdBWB2BpBmRRbo2ZMAkq4x81hSC5p7RlSrM3OGTNFZ4yOrRgzdMv43YpCl7ZpJIypF4l7Hyvl_13jTjqzB7o81dEhl_10SI_Fw607VKCnwqq02_VoqD489EpMVuQ05Fg2pUT3M_mJMacGztORYVJrIWwzbyUiHfM4GlnaoUQaKfwbkHS2W2-1wOPTSWTLEBVJlRG1EAZR_upcPJolcAStjl8PY5EfkxXD56c8Xu6SI8LjMrJAXXg7lTqOGNOkt0v8M8UZWd95Gy2zH_KJm3ItYR_YjPoMIHh-_Cb2-0uoXNRyykW4EpGptp08n7QubSYltzXwaw_NgLP9KUmg.67EgfbLDNyvEYCR12Bjoew
|
||||
@ -4,9 +4,7 @@ import (
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/tendermint/tendermint/libs/cli"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keyring"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
"github.com/cosmos/cosmos-sdk/client"
|
||||
)
|
||||
|
||||
const flagListNames = "list-names"
|
||||
@ -26,14 +24,9 @@ along with their associated name and address.`,
|
||||
}
|
||||
|
||||
func runListCmd(cmd *cobra.Command, _ []string) error {
|
||||
backend, _ := cmd.Flags().GetString(flags.FlagKeyringBackend)
|
||||
homeDir, _ := cmd.Flags().GetString(flags.FlagHome)
|
||||
kb, err := keyring.New(sdk.KeyringServiceName(), backend, homeDir, cmd.InOrStdin())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
clientCtx := client.GetClientContextFromCmd(cmd)
|
||||
|
||||
infos, err := kb.List()
|
||||
infos, err := clientCtx.Keyring.List()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@ -1,12 +1,14 @@
|
||||
package keys
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/client"
|
||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/hd"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keyring"
|
||||
@ -25,6 +27,9 @@ func Test_runListCmd(t *testing.T) {
|
||||
kb, err := keyring.New(sdk.KeyringServiceName(), keyring.BackendTest, kbHome2, mockIn)
|
||||
require.NoError(t, err)
|
||||
|
||||
clientCtx := client.Context{}.WithKeyring(kb)
|
||||
ctx := context.WithValue(context.Background(), client.ClientContextKey, &clientCtx)
|
||||
|
||||
path := "" //sdk.GetConfig().GetFullFundraiserPath()
|
||||
_, err = kb.NewAccount("something", testutil.TestMnemonic, "", path, hd.Secp256k1)
|
||||
require.NoError(t, err)
|
||||
@ -55,7 +60,7 @@ func Test_runListCmd(t *testing.T) {
|
||||
fmt.Sprintf("--%s=%s", flags.FlagKeyringBackend, keyring.BackendTest),
|
||||
})
|
||||
|
||||
if err := cmd.Execute(); (err != nil) != tt.wantErr {
|
||||
if err := cmd.ExecuteContext(ctx); (err != nil) != tt.wantErr {
|
||||
t.Errorf("runListCmd() error = %v, wantErr %v", err, tt.wantErr)
|
||||
}
|
||||
|
||||
@ -65,7 +70,7 @@ func Test_runListCmd(t *testing.T) {
|
||||
fmt.Sprintf("--%s=%s", flags.FlagKeyringBackend, keyring.BackendTest),
|
||||
})
|
||||
|
||||
if err := cmd.Execute(); (err != nil) != tt.wantErr {
|
||||
if err := cmd.ExecuteContext(ctx); (err != nil) != tt.wantErr {
|
||||
t.Errorf("runListCmd() error = %v, wantErr %v", err, tt.wantErr)
|
||||
}
|
||||
})
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
package keys
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
@ -8,6 +9,7 @@ import (
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/tendermint/tendermint/libs/cli"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/client"
|
||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keyring"
|
||||
"github.com/cosmos/cosmos-sdk/testutil"
|
||||
@ -20,14 +22,16 @@ func Test_runMigrateCmd(t *testing.T) {
|
||||
|
||||
kbHome := t.TempDir()
|
||||
|
||||
clientCtx := client.Context{}.WithKeyringDir(kbHome)
|
||||
ctx := context.WithValue(context.Background(), client.ClientContextKey, &clientCtx)
|
||||
|
||||
copy.Copy("testdata", kbHome)
|
||||
cmd.SetArgs([]string{
|
||||
"keyname1",
|
||||
fmt.Sprintf("--%s=%s", flags.FlagHome, kbHome),
|
||||
fmt.Sprintf("--%s=%s", cli.OutputFlag, OutputFormatText),
|
||||
fmt.Sprintf("--%s=%s", flags.FlagKeyringBackend, keyring.BackendTest),
|
||||
})
|
||||
assert.NoError(t, cmd.Execute())
|
||||
assert.NoError(t, cmd.ExecuteContext(ctx))
|
||||
|
||||
cmd = MigrateCommand()
|
||||
cmd.Flags().AddFlagSet(Commands("home").PersistentFlags())
|
||||
@ -40,5 +44,5 @@ func Test_runMigrateCmd(t *testing.T) {
|
||||
})
|
||||
|
||||
mockIn.Reset("test1234\ntest1234\n")
|
||||
assert.NoError(t, cmd.Execute())
|
||||
assert.NoError(t, cmd.ExecuteContext(ctx))
|
||||
}
|
||||
|
||||
@ -51,6 +51,7 @@ The pass backend requires GnuPG: https://gnupg.org/
|
||||
)
|
||||
|
||||
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, flags.DefaultKeyringBackend, "Select keyring's backend (os|file|test)")
|
||||
cmd.PersistentFlags().String(cli.OutputFlag, "text", "Output format (text|json)")
|
||||
|
||||
|
||||
@ -8,7 +8,7 @@ import (
|
||||
tmcrypto "github.com/tendermint/tendermint/crypto"
|
||||
"github.com/tendermint/tendermint/libs/cli"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
||||
"github.com/cosmos/cosmos-sdk/client"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keyring"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/multisig"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/ledger"
|
||||
@ -53,23 +53,17 @@ consisting of all the keys provided by name and multisig threshold.`,
|
||||
|
||||
func runShowCmd(cmd *cobra.Command, args []string) (err error) {
|
||||
var info keyring.Info
|
||||
|
||||
backend, _ := cmd.Flags().GetString(flags.FlagKeyringBackend)
|
||||
homeDir, _ := cmd.Flags().GetString(flags.FlagHome)
|
||||
kb, err := keyring.New(sdk.KeyringServiceName(), backend, homeDir, cmd.InOrStdin())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
clientCtx := client.GetClientContextFromCmd(cmd)
|
||||
|
||||
if len(args) == 1 {
|
||||
info, err = fetchKey(kb, args[0])
|
||||
info, err = fetchKey(clientCtx.Keyring, args[0])
|
||||
if err != nil {
|
||||
return fmt.Errorf("%s is not a valid name or address: %v", args[0], err)
|
||||
}
|
||||
} else {
|
||||
pks := make([]tmcrypto.PubKey, len(args))
|
||||
for i, keyref := range args {
|
||||
info, err := fetchKey(kb, keyref)
|
||||
info, err := fetchKey(clientCtx.Keyring, keyref)
|
||||
if err != nil {
|
||||
return fmt.Errorf("%s is not a valid name or address: %v", keyref, err)
|
||||
}
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
package keys
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
@ -8,6 +9,7 @@ import (
|
||||
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/client"
|
||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/hd"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keyring"
|
||||
@ -43,18 +45,22 @@ func Test_runShowCmd(t *testing.T) {
|
||||
cmd.Flags().AddFlagSet(Commands("home").PersistentFlags())
|
||||
mockIn := testutil.ApplyMockIODiscardOutErr(cmd)
|
||||
|
||||
kbHome := t.TempDir()
|
||||
kb, err := keyring.New(sdk.KeyringServiceName(), keyring.BackendTest, kbHome, mockIn)
|
||||
require.NoError(t, err)
|
||||
|
||||
clientCtx := client.Context{}.WithKeyring(kb)
|
||||
ctx := context.WithValue(context.Background(), client.ClientContextKey, &clientCtx)
|
||||
|
||||
cmd.SetArgs([]string{"invalid"})
|
||||
require.EqualError(t, cmd.Execute(), "invalid is not a valid name or address: decoding bech32 failed: invalid bech32 string length 7")
|
||||
require.EqualError(t, cmd.ExecuteContext(ctx), "invalid is not a valid name or address: decoding bech32 failed: invalid bech32 string length 7")
|
||||
|
||||
cmd.SetArgs([]string{"invalid1", "invalid2"})
|
||||
require.EqualError(t, cmd.Execute(), "invalid1 is not a valid name or address: decoding bech32 failed: invalid index of 1")
|
||||
require.EqualError(t, cmd.ExecuteContext(ctx), "invalid1 is not a valid name or address: decoding bech32 failed: invalid index of 1")
|
||||
|
||||
kbHome := t.TempDir()
|
||||
fakeKeyName1 := "runShowCmd_Key1"
|
||||
fakeKeyName2 := "runShowCmd_Key2"
|
||||
|
||||
kb, err := keyring.New(sdk.KeyringServiceName(), keyring.BackendTest, kbHome, mockIn)
|
||||
require.NoError(t, err)
|
||||
t.Cleanup(func() {
|
||||
kb.Delete("runShowCmd_Key1")
|
||||
kb.Delete("runShowCmd_Key2")
|
||||
@ -75,7 +81,7 @@ func Test_runShowCmd(t *testing.T) {
|
||||
fmt.Sprintf("--%s=%s", flags.FlagKeyringBackend, keyring.BackendTest),
|
||||
fmt.Sprintf("--%s=", FlagBechPrefix),
|
||||
})
|
||||
require.EqualError(t, cmd.Execute(), "invalid Bech32 prefix encoding provided: ")
|
||||
require.EqualError(t, cmd.ExecuteContext(ctx), "invalid Bech32 prefix encoding provided: ")
|
||||
|
||||
cmd.SetArgs([]string{
|
||||
fakeKeyName1,
|
||||
@ -85,7 +91,7 @@ func Test_runShowCmd(t *testing.T) {
|
||||
})
|
||||
|
||||
// try fetch by name
|
||||
require.NoError(t, cmd.Execute())
|
||||
require.NoError(t, cmd.ExecuteContext(ctx))
|
||||
|
||||
// try fetch by addr
|
||||
info, err := kb.Key(fakeKeyName1)
|
||||
@ -97,7 +103,7 @@ func Test_runShowCmd(t *testing.T) {
|
||||
})
|
||||
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, cmd.Execute())
|
||||
require.NoError(t, cmd.ExecuteContext(ctx))
|
||||
|
||||
// Now try multisig key - set bech to acc
|
||||
cmd.SetArgs([]string{
|
||||
@ -107,7 +113,7 @@ func Test_runShowCmd(t *testing.T) {
|
||||
fmt.Sprintf("--%s=%s", FlagBechPrefix, sdk.PrefixAccount),
|
||||
fmt.Sprintf("--%s=0", flagMultiSigThreshold),
|
||||
})
|
||||
require.EqualError(t, cmd.Execute(), "threshold must be a positive integer")
|
||||
require.EqualError(t, cmd.ExecuteContext(ctx), "threshold must be a positive integer")
|
||||
|
||||
cmd.SetArgs([]string{
|
||||
fakeKeyName1, fakeKeyName2,
|
||||
@ -116,7 +122,7 @@ func Test_runShowCmd(t *testing.T) {
|
||||
fmt.Sprintf("--%s=%s", FlagBechPrefix, sdk.PrefixAccount),
|
||||
fmt.Sprintf("--%s=2", flagMultiSigThreshold),
|
||||
})
|
||||
require.NoError(t, cmd.Execute())
|
||||
require.NoError(t, cmd.ExecuteContext(ctx))
|
||||
|
||||
// Now try multisig key - set bech to acc + threshold=2
|
||||
cmd.SetArgs([]string{
|
||||
@ -127,7 +133,7 @@ func Test_runShowCmd(t *testing.T) {
|
||||
fmt.Sprintf("--%s=true", FlagDevice),
|
||||
fmt.Sprintf("--%s=2", flagMultiSigThreshold),
|
||||
})
|
||||
require.EqualError(t, cmd.Execute(), "the device flag (-d) can only be used for accounts stored in devices")
|
||||
require.EqualError(t, cmd.ExecuteContext(ctx), "the device flag (-d) can only be used for accounts stored in devices")
|
||||
|
||||
cmd.SetArgs([]string{
|
||||
fakeKeyName1, fakeKeyName2,
|
||||
@ -137,7 +143,7 @@ func Test_runShowCmd(t *testing.T) {
|
||||
fmt.Sprintf("--%s=true", FlagDevice),
|
||||
fmt.Sprintf("--%s=2", flagMultiSigThreshold),
|
||||
})
|
||||
require.EqualError(t, cmd.Execute(), "the device flag (-d) can only be used for accounts")
|
||||
require.EqualError(t, cmd.ExecuteContext(ctx), "the device flag (-d) can only be used for accounts")
|
||||
|
||||
cmd.SetArgs([]string{
|
||||
fakeKeyName1, fakeKeyName2,
|
||||
@ -148,7 +154,7 @@ func Test_runShowCmd(t *testing.T) {
|
||||
fmt.Sprintf("--%s=2", flagMultiSigThreshold),
|
||||
fmt.Sprintf("--%s=true", FlagPublicKey),
|
||||
})
|
||||
require.EqualError(t, cmd.Execute(), "the device flag (-d) can only be used for addresses not pubkeys")
|
||||
require.EqualError(t, cmd.ExecuteContext(ctx), "the device flag (-d) can only be used for addresses not pubkeys")
|
||||
}
|
||||
|
||||
func Test_validateMultisigThreshold(t *testing.T) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user