From 3e269cd798b5589134bd0fb04a28611abec0c8d8 Mon Sep 17 00:00:00 2001 From: Alessio Treglia Date: Tue, 21 Jan 2020 18:04:54 +0000 Subject: [PATCH 1/8] Decouple NewKeyringFromDir() from sdk.GetConfig() NewKeyringFromDir() takes only a keyring service name, which becomes a component of the directory used as keyring's storage. --- client/keys/utils.go | 10 +++++----- client/keys/utils_test.go | 5 +++-- crypto/keys/keyring.go | 8 ++++---- x/auth/client/cli/tx_multisign.go | 3 ++- x/genutil/client/cli/gentx.go | 2 +- 5 files changed, 15 insertions(+), 13 deletions(-) diff --git a/client/keys/utils.go b/client/keys/utils.go index f6cf20e818df..8345e66cce04 100644 --- a/client/keys/utils.go +++ b/client/keys/utils.go @@ -45,22 +45,22 @@ func NewInMemoryKeyBase() keys.Keybase { return keys.NewInMemory() } // NewKeyBaseFromHomeFlag initializes a keyring based on configuration. Keybase // options can be applied when generating this new Keybase. func NewKeyringFromHomeFlag(input io.Reader, opts ...keys.KeybaseOption) (keys.Keybase, error) { - return NewKeyringFromDir(viper.GetString(flags.FlagHome), input, opts...) + return NewKeyringFromDir(sdk.GetConfig().GetKeyringServiceName(), viper.GetString(flags.FlagHome), input, opts...) } // NewKeyBaseFromDir initializes a keyring at the given directory. // If the viper flag flags.FlagKeyringBackend is set to file, it returns an on-disk keyring with // CLI prompt support only. If flags.FlagKeyringBackend is set to test it will return an on-disk, // password-less keyring that could be used for testing purposes. -func NewKeyringFromDir(rootDir string, input io.Reader, opts ...keys.KeybaseOption) (keys.Keybase, error) { +func NewKeyringFromDir(keyringServiceName string, rootDir string, input io.Reader, opts ...keys.KeybaseOption) (keys.Keybase, error) { keyringBackend := viper.GetString(flags.FlagKeyringBackend) switch keyringBackend { case flags.KeyringBackendTest: - return keys.NewTestKeyring(sdk.GetConfig().GetKeyringServiceName(), rootDir, opts...) + return keys.NewTestKeyring(keyringServiceName, rootDir, opts...) case flags.KeyringBackendFile: - return keys.NewKeyringFile(sdk.GetConfig().GetKeyringServiceName(), rootDir, input, opts...) + return keys.NewKeyringFile(keyringServiceName, rootDir, input, opts...) case flags.KeyringBackendOS: - return keys.NewKeyring(sdk.GetConfig().GetKeyringServiceName(), rootDir, input, opts...) + return keys.NewKeyring(keyringServiceName, rootDir, input, opts...) } return nil, fmt.Errorf("unknown keyring backend %q", keyringBackend) } diff --git a/client/keys/utils_test.go b/client/keys/utils_test.go index 85fb7b63a116..f0084ee330ec 100644 --- a/client/keys/utils_test.go +++ b/client/keys/utils_test.go @@ -10,16 +10,17 @@ import ( "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/tests" + sdk "github.com/cosmos/cosmos-sdk/types" ) func TestNewKeyringFromDir(t *testing.T) { dir, cleanup := tests.NewTestCaseDir(t) defer cleanup() viper.Set(flags.FlagKeyringBackend, flags.KeyringBackendTest) - _, err := NewKeyringFromDir(filepath.Join(dir, "test"), nil) + _, err := NewKeyringFromDir(sdk.DefaultKeyringServiceName, filepath.Join(dir, "test"), nil) require.NoError(t, err) viper.Set(flags.FlagKeyringBackend, flags.KeyringBackendFile) buf := strings.NewReader("password\npassword\n") - _, err = NewKeyringFromDir(filepath.Join(dir, "test"), buf) + _, err = NewKeyringFromDir(sdk.DefaultKeyringServiceName, filepath.Join(dir, "test"), buf) require.NoError(t, err) } diff --git a/crypto/keys/keyring.go b/crypto/keys/keyring.go index d5bd74a0d66e..032e53473a30 100644 --- a/crypto/keys/keyring.go +++ b/crypto/keys/keyring.go @@ -26,8 +26,8 @@ import ( ) const ( - keyringDirName = "keyring" - testKeyringDirName = "keyring-test" + keyringDirNameFmt = "keyring-%s" + testKeyringDirNameFmt = "keyring-test-%s" ) var _ Keybase = keyringKeybase{} @@ -488,7 +488,7 @@ func lkbToKeyringConfig(name, dir string, buf io.Reader, test bool) keyring.Conf return keyring.Config{ AllowedBackends: []keyring.BackendType{"file"}, ServiceName: name, - FileDir: filepath.Join(dir, testKeyringDirName), + FileDir: filepath.Join(dir, fmt.Sprintf(testKeyringDirNameFmt, name)), FilePasswordFunc: func(_ string) (string, error) { return "test", nil }, @@ -503,7 +503,7 @@ func lkbToKeyringConfig(name, dir string, buf io.Reader, test bool) keyring.Conf } func newFileBackendKeyringConfig(name, dir string, buf io.Reader) keyring.Config { - fileDir := filepath.Join(dir, keyringDirName) + fileDir := filepath.Join(dir, fmt.Sprintf(keyringDirNameFmt, name)) return keyring.Config{ AllowedBackends: []keyring.BackendType{"file"}, ServiceName: name, diff --git a/x/auth/client/cli/tx_multisign.go b/x/auth/client/cli/tx_multisign.go index 49e9b6860731..e4b4133ad68a 100644 --- a/x/auth/client/cli/tx_multisign.go +++ b/x/auth/client/cli/tx_multisign.go @@ -18,6 +18,7 @@ import ( "github.com/cosmos/cosmos-sdk/client/keys" "github.com/cosmos/cosmos-sdk/codec" crkeys "github.com/cosmos/cosmos-sdk/crypto/keys" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/version" "github.com/cosmos/cosmos-sdk/x/auth/client/utils" "github.com/cosmos/cosmos-sdk/x/auth/types" @@ -67,7 +68,7 @@ func makeMultiSignCmd(cdc *codec.Codec) func(cmd *cobra.Command, args []string) } inBuf := bufio.NewReader(cmd.InOrStdin()) - keybase, err := keys.NewKeyringFromDir(viper.GetString(cli.HomeFlag), inBuf) + keybase, err := keys.NewKeyringFromDir(sdk.GetConfig().GetKeyringServiceName(), viper.GetString(cli.HomeFlag), inBuf) if err != nil { return } diff --git a/x/genutil/client/cli/gentx.go b/x/genutil/client/cli/gentx.go index f76fcc3a36a2..e701a7f440c6 100644 --- a/x/genutil/client/cli/gentx.go +++ b/x/genutil/client/cli/gentx.go @@ -94,7 +94,7 @@ func GenTxCmd(ctx *server.Context, cdc *codec.Codec, mbm module.BasicManager, sm } inBuf := bufio.NewReader(cmd.InOrStdin()) - kb, err := keys.NewKeyringFromDir(viper.GetString(flagClientHome), inBuf) + kb, err := keys.NewKeyringFromDir(sdk.GetConfig().GetKeyringServiceName(), viper.GetString(flagClientHome), inBuf) if err != nil { return errors.Wrap(err, "failed to initialize keybase") } From 9c81e16eba37278496f897e39d68165070cb80c2 Mon Sep 17 00:00:00 2001 From: Alessio Treglia Date: Tue, 21 Jan 2020 19:34:17 +0000 Subject: [PATCH 2/8] New constructor - name is tentative --- crypto/keys/keyring.go | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/crypto/keys/keyring.go b/crypto/keys/keyring.go index 032e53473a30..0715f4cf9df7 100644 --- a/crypto/keys/keyring.go +++ b/crypto/keys/keyring.go @@ -61,6 +61,30 @@ func NewKeyring( return newKeyringKeybase(db, opts...), nil } +func NewKeyringWithBackend( + svcName, backend, rootDir string, userInput io.Reader, opts ...KeybaseOption, +) (Keybase, error) { + + var db keyring.Keyring + var err error + + switch backend { + case "test": + db, err = keyring.Open(lkbToKeyringConfig(svcName, rootDir, nil, true)) + case "file": + db, err = keyring.Open(newFileBackendKeyringConfig(svcName, rootDir, userInput)) + case "os": + db, err = keyring.Open(lkbToKeyringConfig(svcName, rootDir, userInput, false)) + default: + return nil, fmt.Errorf("unknown keyring backend %v", backend) + } + if err != nil { + return nil, err + } + + return newKeyringKeybase(db, opts...), nil +} + // NewKeyringFile creates a new instance of an encrypted file-backed keyring. func NewKeyringFile(name string, dir string, userInput io.Reader, opts ...KeybaseOption) (Keybase, error) { db, err := keyring.Open(newFileBackendKeyringConfig(name, dir, userInput)) From 9f1be5fcd7440fc9cc3fe06d77688bb3f011ac92 Mon Sep 17 00:00:00 2001 From: Alessio Treglia Date: Wed, 22 Jan 2020 01:16:20 +0000 Subject: [PATCH 3/8] Remove old constructors --- client/keys/migrate.go | 4 ++-- client/keys/utils.go | 10 +--------- crypto/keys/keyring.go | 32 -------------------------------- crypto/keys/keyring_test.go | 23 +++++++---------------- server/init_test.go | 4 ++-- 5 files changed, 12 insertions(+), 61 deletions(-) diff --git a/client/keys/migrate.go b/client/keys/migrate.go index 228248afceb5..fa15903afbc7 100644 --- a/client/keys/migrate.go +++ b/client/keys/migrate.go @@ -70,9 +70,9 @@ func runMigrateCmd(cmd *cobra.Command, args []string) error { defer os.RemoveAll(tmpDir) - keybase, err = keys.NewTestKeyring(keyringServiceName, tmpDir) + keybase, err = keys.NewKeyring(keyringServiceName, "test", tmpDir, buf) } else { - keybase, err = keys.NewKeyring(keyringServiceName, rootDir, buf) + keybase, err = keys.NewKeyring(keyringServiceName, viper.GetString(flags.FlagKeyringBackend), rootDir, buf) } if err != nil { return errors.Wrap(err, fmt.Sprintf( diff --git a/client/keys/utils.go b/client/keys/utils.go index 8345e66cce04..6ec5889531d3 100644 --- a/client/keys/utils.go +++ b/client/keys/utils.go @@ -54,15 +54,7 @@ func NewKeyringFromHomeFlag(input io.Reader, opts ...keys.KeybaseOption) (keys.K // password-less keyring that could be used for testing purposes. func NewKeyringFromDir(keyringServiceName string, rootDir string, input io.Reader, opts ...keys.KeybaseOption) (keys.Keybase, error) { keyringBackend := viper.GetString(flags.FlagKeyringBackend) - switch keyringBackend { - case flags.KeyringBackendTest: - return keys.NewTestKeyring(keyringServiceName, rootDir, opts...) - case flags.KeyringBackendFile: - return keys.NewKeyringFile(keyringServiceName, rootDir, input, opts...) - case flags.KeyringBackendOS: - return keys.NewKeyring(keyringServiceName, rootDir, input, opts...) - } - return nil, fmt.Errorf("unknown keyring backend %q", keyringBackend) + return keys.NewKeyring(keyringServiceName, keyringBackend, rootDir, input, opts...) } func getLazyKeyBaseFromDir(rootDir string, opts ...keys.KeybaseOption) (keys.Keybase, error) { diff --git a/crypto/keys/keyring.go b/crypto/keys/keyring.go index 0715f4cf9df7..ff44a2457af8 100644 --- a/crypto/keys/keyring.go +++ b/crypto/keys/keyring.go @@ -51,17 +51,6 @@ func newKeyringKeybase(db keyring.Keyring, opts ...KeybaseOption) Keybase { // NewKeyring creates a new instance of a keyring. Keybase // options can be applied when generating this new Keybase. func NewKeyring( - name string, dir string, userInput io.Reader, opts ...KeybaseOption, -) (Keybase, error) { - db, err := keyring.Open(lkbToKeyringConfig(name, dir, userInput, false)) - if err != nil { - return nil, err - } - - return newKeyringKeybase(db, opts...), nil -} - -func NewKeyringWithBackend( svcName, backend, rootDir string, userInput io.Reader, opts ...KeybaseOption, ) (Keybase, error) { @@ -85,27 +74,6 @@ func NewKeyringWithBackend( return newKeyringKeybase(db, opts...), nil } -// NewKeyringFile creates a new instance of an encrypted file-backed keyring. -func NewKeyringFile(name string, dir string, userInput io.Reader, opts ...KeybaseOption) (Keybase, error) { - db, err := keyring.Open(newFileBackendKeyringConfig(name, dir, userInput)) - if err != nil { - return nil, err - } - - return newKeyringKeybase(db, opts...), nil -} - -// NewTestKeyring creates a new instance of an on-disk keyring for -// testing purposes that does not prompt users for password. -func NewTestKeyring(name string, dir string, opts ...KeybaseOption) (Keybase, error) { - db, err := keyring.Open(lkbToKeyringConfig(name, dir, nil, true)) - if err != nil { - return nil, err - } - - return newKeyringKeybase(db, opts...), nil -} - // CreateMnemonic generates a new key and persists it to storage, encrypted // using the provided password. It returns the generated mnemonic and the key Info. // An error is returned if it fails to generate a key for the given algo type, diff --git a/crypto/keys/keyring_test.go b/crypto/keys/keyring_test.go index 1149a2691c09..066f438e030f 100644 --- a/crypto/keys/keyring_test.go +++ b/crypto/keys/keyring_test.go @@ -2,7 +2,6 @@ package keys import ( - "strings" "testing" "github.com/stretchr/testify/assert" @@ -18,7 +17,7 @@ import ( func TestLazyKeyManagementKeyRing(t *testing.T) { dir, cleanup := tests.NewTestCaseDir(t) defer cleanup() - kb, err := NewTestKeyring("keybasename", dir) + kb, err := NewKeyring("keybasename", "test", dir, nil) require.NoError(t, err) algo := Secp256k1 @@ -102,7 +101,7 @@ func TestLazyKeyManagementKeyRing(t *testing.T) { func TestLazySignVerifyKeyRing(t *testing.T) { dir, cleanup := tests.NewTestCaseDir(t) defer cleanup() - kb, err := NewTestKeyring("keybasename", dir) + kb, err := NewKeyring("keybasename", "test", dir, nil) require.NoError(t, err) algo := Secp256k1 @@ -178,7 +177,7 @@ func TestLazySignVerifyKeyRing(t *testing.T) { func TestLazyExportImportKeyRing(t *testing.T) { dir, cleanup := tests.NewTestCaseDir(t) defer cleanup() - kb, err := NewTestKeyring("keybasename", dir) + kb, err := NewKeyring("keybasename", "test", dir, nil) require.NoError(t, err) info, _, err := kb.CreateMnemonic("john", English, "secretcpw", Secp256k1) @@ -207,7 +206,7 @@ func TestLazyExportImportKeyRing(t *testing.T) { func TestLazyExportImportPubKeyKeyRing(t *testing.T) { dir, cleanup := tests.NewTestCaseDir(t) defer cleanup() - kb, err := NewTestKeyring("keybasename", dir) + kb, err := NewKeyring("keybasename", "test", dir, nil) require.NoError(t, err) algo := Secp256k1 @@ -248,7 +247,7 @@ func TestLazyExportImportPubKeyKeyRing(t *testing.T) { func TestLazyExportPrivateKeyObjectKeyRing(t *testing.T) { dir, cleanup := tests.NewTestCaseDir(t) defer cleanup() - kb, err := NewTestKeyring("keybasename", dir) + kb, err := NewKeyring("keybasename", "test", dir, nil) require.NoError(t, err) info, _, err := kb.CreateMnemonic("john", English, "secretcpw", Secp256k1) @@ -264,7 +263,7 @@ func TestLazyExportPrivateKeyObjectKeyRing(t *testing.T) { func TestLazyAdvancedKeyManagementKeyRing(t *testing.T) { dir, cleanup := tests.NewTestCaseDir(t) defer cleanup() - kb, err := NewTestKeyring("keybasename", dir) + kb, err := NewKeyring("keybasename", "test", dir, nil) require.NoError(t, err) algo := Secp256k1 @@ -298,7 +297,7 @@ func TestLazyAdvancedKeyManagementKeyRing(t *testing.T) { func TestLazySeedPhraseKeyRing(t *testing.T) { dir, cleanup := tests.NewTestCaseDir(t) defer cleanup() - kb, err := NewTestKeyring("keybasename", dir) + kb, err := NewKeyring("keybasename", "test", dir, nil) require.NoError(t, err) algo := Secp256k1 @@ -326,11 +325,3 @@ func TestLazySeedPhraseKeyRing(t *testing.T) { require.Equal(t, info.GetPubKey().Address(), newInfo.GetPubKey().Address()) require.Equal(t, info.GetPubKey(), newInfo.GetPubKey()) } - -func TestNewKeyringFile(t *testing.T) { - dir, cleanup := tests.NewTestCaseDir(t) - defer cleanup() - buf := strings.NewReader("password\npassword\n") - _, err := NewKeyringFile("test", dir, buf) - require.NoError(t, err) -} diff --git a/server/init_test.go b/server/init_test.go index 2a447eef4f16..5d353ddd3540 100644 --- a/server/init_test.go +++ b/server/init_test.go @@ -27,7 +27,7 @@ func TestGenerateSaveCoinKey(t *testing.T) { dir, cleanup := tests.NewTestCaseDir(t) defer cleanup() // clean after itself - kb, err := crkeys.NewTestKeyring(t.Name(), dir) + kb, err := crkeys.NewKeyring(t.Name(), "test", dir, nil) require.NoError(t, err) addr, mnemonic, err := server.GenerateSaveCoinKey(kb, "keyname", "012345678", false) @@ -49,7 +49,7 @@ func TestGenerateSaveCoinKeyOverwriteFlag(t *testing.T) { dir, cleanup := tests.NewTestCaseDir(t) defer cleanup() // clean after itself - kb, err := crkeys.NewTestKeyring(t.Name(), dir) + kb, err := crkeys.NewKeyring(t.Name(), "test", dir, nil) require.NoError(t, err) keyname := "justakey" From 44fb42898ff6f4954f5c62edf2234e19d2b986e6 Mon Sep 17 00:00:00 2001 From: Alessio Treglia Date: Wed, 22 Jan 2020 01:27:45 +0000 Subject: [PATCH 4/8] Improve docs --- crypto/keys/keyring.go | 1 + 1 file changed, 1 insertion(+) diff --git a/crypto/keys/keyring.go b/crypto/keys/keyring.go index ff44a2457af8..bb4c52e93f52 100644 --- a/crypto/keys/keyring.go +++ b/crypto/keys/keyring.go @@ -50,6 +50,7 @@ func newKeyringKeybase(db keyring.Keyring, opts ...KeybaseOption) Keybase { // NewKeyring creates a new instance of a keyring. Keybase // options can be applied when generating this new Keybase. +// Available backends are "os", "file", "test". func NewKeyring( svcName, backend, rootDir string, userInput io.Reader, opts ...KeybaseOption, ) (Keybase, error) { From cf738fbf81f9ce3026d6d88b8174c003badaf6e3 Mon Sep 17 00:00:00 2001 From: Alessio Treglia Date: Wed, 22 Jan 2020 15:44:00 +0000 Subject: [PATCH 5/8] Make backend strings turn into const --- crypto/keys/keyring.go | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/crypto/keys/keyring.go b/crypto/keys/keyring.go index bb4c52e93f52..92071f0706db 100644 --- a/crypto/keys/keyring.go +++ b/crypto/keys/keyring.go @@ -25,6 +25,12 @@ import ( "github.com/cosmos/cosmos-sdk/types" ) +const ( + BackendFile = "file" + BackendOS = "os" + BackendTest = "test" +) + const ( keyringDirNameFmt = "keyring-%s" testKeyringDirNameFmt = "keyring-test-%s" @@ -59,11 +65,11 @@ func NewKeyring( var err error switch backend { - case "test": + case BackendTest: db, err = keyring.Open(lkbToKeyringConfig(svcName, rootDir, nil, true)) - case "file": + case BackendFile: db, err = keyring.Open(newFileBackendKeyringConfig(svcName, rootDir, userInput)) - case "os": + case BackendOS: db, err = keyring.Open(lkbToKeyringConfig(svcName, rootDir, userInput, false)) default: return nil, fmt.Errorf("unknown keyring backend %v", backend) From 53e8441210e8271f14a755f5088426d9d4392afc Mon Sep 17 00:00:00 2001 From: Alessio Treglia Date: Wed, 22 Jan 2020 16:06:14 +0000 Subject: [PATCH 6/8] Remove NewKeyBaseFromHomeFlag constructor --- CHANGELOG.md | 5 ++++- client/keys/update.go | 4 +++- client/keys/update_test.go | 2 +- client/keys/utils.go | 7 ------- 4 files changed, 8 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a16a98bb4b91..030f00c90c69 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -100,7 +100,10 @@ if the provided arguments are invalid. `StdTx.Signatures` to get back the array of StdSignatures `[]StdSignature`. * (modules) [\#5299](https://github.com/cosmos/cosmos-sdk/pull/5299) `HandleDoubleSign` along with params `MaxEvidenceAge` and `DoubleSignJailEndTime` have moved from the `x/slashing` module to the `x/evidence` module. -* (keys) [\#4941](https://github.com/cosmos/cosmos-sdk/issues/4941) Initializing a new keybase through `NewKeyringFromHomeFlag`, `NewKeyringFromDir`, `NewKeyBaseFromHomeFlag`, `NewKeyBaseFromDir`, or `NewInMemory` functions now accept optional parameters of type `KeybaseOption`. These optional parameters are also added on the keys subcommands functions, which are now public, and allows these options to be set on the commands or ignored to default to previous behavior. +* (keys) [\#4941](https://github.com/cosmos/cosmos-sdk/issues/4941) Keybase concrete types constructors such as `NewKeyringFromHomeFlag`, `NewKeyringFromDir`, `NewKeyBaseFromDir`, or `NewInMemory` + now accept optional parameters of type `KeybaseOption`. These optional parameters are also added on the keys subcommands + functions, which are now public, and allows these options to be set on the commands or ignored to default to previous behavior. + Furthermore, the `NewKeyBaseFromHomeFlag` constructor has been removed [\#5547](https://github.com/cosmos/cosmos-sdk/pull/5547) * [\#5439](https://github.com/cosmos/cosmos-sdk/pull/5439) Further modularization was done to the `keybase` package to make it more suitable for use with different key formats and algorithms: * The `WithKeygenFunc` function added as a `KeybaseOption` which allows a custom bytes to key diff --git a/client/keys/update.go b/client/keys/update.go index 79b3ad4498ae..2ca46d43289b 100644 --- a/client/keys/update.go +++ b/client/keys/update.go @@ -4,7 +4,9 @@ import ( "bufio" "github.com/spf13/cobra" + "github.com/spf13/viper" + "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/client/input" ) @@ -30,7 +32,7 @@ func runUpdateCmd(cmd *cobra.Command, args []string) error { name := args[0] buf := bufio.NewReader(cmd.InOrStdin()) - kb, err := NewKeyBaseFromHomeFlag() + kb, err := NewKeyBaseFromDir(viper.GetString(flags.FlagHome)) if err != nil { return err } diff --git a/client/keys/update_test.go b/client/keys/update_test.go index 9d7b46c4aa81..351cedd578ce 100644 --- a/client/keys/update_test.go +++ b/client/keys/update_test.go @@ -37,7 +37,7 @@ func Test_runUpdateCmd(t *testing.T) { defer cleanUp1() viper.Set(flags.FlagHome, kbHome) - kb, err := NewKeyBaseFromHomeFlag() + kb, err := NewKeyBaseFromDir(viper.GetString(flags.FlagHome)) assert.NoError(t, err) _, err = kb.CreateAccount(fakeKeyName1, tests.TestMnemonic, "", "", "0", keys.Secp256k1) assert.NoError(t, err) diff --git a/client/keys/utils.go b/client/keys/utils.go index 6ec5889531d3..acf831207b10 100644 --- a/client/keys/utils.go +++ b/client/keys/utils.go @@ -26,13 +26,6 @@ const ( type bechKeyOutFn func(keyInfo keys.Info) (keys.KeyOutput, error) -// NewKeyBaseFromHomeFlag initializes a Keybase based on the configuration. Keybase -// options can be applied when generating this new Keybase. -func NewKeyBaseFromHomeFlag(opts ...keys.KeybaseOption) (keys.Keybase, error) { - rootDir := viper.GetString(flags.FlagHome) - return NewKeyBaseFromDir(rootDir, opts...) -} - // NewKeyBaseFromDir initializes a keybase at the rootDir directory. Keybase // options can be applied when generating this new Keybase. func NewKeyBaseFromDir(rootDir string, opts ...keys.KeybaseOption) (keys.Keybase, error) { From 9e535240e0b4dfcf8f4b96077338281a0b64e930 Mon Sep 17 00:00:00 2001 From: Alessio Treglia Date: Wed, 22 Jan 2020 16:15:15 +0000 Subject: [PATCH 7/8] Remove NewKeyringFromDir --- CHANGELOG.md | 2 +- client/keys/utils.go | 11 +---------- client/keys/utils_test.go | 26 -------------------------- x/auth/client/cli/tx_multisign.go | 13 ++++++------- x/genutil/client/cli/gentx.go | 8 ++++---- 5 files changed, 12 insertions(+), 48 deletions(-) delete mode 100644 client/keys/utils_test.go diff --git a/CHANGELOG.md b/CHANGELOG.md index 030f00c90c69..6b77c28c3385 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -100,7 +100,7 @@ if the provided arguments are invalid. `StdTx.Signatures` to get back the array of StdSignatures `[]StdSignature`. * (modules) [\#5299](https://github.com/cosmos/cosmos-sdk/pull/5299) `HandleDoubleSign` along with params `MaxEvidenceAge` and `DoubleSignJailEndTime` have moved from the `x/slashing` module to the `x/evidence` module. -* (keys) [\#4941](https://github.com/cosmos/cosmos-sdk/issues/4941) Keybase concrete types constructors such as `NewKeyringFromHomeFlag`, `NewKeyringFromDir`, `NewKeyBaseFromDir`, or `NewInMemory` +* (keys) [\#4941](https://github.com/cosmos/cosmos-sdk/issues/4941) Keybase concrete types constructors such as `NewKeyringFromHomeFlag`, `NewKeyBaseFromDir`, or `NewInMemory` now accept optional parameters of type `KeybaseOption`. These optional parameters are also added on the keys subcommands functions, which are now public, and allows these options to be set on the commands or ignored to default to previous behavior. Furthermore, the `NewKeyBaseFromHomeFlag` constructor has been removed [\#5547](https://github.com/cosmos/cosmos-sdk/pull/5547) diff --git a/client/keys/utils.go b/client/keys/utils.go index acf831207b10..b912f48a173c 100644 --- a/client/keys/utils.go +++ b/client/keys/utils.go @@ -38,16 +38,7 @@ func NewInMemoryKeyBase() keys.Keybase { return keys.NewInMemory() } // NewKeyBaseFromHomeFlag initializes a keyring based on configuration. Keybase // options can be applied when generating this new Keybase. func NewKeyringFromHomeFlag(input io.Reader, opts ...keys.KeybaseOption) (keys.Keybase, error) { - return NewKeyringFromDir(sdk.GetConfig().GetKeyringServiceName(), viper.GetString(flags.FlagHome), input, opts...) -} - -// NewKeyBaseFromDir initializes a keyring at the given directory. -// If the viper flag flags.FlagKeyringBackend is set to file, it returns an on-disk keyring with -// CLI prompt support only. If flags.FlagKeyringBackend is set to test it will return an on-disk, -// password-less keyring that could be used for testing purposes. -func NewKeyringFromDir(keyringServiceName string, rootDir string, input io.Reader, opts ...keys.KeybaseOption) (keys.Keybase, error) { - keyringBackend := viper.GetString(flags.FlagKeyringBackend) - return keys.NewKeyring(keyringServiceName, keyringBackend, rootDir, input, opts...) + return keys.NewKeyring(sdk.GetConfig().GetKeyringServiceName(), viper.GetString(flags.FlagKeyringBackend), viper.GetString(flags.FlagHome), input, opts...) } func getLazyKeyBaseFromDir(rootDir string, opts ...keys.KeybaseOption) (keys.Keybase, error) { diff --git a/client/keys/utils_test.go b/client/keys/utils_test.go deleted file mode 100644 index f0084ee330ec..000000000000 --- a/client/keys/utils_test.go +++ /dev/null @@ -1,26 +0,0 @@ -package keys - -import ( - "path/filepath" - "strings" - "testing" - - "github.com/spf13/viper" - "github.com/stretchr/testify/require" - - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/tests" - sdk "github.com/cosmos/cosmos-sdk/types" -) - -func TestNewKeyringFromDir(t *testing.T) { - dir, cleanup := tests.NewTestCaseDir(t) - defer cleanup() - viper.Set(flags.FlagKeyringBackend, flags.KeyringBackendTest) - _, err := NewKeyringFromDir(sdk.DefaultKeyringServiceName, filepath.Join(dir, "test"), nil) - require.NoError(t, err) - viper.Set(flags.FlagKeyringBackend, flags.KeyringBackendFile) - buf := strings.NewReader("password\npassword\n") - _, err = NewKeyringFromDir(sdk.DefaultKeyringServiceName, filepath.Join(dir, "test"), buf) - require.NoError(t, err) -} diff --git a/x/auth/client/cli/tx_multisign.go b/x/auth/client/cli/tx_multisign.go index e4b4133ad68a..e622febe74b2 100644 --- a/x/auth/client/cli/tx_multisign.go +++ b/x/auth/client/cli/tx_multisign.go @@ -11,13 +11,11 @@ import ( "github.com/spf13/viper" "github.com/tendermint/tendermint/crypto/multisig" - "github.com/tendermint/tendermint/libs/cli" "github.com/cosmos/cosmos-sdk/client/context" "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/keys" "github.com/cosmos/cosmos-sdk/codec" - crkeys "github.com/cosmos/cosmos-sdk/crypto/keys" + "github.com/cosmos/cosmos-sdk/crypto/keys" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/version" "github.com/cosmos/cosmos-sdk/x/auth/client/utils" @@ -68,17 +66,18 @@ func makeMultiSignCmd(cdc *codec.Codec) func(cmd *cobra.Command, args []string) } inBuf := bufio.NewReader(cmd.InOrStdin()) - keybase, err := keys.NewKeyringFromDir(sdk.GetConfig().GetKeyringServiceName(), viper.GetString(cli.HomeFlag), inBuf) + kb, err := keys.NewKeyring(sdk.GetConfig().GetKeyringServiceName(), + viper.GetString(flags.FlagKeyringBackend), viper.GetString(flags.FlagHome), inBuf) if err != nil { return } - multisigInfo, err := keybase.Get(args[1]) + multisigInfo, err := kb.Get(args[1]) if err != nil { return } - if multisigInfo.GetType() != crkeys.TypeMulti { - return fmt.Errorf("%q must be of type %s: %s", args[1], crkeys.TypeMulti, multisigInfo.GetType()) + if multisigInfo.GetType() != keys.TypeMulti { + return fmt.Errorf("%q must be of type %s: %s", args[1], keys.TypeMulti, multisigInfo.GetType()) } multisigPub := multisigInfo.GetPubKey().(multisig.PubKeyMultisigThreshold) diff --git a/x/genutil/client/cli/gentx.go b/x/genutil/client/cli/gentx.go index e701a7f440c6..fc5de44973b3 100644 --- a/x/genutil/client/cli/gentx.go +++ b/x/genutil/client/cli/gentx.go @@ -21,9 +21,8 @@ import ( "github.com/cosmos/cosmos-sdk/client/context" "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/keys" "github.com/cosmos/cosmos-sdk/codec" - kbkeys "github.com/cosmos/cosmos-sdk/crypto/keys" + "github.com/cosmos/cosmos-sdk/crypto/keys" "github.com/cosmos/cosmos-sdk/server" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" @@ -94,7 +93,8 @@ func GenTxCmd(ctx *server.Context, cdc *codec.Codec, mbm module.BasicManager, sm } inBuf := bufio.NewReader(cmd.InOrStdin()) - kb, err := keys.NewKeyringFromDir(sdk.GetConfig().GetKeyringServiceName(), viper.GetString(flagClientHome), inBuf) + kb, err := keys.NewKeyring(sdk.GetConfig().GetKeyringServiceName(), + viper.GetString(flags.FlagKeyringBackend), viper.GetString(flagClientHome), inBuf) if err != nil { return errors.Wrap(err, "failed to initialize keybase") } @@ -137,7 +137,7 @@ func GenTxCmd(ctx *server.Context, cdc *codec.Codec, mbm module.BasicManager, sm return errors.Wrap(err, "failed to build create-validator message") } - if key.GetType() == kbkeys.TypeOffline || key.GetType() == kbkeys.TypeMulti { + if key.GetType() == keys.TypeOffline || key.GetType() == keys.TypeMulti { fmt.Println("Offline key passed in. Use `tx sign` command to sign:") return utils.PrintUnsignedStdTx(txBldr, cliCtx, []sdk.Msg{msg}) } From 32b540d0b995cd17bd23716fa0a0b94d0eb731e5 Mon Sep 17 00:00:00 2001 From: Alessio Treglia Date: Wed, 22 Jan 2020 17:00:15 +0000 Subject: [PATCH 8/8] Remove NewKeyringFromHomeFlag --- CHANGELOG.md | 4 ++-- client/context/context.go | 10 +++++----- client/flags/flags.go | 7 +++---- client/keys/add.go | 2 +- client/keys/add_ledger_test.go | 4 ++-- client/keys/add_test.go | 4 +++- client/keys/delete.go | 4 +++- client/keys/delete_test.go | 5 +++-- client/keys/export.go | 6 +++++- client/keys/export_test.go | 3 ++- client/keys/import.go | 6 +++++- client/keys/import_test.go | 4 +++- client/keys/list.go | 4 +++- client/keys/list_test.go | 3 ++- client/keys/root_test.go | 3 ++- client/keys/show.go | 2 +- client/keys/show_test.go | 2 +- client/keys/utils.go | 8 -------- x/auth/types/txbuilder.go | 16 ++++++++-------- 19 files changed, 54 insertions(+), 43 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6b77c28c3385..58b5577a6cbc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -100,10 +100,10 @@ if the provided arguments are invalid. `StdTx.Signatures` to get back the array of StdSignatures `[]StdSignature`. * (modules) [\#5299](https://github.com/cosmos/cosmos-sdk/pull/5299) `HandleDoubleSign` along with params `MaxEvidenceAge` and `DoubleSignJailEndTime` have moved from the `x/slashing` module to the `x/evidence` module. -* (keys) [\#4941](https://github.com/cosmos/cosmos-sdk/issues/4941) Keybase concrete types constructors such as `NewKeyringFromHomeFlag`, `NewKeyBaseFromDir`, or `NewInMemory` +* (keys) [\#4941](https://github.com/cosmos/cosmos-sdk/issues/4941) Keybase concrete types constructors such as `NewKeyBaseFromDir` and `NewInMemory` now accept optional parameters of type `KeybaseOption`. These optional parameters are also added on the keys subcommands functions, which are now public, and allows these options to be set on the commands or ignored to default to previous behavior. - Furthermore, the `NewKeyBaseFromHomeFlag` constructor has been removed [\#5547](https://github.com/cosmos/cosmos-sdk/pull/5547) +* [\#5547](https://github.com/cosmos/cosmos-sdk/pull/5547) `NewKeyBaseFromHomeFlag` constructor has been removed. * [\#5439](https://github.com/cosmos/cosmos-sdk/pull/5439) Further modularization was done to the `keybase` package to make it more suitable for use with different key formats and algorithms: * The `WithKeygenFunc` function added as a `KeybaseOption` which allows a custom bytes to key diff --git a/client/context/context.go b/client/context/context.go index 6ea577a31005..c6699c9065eb 100644 --- a/client/context/context.go +++ b/client/context/context.go @@ -14,9 +14,8 @@ import ( rpcclient "github.com/tendermint/tendermint/rpc/client" "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/keys" "github.com/cosmos/cosmos-sdk/codec" - cryptokeys "github.com/cosmos/cosmos-sdk/crypto/keys" + "github.com/cosmos/cosmos-sdk/crypto/keys" sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -26,7 +25,7 @@ type CLIContext struct { FromAddress sdk.AccAddress Client rpcclient.Client ChainID string - Keybase cryptokeys.Keybase + Keybase keys.Keybase Input io.Reader Output io.Writer OutputFormat string @@ -275,12 +274,13 @@ func GetFromFields(input io.Reader, from string, genOnly bool) (sdk.AccAddress, return addr, "", nil } - keybase, err := keys.NewKeyringFromHomeFlag(input) + keybase, err := keys.NewKeyring(sdk.GetConfig().GetKeyringServiceName(), + viper.GetString(flags.FlagKeyringBackend), viper.GetString(flags.FlagHome), input) if err != nil { return nil, "", err } - var info cryptokeys.Info + var info keys.Info if addr, err := sdk.AccAddressFromBech32(from); err == nil { info, err = keybase.GetByAddress(addr) if err != nil { diff --git a/client/flags/flags.go b/client/flags/flags.go index ea2a5baa431a..2cdaa5f2137f 100644 --- a/client/flags/flags.go +++ b/client/flags/flags.go @@ -9,6 +9,8 @@ import ( "github.com/spf13/viper" tmcli "github.com/tendermint/tendermint/libs/cli" + + "github.com/cosmos/cosmos-sdk/crypto/keys" ) // nolint @@ -21,10 +23,7 @@ const ( GasFlagAuto = "auto" // DefaultKeyringBackend - DefaultKeyringBackend = KeyringBackendOS - KeyringBackendFile = "file" - KeyringBackendOS = "os" - KeyringBackendTest = "test" + DefaultKeyringBackend = keys.BackendOS // BroadcastBlock defines a tx broadcasting mode where the client waits for // the tx to be committed in a block. diff --git a/client/keys/add.go b/client/keys/add.go index 60f4dfe20060..995dfa74e859 100644 --- a/client/keys/add.go +++ b/client/keys/add.go @@ -86,7 +86,7 @@ func getKeybase(transient bool, buf io.Reader) (keys.Keybase, error) { return keys.NewInMemory(), nil } - return NewKeyringFromHomeFlag(buf) + return keys.NewKeyring(sdk.GetConfig().GetKeyringServiceName(), viper.GetString(flags.FlagKeyringBackend), viper.GetString(flags.FlagHome), buf) } func runAddCmd(cmd *cobra.Command, args []string) error { diff --git a/client/keys/add_ledger_test.go b/client/keys/add_ledger_test.go index 2ada0e113581..68c0390c8662 100644 --- a/client/keys/add_ledger_test.go +++ b/client/keys/add_ledger_test.go @@ -51,7 +51,7 @@ func Test_runAddCmdLedgerWithCustomCoinType(t *testing.T) { require.NoError(t, runAddCmd(cmd, []string{"keyname1"})) // Now check that it has been stored properly - kb, err := NewKeyringFromHomeFlag(mockIn) + kb, err := keys.NewKeyring(sdk.GetConfig().GetKeyringServiceName(), viper.GetString(flags.FlagKeyringBackend), viper.GetString(flags.FlagHome), mockIn) require.NoError(t, err) require.NotNil(t, kb) defer func() { @@ -98,7 +98,7 @@ func Test_runAddCmdLedger(t *testing.T) { require.NoError(t, runAddCmd(cmd, []string{"keyname1"})) // Now check that it has been stored properly - kb, err := NewKeyringFromHomeFlag(mockIn) + kb, err := keys.NewKeyring(sdk.GetConfig().GetKeyringServiceName(), viper.GetString(flags.FlagKeyringBackend), kbHome, mockIn) require.NoError(t, err) require.NotNil(t, kb) defer func() { diff --git a/client/keys/add_test.go b/client/keys/add_test.go index d1a7dd04b3e0..0745ba620ad4 100644 --- a/client/keys/add_test.go +++ b/client/keys/add_test.go @@ -10,7 +10,9 @@ import ( "github.com/tendermint/tendermint/libs/cli" "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/cosmos/cosmos-sdk/crypto/keys" "github.com/cosmos/cosmos-sdk/tests" + sdk "github.com/cosmos/cosmos-sdk/types" ) func Test_runAddCmdBasic(t *testing.T) { @@ -29,7 +31,7 @@ func Test_runAddCmdBasic(t *testing.T) { mockIn.Reset("testpass1\ntestpass1\n") } else { mockIn.Reset("y\n") - kb, err := NewKeyringFromHomeFlag(mockIn) + kb, err := keys.NewKeyring(sdk.GetConfig().GetKeyringServiceName(), viper.GetString(flags.FlagKeyringBackend), kbHome, mockIn) require.NoError(t, err) defer func() { kb.Delete("keyname1", "", false) diff --git a/client/keys/delete.go b/client/keys/delete.go index 8e607a319ba4..1bfc6b10db46 100644 --- a/client/keys/delete.go +++ b/client/keys/delete.go @@ -4,8 +4,10 @@ import ( "bufio" "errors" + "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/client/input" "github.com/cosmos/cosmos-sdk/crypto/keys" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/spf13/cobra" "github.com/spf13/viper" @@ -41,7 +43,7 @@ private keys stored in a ledger device cannot be deleted with the CLI. func runDeleteCmd(cmd *cobra.Command, args []string) error { buf := bufio.NewReader(cmd.InOrStdin()) - kb, err := NewKeyringFromHomeFlag(buf) + kb, err := keys.NewKeyring(sdk.GetConfig().GetKeyringServiceName(), viper.GetString(flags.FlagKeyringBackend), viper.GetString(flags.FlagHome), buf) if err != nil { return err } diff --git a/client/keys/delete_test.go b/client/keys/delete_test.go index eeafb40baa49..c9ac44b4a14f 100644 --- a/client/keys/delete_test.go +++ b/client/keys/delete_test.go @@ -11,6 +11,7 @@ import ( "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/crypto/keys" "github.com/cosmos/cosmos-sdk/tests" + sdk "github.com/cosmos/cosmos-sdk/types" ) func Test_runDeleteCmd(t *testing.T) { @@ -26,7 +27,7 @@ func Test_runDeleteCmd(t *testing.T) { fakeKeyName1 := "runDeleteCmd_Key1" fakeKeyName2 := "runDeleteCmd_Key2" if !runningUnattended { - kb, err := NewKeyringFromHomeFlag(mockIn) + kb, err := keys.NewKeyring(sdk.GetConfig().GetKeyringServiceName(), viper.GetString(flags.FlagKeyringBackend), viper.GetString(flags.FlagHome), mockIn) require.NoError(t, err) defer func() { kb.Delete("runDeleteCmd_Key1", "", false) @@ -40,7 +41,7 @@ func Test_runDeleteCmd(t *testing.T) { viper.Set(flags.FlagHome, kbHome) // Now - kb, err := NewKeyringFromHomeFlag(mockIn) + kb, err := keys.NewKeyring(sdk.GetConfig().GetKeyringServiceName(), viper.GetString(flags.FlagKeyringBackend), kbHome, mockIn) require.NoError(t, err) if runningUnattended { mockIn.Reset("testpass1\ntestpass1\n") diff --git a/client/keys/export.go b/client/keys/export.go index 761cdc561c37..1051335b98e9 100644 --- a/client/keys/export.go +++ b/client/keys/export.go @@ -4,8 +4,12 @@ import ( "bufio" "github.com/spf13/cobra" + "github.com/spf13/viper" + "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/client/input" + "github.com/cosmos/cosmos-sdk/crypto/keys" + sdk "github.com/cosmos/cosmos-sdk/types" ) // ExportKeyCommand exports private keys from the key store. @@ -21,7 +25,7 @@ func ExportKeyCommand() *cobra.Command { func runExportCmd(cmd *cobra.Command, args []string) error { buf := bufio.NewReader(cmd.InOrStdin()) - kb, err := NewKeyringFromHomeFlag(buf) + kb, err := keys.NewKeyring(sdk.GetConfig().GetKeyringServiceName(), viper.GetString(flags.FlagKeyringBackend), viper.GetString(flags.FlagHome), buf) if err != nil { return err } diff --git a/client/keys/export_test.go b/client/keys/export_test.go index 579cd829d170..32c57df656d6 100644 --- a/client/keys/export_test.go +++ b/client/keys/export_test.go @@ -9,6 +9,7 @@ import ( "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/crypto/keys" "github.com/cosmos/cosmos-sdk/tests" + sdk "github.com/cosmos/cosmos-sdk/types" ) func Test_runExportCmd(t *testing.T) { @@ -22,7 +23,7 @@ func Test_runExportCmd(t *testing.T) { viper.Set(flags.FlagHome, kbHome) // create a key - kb, err := NewKeyringFromHomeFlag(mockIn) + kb, err := keys.NewKeyring(sdk.GetConfig().GetKeyringServiceName(), viper.GetString(flags.FlagKeyringBackend), viper.GetString(flags.FlagHome), mockIn) require.NoError(t, err) if !runningUnattended { defer func() { diff --git a/client/keys/import.go b/client/keys/import.go index 7fb323c77478..289172168904 100644 --- a/client/keys/import.go +++ b/client/keys/import.go @@ -5,8 +5,12 @@ import ( "io/ioutil" "github.com/spf13/cobra" + "github.com/spf13/viper" + "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/client/input" + "github.com/cosmos/cosmos-sdk/crypto/keys" + sdk "github.com/cosmos/cosmos-sdk/types" ) // ImportKeyCommand imports private keys from a keyfile. @@ -22,7 +26,7 @@ func ImportKeyCommand() *cobra.Command { func runImportCmd(cmd *cobra.Command, args []string) error { buf := bufio.NewReader(cmd.InOrStdin()) - kb, err := NewKeyringFromHomeFlag(buf) + kb, err := keys.NewKeyring(sdk.GetConfig().GetKeyringServiceName(), viper.GetString(flags.FlagKeyringBackend), viper.GetString(flags.FlagHome), buf) if err != nil { return err } diff --git a/client/keys/import_test.go b/client/keys/import_test.go index aad96b83e8fe..8ec384c0c7b8 100644 --- a/client/keys/import_test.go +++ b/client/keys/import_test.go @@ -9,7 +9,9 @@ import ( "github.com/stretchr/testify/require" "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/cosmos/cosmos-sdk/crypto/keys" "github.com/cosmos/cosmos-sdk/tests" + sdk "github.com/cosmos/cosmos-sdk/types" ) func Test_runImportCmd(t *testing.T) { @@ -23,7 +25,7 @@ func Test_runImportCmd(t *testing.T) { viper.Set(flags.FlagHome, kbHome) if !runningUnattended { - kb, err := NewKeyringFromHomeFlag(mockIn) + kb, err := keys.NewKeyring(sdk.GetConfig().GetKeyringServiceName(), viper.GetString(flags.FlagKeyringBackend), viper.GetString(flags.FlagHome), mockIn) require.NoError(t, err) defer func() { kb.Delete("keyname1", "", false) diff --git a/client/keys/list.go b/client/keys/list.go index 1954a46de35c..104414b4164b 100644 --- a/client/keys/list.go +++ b/client/keys/list.go @@ -5,6 +5,8 @@ import ( "github.com/spf13/viper" "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/cosmos/cosmos-sdk/crypto/keys" + sdk "github.com/cosmos/cosmos-sdk/types" ) const flagListNames = "list-names" @@ -24,7 +26,7 @@ along with their associated name and address.`, } func runListCmd(cmd *cobra.Command, _ []string) error { - kb, err := NewKeyringFromHomeFlag(cmd.InOrStdin()) + kb, err := keys.NewKeyring(sdk.GetConfig().GetKeyringServiceName(), viper.GetString(flags.FlagKeyringBackend), viper.GetString(flags.FlagHome), cmd.InOrStdin()) if err != nil { return err } diff --git a/client/keys/list_test.go b/client/keys/list_test.go index 7ea8b3fb69d1..ac3953924b1b 100644 --- a/client/keys/list_test.go +++ b/client/keys/list_test.go @@ -10,6 +10,7 @@ import ( "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/crypto/keys" "github.com/cosmos/cosmos-sdk/tests" + sdk "github.com/cosmos/cosmos-sdk/types" ) func Test_runListCmd(t *testing.T) { @@ -31,7 +32,7 @@ func Test_runListCmd(t *testing.T) { viper.Set(flags.FlagHome, kbHome2) mockIn, _, _ := tests.ApplyMockIO(cmdBasic) - kb, err := NewKeyringFromHomeFlag(mockIn) + kb, err := keys.NewKeyring(sdk.GetConfig().GetKeyringServiceName(), viper.GetString(flags.FlagKeyringBackend), viper.GetString(flags.FlagHome), mockIn) require.NoError(t, err) if runningUnattended { mockIn.Reset("testpass1\ntestpass1\n") diff --git a/client/keys/root_test.go b/client/keys/root_test.go index 49681b17e95f..50bb3a5975c1 100644 --- a/client/keys/root_test.go +++ b/client/keys/root_test.go @@ -8,6 +8,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/cosmos/cosmos-sdk/crypto/keys" ) func TestCommands(t *testing.T) { @@ -19,6 +20,6 @@ func TestCommands(t *testing.T) { } func TestMain(m *testing.M) { - viper.Set(flags.FlagKeyringBackend, flags.KeyringBackendTest) + viper.Set(flags.FlagKeyringBackend, keys.BackendTest) os.Exit(m.Run()) } diff --git a/client/keys/show.go b/client/keys/show.go index e848a2208bb3..143d49bec885 100644 --- a/client/keys/show.go +++ b/client/keys/show.go @@ -57,7 +57,7 @@ consisting of all the keys provided by name and multisig threshold.`, func runShowCmd(cmd *cobra.Command, args []string) (err error) { var info keys.Info - kb, err := NewKeyringFromHomeFlag(cmd.InOrStdin()) + kb, err := keys.NewKeyring(sdk.GetConfig().GetKeyringServiceName(), viper.GetString(flags.FlagKeyringBackend), viper.GetString(flags.FlagHome), cmd.InOrStdin()) if err != nil { return err } diff --git a/client/keys/show_test.go b/client/keys/show_test.go index 6e261bd1e740..b8e7a8d5c73d 100644 --- a/client/keys/show_test.go +++ b/client/keys/show_test.go @@ -49,7 +49,7 @@ func Test_runShowCmd(t *testing.T) { fakeKeyName1 := "runShowCmd_Key1" fakeKeyName2 := "runShowCmd_Key2" - kb, err := NewKeyringFromHomeFlag(mockIn) + kb, err := keys.NewKeyring(sdk.GetConfig().GetKeyringServiceName(), viper.GetString(flags.FlagKeyringBackend), viper.GetString(flags.FlagHome), mockIn) require.NoError(t, err) defer func() { kb.Delete("runShowCmd_Key1", "", false) diff --git a/client/keys/utils.go b/client/keys/utils.go index b912f48a173c..008d3ccf7822 100644 --- a/client/keys/utils.go +++ b/client/keys/utils.go @@ -2,7 +2,6 @@ package keys import ( "fmt" - "io" "path/filepath" "github.com/99designs/keyring" @@ -12,7 +11,6 @@ import ( "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/crypto/keys" - sdk "github.com/cosmos/cosmos-sdk/types" ) // available output formats. @@ -35,12 +33,6 @@ func NewKeyBaseFromDir(rootDir string, opts ...keys.KeybaseOption) (keys.Keybase // NewInMemoryKeyBase returns a storage-less keybase. func NewInMemoryKeyBase() keys.Keybase { return keys.NewInMemory() } -// NewKeyBaseFromHomeFlag initializes a keyring based on configuration. Keybase -// options can be applied when generating this new Keybase. -func NewKeyringFromHomeFlag(input io.Reader, opts ...keys.KeybaseOption) (keys.Keybase, error) { - return keys.NewKeyring(sdk.GetConfig().GetKeyringServiceName(), viper.GetString(flags.FlagKeyringBackend), viper.GetString(flags.FlagHome), input, opts...) -} - func getLazyKeyBaseFromDir(rootDir string, opts ...keys.KeybaseOption) (keys.Keybase, error) { return keys.New(defaultKeyDBName, filepath.Join(rootDir, "keys"), opts...), nil } diff --git a/x/auth/types/txbuilder.go b/x/auth/types/txbuilder.go index b5f7eee8c68b..cc2387285368 100644 --- a/x/auth/types/txbuilder.go +++ b/x/auth/types/txbuilder.go @@ -10,15 +10,14 @@ import ( "github.com/spf13/viper" "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/keys" - crkeys "github.com/cosmos/cosmos-sdk/crypto/keys" + "github.com/cosmos/cosmos-sdk/crypto/keys" sdk "github.com/cosmos/cosmos-sdk/types" ) // TxBuilder implements a transaction context created in SDK modules. type TxBuilder struct { txEncoder sdk.TxEncoder - keybase crkeys.Keybase + keybase keys.Keybase accountNumber uint64 sequence uint64 gas uint64 @@ -54,7 +53,7 @@ func NewTxBuilder( // NewTxBuilderFromCLI returns a new initialized TxBuilder with parameters from // the command line using Viper. func NewTxBuilderFromCLI(input io.Reader) TxBuilder { - kb, err := keys.NewKeyringFromHomeFlag(input) + kb, err := keys.NewKeyring(sdk.GetConfig().GetKeyringServiceName(), viper.GetString(flags.FlagKeyringBackend), viper.GetString(flags.FlagHome), input) if err != nil { panic(err) } @@ -91,7 +90,7 @@ func (bldr TxBuilder) Gas() uint64 { return bldr.gas } func (bldr TxBuilder) GasAdjustment() float64 { return bldr.gasAdjustment } // Keybase returns the keybase -func (bldr TxBuilder) Keybase() crkeys.Keybase { return bldr.keybase } +func (bldr TxBuilder) Keybase() keys.Keybase { return bldr.keybase } // SimulateAndExecute returns the option to simulate and then execute the transaction // using the gas from the simulation results @@ -150,7 +149,7 @@ func (bldr TxBuilder) WithGasPrices(gasPrices string) TxBuilder { } // WithKeybase returns a copy of the context with updated keybase. -func (bldr TxBuilder) WithKeybase(keybase crkeys.Keybase) TxBuilder { +func (bldr TxBuilder) WithKeybase(keybase keys.Keybase) TxBuilder { bldr.keybase = keybase return bldr } @@ -273,10 +272,11 @@ func (bldr TxBuilder) SignStdTx(name, passphrase string, stdTx StdTx, appendSig } // MakeSignature builds a StdSignature given keybase, key name, passphrase, and a StdSignMsg. -func MakeSignature(keybase crkeys.Keybase, name, passphrase string, +func MakeSignature(keybase keys.Keybase, name, passphrase string, msg StdSignMsg) (sig StdSignature, err error) { + if keybase == nil { - keybase, err = keys.NewKeyringFromHomeFlag(os.Stdin) + keybase, err = keys.NewKeyring(sdk.GetConfig().GetKeyringServiceName(), viper.GetString(flags.FlagKeyringBackend), viper.GetString(flags.FlagHome), os.Stdin) if err != nil { return }