feat: Support providing custom keyring for keystore. (#12453)
## Description Closes: #12438 --- ### Author Checklist *All items are required. Please add a note to the item if the item is not applicable and please add links to any relevant follow up issues.* I have... - [X] included the correct [type prefix](https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.json) in the PR title - [X] added `!` to the type prefix if API or client breaking change - [x] targeted the correct branch (see [PR Targeting](https://github.com/cosmos/cosmos-sdk/blob/main/CONTRIBUTING.md#pr-targeting)) - [x] provided a link to the relevant issue or specification - [x] followed the guidelines for [building modules](https://github.com/cosmos/cosmos-sdk/blob/main/docs/building-modules) - [x] included the necessary unit and integration [tests](https://github.com/cosmos/cosmos-sdk/blob/main/CONTRIBUTING.md#testing) - [x] added a changelog entry to `CHANGELOG.md` - [x] included comments for [documenting Go code](https://blog.golang.org/godoc) - [ ] updated the relevant documentation or specification - [x] reviewed "Files changed" and left comments if necessary - [ ] confirmed all CI checks have passed ### Reviewers Checklist *All items are required. Please add a note if the item is not applicable and please add your handle next to the items reviewed if you only reviewed selected items.* I have... - [ ] confirmed the correct [type prefix](https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.json) in the PR title - [ ] confirmed `!` in the type prefix if API or client breaking change - [ ] confirmed all author checklist items have been addressed - [ ] reviewed state machine logic - [ ] reviewed API design and naming - [ ] reviewed documentation is accurate - [ ] reviewed tests and test coverage - [ ] manually tested (if applicable)
This commit is contained in:
parent
fd7cdd6b7a
commit
0bf30983fb
@ -52,6 +52,7 @@ Ref: https://keepachangelog.com/en/1.0.0/
|
||||
* [#12089](https://github.com/cosmos/cosmos-sdk/pull/12089) Mark the `TipDecorator` as beta, don't include it in simapp by default.
|
||||
* [#12153](https://github.com/cosmos/cosmos-sdk/pull/12153) Add a new `NewSimulationManagerFromAppModules` constructor, to simplify simulation wiring.
|
||||
* [#12187](https://github.com/cosmos/cosmos-sdk/pull/12187) Add batch operation for x/nft module.
|
||||
* [#12453](https://github.com/cosmos/cosmos-sdk/pull/12453) Add `NewInMemoryWithKeyring` function which allows the creation of in memory `keystore` instances with a specified set of existing items.
|
||||
|
||||
### State Machine Breaking
|
||||
|
||||
|
||||
@ -150,7 +150,13 @@ type Options struct {
|
||||
// purposes and on-the-fly key generation.
|
||||
// Keybase options can be applied when generating this new Keybase.
|
||||
func NewInMemory(cdc codec.Codec, opts ...Option) Keyring {
|
||||
return newKeystore(keyring.NewArrayKeyring(nil), cdc, BackendMemory, opts...)
|
||||
return NewInMemoryWithKeyring(keyring.NewArrayKeyring(nil), cdc, opts...)
|
||||
}
|
||||
|
||||
// NewInMemoryWithKeyring returns an in memory keyring using the specified keyring.Keyring
|
||||
// as the backing keyring.
|
||||
func NewInMemoryWithKeyring(kr keyring.Keyring, cdc codec.Codec, opts ...Option) Keyring {
|
||||
return newKeystore(kr, cdc, BackendMemory, opts...)
|
||||
}
|
||||
|
||||
// New creates a new instance of a keyring.
|
||||
|
||||
@ -21,6 +21,7 @@ import (
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/multisig"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
)
|
||||
|
||||
@ -455,6 +456,49 @@ func TestInMemoryLanguage(t *testing.T) {
|
||||
require.Equal(t, "unsupported language: only english is supported", err.Error())
|
||||
}
|
||||
|
||||
func TestInMemoryWithKeyring(t *testing.T) {
|
||||
priv := cryptotypes.PrivKey(secp256k1.GenPrivKey())
|
||||
pub := priv.PubKey()
|
||||
|
||||
cdc := getCodec()
|
||||
_, err := NewLocalRecord("test record", priv, pub)
|
||||
|
||||
multi := multisig.NewLegacyAminoPubKey(
|
||||
1, []cryptotypes.PubKey{
|
||||
pub,
|
||||
},
|
||||
)
|
||||
|
||||
appName := "test-app"
|
||||
|
||||
legacyMultiInfo, err := NewLegacyMultiInfo(appName, multi)
|
||||
require.NoError(t, err)
|
||||
serializedLegacyMultiInfo := MarshalInfo(legacyMultiInfo)
|
||||
|
||||
kb := NewInMemoryWithKeyring(keyring.NewArrayKeyring([]keyring.Item{
|
||||
{
|
||||
Key: appName + ".info",
|
||||
Data: serializedLegacyMultiInfo,
|
||||
Description: "test description",
|
||||
},
|
||||
}), cdc)
|
||||
|
||||
t.Run("key exists", func(t *testing.T) {
|
||||
_, err := kb.Key(appName)
|
||||
require.NoError(t, err)
|
||||
})
|
||||
|
||||
t.Run("key deleted", func(t *testing.T) {
|
||||
err := kb.Delete(appName)
|
||||
require.NoError(t, err)
|
||||
|
||||
t.Run("key is gone", func(t *testing.T) {
|
||||
_, err := kb.Key(appName)
|
||||
require.Error(t, err)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func TestInMemoryCreateMultisig(t *testing.T) {
|
||||
cdc := getCodec()
|
||||
kb, err := New("keybasename", "memory", "", nil, cdc)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user