diff --git a/client/keys/add_ledger_test.go b/client/keys/add_ledger_test.go index 90ffc16b78f5..e46b7e26fcc4 100644 --- a/client/keys/add_ledger_test.go +++ b/client/keys/add_ledger_test.go @@ -1,4 +1,5 @@ -//+build ledger test_ledger_mock +//go:build ledger || test_ledger_mock +// +build ledger test_ledger_mock package keys @@ -194,7 +195,7 @@ func Test_runAddCmdLedgerDryRun(t *testing.T) { } else { _, err = kb.Key("testkey") require.Error(t, err) - require.Equal(t, "testkey: key not found", err.Error()) + require.Equal(t, "testkey.info: key not found", err.Error()) } }) } diff --git a/client/keys/add_test.go b/client/keys/add_test.go index 6368fec6f1b9..edc749122259 100644 --- a/client/keys/add_test.go +++ b/client/keys/add_test.go @@ -8,7 +8,6 @@ import ( "testing" "github.com/stretchr/testify/require" - "github.com/tendermint/tendermint/libs/cli" "github.com/cosmos/cosmos-sdk/client" @@ -226,7 +225,7 @@ func Test_runAddCmdDryRun(t *testing.T) { } else { _, err = kb.Key("testkey") require.Error(t, err) - require.Equal(t, "testkey: key not found", err.Error()) + require.Equal(t, "testkey.info: key not found", err.Error()) } }) } diff --git a/client/keys/delete.go b/client/keys/delete.go index 939ede062303..46a269091dab 100644 --- a/client/keys/delete.go +++ b/client/keys/delete.go @@ -3,11 +3,11 @@ package keys import ( "bufio" + "github.com/spf13/cobra" + "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/input" "github.com/cosmos/cosmos-sdk/crypto/keyring" - - "github.com/spf13/cobra" ) const ( diff --git a/client/keys/delete_test.go b/client/keys/delete_test.go index 2250eac5ce9c..b87a98da5a80 100644 --- a/client/keys/delete_test.go +++ b/client/keys/delete_test.go @@ -53,7 +53,7 @@ func Test_runDeleteCmd(t *testing.T) { err = cmd.ExecuteContext(ctx) require.Error(t, err) - require.EqualError(t, err, "blah: key not found") + require.EqualError(t, err, "blah.info: key not found") // User confirmation missing cmd.SetArgs([]string{ diff --git a/client/keys/rename.go b/client/keys/rename.go index 18326c8d356a..f703c60f20eb 100644 --- a/client/keys/rename.go +++ b/client/keys/rename.go @@ -4,10 +4,11 @@ import ( "bufio" "fmt" + "github.com/spf13/cobra" + "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/input" "github.com/cosmos/cosmos-sdk/crypto/keyring" - "github.com/spf13/cobra" ) // RenameKeyCommand renames a key from the key store. diff --git a/client/keys/rename_test.go b/client/keys/rename_test.go index cf2e859648db..b32e08c096f9 100644 --- a/client/keys/rename_test.go +++ b/client/keys/rename_test.go @@ -49,7 +49,7 @@ func Test_runRenameCmd(t *testing.T) { cmd.SetArgs([]string{"blah", "blaah", fmt.Sprintf("--%s=%s", flags.FlagHome, kbHome)}) err = cmd.ExecuteContext(ctx) require.Error(t, err) - require.EqualError(t, err, "blah: key not found") + require.EqualError(t, err, "blah.info: key not found") // User confirmation missing cmd.SetArgs([]string{ diff --git a/crypto/keyring/keyring.go b/crypto/keyring/keyring.go index 156147eaaf45..7686d18cdd6e 100644 --- a/crypto/keyring/keyring.go +++ b/crypto/keyring/keyring.go @@ -11,7 +11,6 @@ import ( "strings" "github.com/99designs/keyring" - "github.com/cosmos/go-bip39" "github.com/pkg/errors" "github.com/tendermint/crypto/bcrypt" tmcrypto "github.com/tendermint/tendermint/crypto" @@ -24,6 +23,7 @@ import ( "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/cosmos/go-bip39" ) // Backend options for Keyring @@ -440,6 +440,8 @@ func (ks keystore) Rename(oldName, newName string) error { return nil } +// Delete deletes a key in the keyring. `uid` represents the key name, without +// the `.info` suffix. func (ks keystore) Delete(uid string) error { k, err := ks.Key(uid) if err != nil { @@ -456,7 +458,7 @@ func (ks keystore) Delete(uid string) error { return err } - err = ks.db.Remove(uid) + err = ks.db.Remove(infoKey(uid)) if err != nil { return err } @@ -770,7 +772,7 @@ func (ks keystore) writeRecord(k *Record) error { return err } - key := k.Name + key := infoKey(k.Name) exists, err := ks.existsInDb(addr, key) if err != nil { @@ -877,6 +879,9 @@ func (ks keystore) MigrateAll() (bool, error) { // migrate converts keyring.Item from amino to proto serialization format. func (ks keystore) migrate(key string) (*Record, bool, error) { + if !(strings.HasSuffix(key, infoSuffix)) && !(strings.HasPrefix(key, sdk.Bech32PrefixAccAddr)) { + key = infoKey(key) + } item, err := ks.db.Get(key) if err != nil { return nil, false, wrapKeyNotFound(err, key) diff --git a/crypto/keyring/keyring_test.go b/crypto/keyring/keyring_test.go index 6fc968240b21..3afd35676fb7 100644 --- a/crypto/keyring/keyring_test.go +++ b/crypto/keyring/keyring_test.go @@ -7,7 +7,7 @@ import ( "testing" "github.com/99designs/keyring" - bip39 "github.com/cosmos/go-bip39" + "github.com/cosmos/go-bip39" "github.com/stretchr/testify/require" "github.com/cosmos/cosmos-sdk/codec" @@ -432,7 +432,7 @@ func TestKeyringKeybaseExportImportPrivKey(t *testing.T) { // try export non existing key _, err = kb.ExportPrivKeyArmor("john3", "wrongpassword") - require.EqualError(t, err, "john3: key not found") + require.EqualError(t, err, "john3.info: key not found") } func TestInMemoryLanguage(t *testing.T) { diff --git a/crypto/keyring/legacy_info.go b/crypto/keyring/legacy_info.go index 0480fa5eb262..8b05b6a0312c 100644 --- a/crypto/keyring/legacy_info.go +++ b/crypto/keyring/legacy_info.go @@ -43,6 +43,8 @@ type legacyLocalInfo struct { Algo hd.PubKeyType `json:"algo"` } +func infoKey(name string) string { return fmt.Sprintf("%s.%s", name, infoSuffix) } + // GetType implements Info interface func (i legacyLocalInfo) GetType() KeyType { return TypeLocal diff --git a/crypto/keyring/types.go b/crypto/keyring/types.go index 307eb9b3f097..0b893ea4cccc 100644 --- a/crypto/keyring/types.go +++ b/crypto/keyring/types.go @@ -37,6 +37,7 @@ const ( // bits of entropy to draw when creating a mnemonic defaultEntropySize = 256 addressSuffix = "address" + infoSuffix = "info" ) // KeyType reflects a human-readable type for key listing. diff --git a/server/init.go b/server/init.go index e00ca1d35a70..1b6e0cdc51d7 100644 --- a/server/init.go +++ b/server/init.go @@ -3,9 +3,8 @@ package server import ( "fmt" - "github.com/cosmos/cosmos-sdk/crypto/keyring" - "github.com/cosmos/cosmos-sdk/codec" + "github.com/cosmos/cosmos-sdk/crypto/keyring" sdk "github.com/cosmos/cosmos-sdk/types" )