Merge PR #3551: Code cleanup, small coverage boost
This commit is contained in:
parent
cf238f709a
commit
dff6d0e462
|
@ -79,6 +79,9 @@ func NewKeyBaseFromDir(rootDir string) (keys.Keybase, error) {
|
|||
return getLazyKeyBaseFromDir(rootDir)
|
||||
}
|
||||
|
||||
// NewInMemoryKeyBase returns a storage-less keybase.
|
||||
func NewInMemoryKeyBase() keys.Keybase { return keys.NewInMemory() }
|
||||
|
||||
func getLazyKeyBaseFromDir(rootDir string) (keys.Keybase, error) {
|
||||
return keys.NewLazyKeybase(KeyDBName, filepath.Join(rootDir, "keys")), nil
|
||||
}
|
||||
|
|
|
@ -83,6 +83,9 @@ func New(db dbm.DB) Keybase {
|
|||
}
|
||||
}
|
||||
|
||||
// NewInMemory creates a new keybase on top of in-memory storage instance.
|
||||
func NewInMemory() Keybase { return dbKeybase{dbm.NewMemDB()} }
|
||||
|
||||
// CreateMnemonic generates a new key and persists it to storage, encrypted
|
||||
// using the provided password.
|
||||
// It returns the generated mnemonic and the key Info.
|
||||
|
|
|
@ -1,101 +1,21 @@
|
|||
package server
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
dbm "github.com/tendermint/tendermint/libs/db"
|
||||
"github.com/tendermint/tendermint/types"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys"
|
||||
|
||||
tmtypes "github.com/tendermint/tendermint/types"
|
||||
|
||||
clkeys "github.com/cosmos/cosmos-sdk/client/keys"
|
||||
"github.com/cosmos/cosmos-sdk/codec"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
)
|
||||
|
||||
// SimpleGenTx is a simple genesis tx
|
||||
type SimpleGenTx struct {
|
||||
Addr sdk.AccAddress `json:"addr"`
|
||||
}
|
||||
|
||||
//_____________________________________________________________________
|
||||
|
||||
// Generate a genesis transaction
|
||||
func SimpleAppGenTx(cdc *codec.Codec, pk crypto.PubKey) (
|
||||
appGenTx, cliPrint json.RawMessage, validator types.GenesisValidator, err error) {
|
||||
var addr sdk.AccAddress
|
||||
var secret string
|
||||
addr, secret, err = GenerateCoinKey()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var bz []byte
|
||||
simpleGenTx := SimpleGenTx{Addr: addr}
|
||||
bz, err = cdc.MarshalJSON(simpleGenTx)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
appGenTx = json.RawMessage(bz)
|
||||
mm := map[string]string{"secret": secret}
|
||||
bz, err = cdc.MarshalJSON(mm)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
cliPrint = json.RawMessage(bz)
|
||||
validator = tmtypes.GenesisValidator{
|
||||
PubKey: pk,
|
||||
Power: 10,
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// create the genesis app state
|
||||
func SimpleAppGenState(cdc *codec.Codec, genDoc tmtypes.GenesisDoc, appGenTxs []json.RawMessage) (
|
||||
appState json.RawMessage, err error) {
|
||||
|
||||
if len(appGenTxs) != 1 {
|
||||
err = errors.New("must provide a single genesis transaction")
|
||||
return
|
||||
}
|
||||
|
||||
var tx SimpleGenTx
|
||||
err = cdc.UnmarshalJSON(appGenTxs[0], &tx)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
appState = json.RawMessage(fmt.Sprintf(`{
|
||||
"accounts": [{
|
||||
"address": "%s",
|
||||
"coins": [
|
||||
{
|
||||
"denom": "mycoin",
|
||||
"amount": "9007199254740992"
|
||||
}
|
||||
]
|
||||
}]
|
||||
}`, tx.Addr))
|
||||
return
|
||||
}
|
||||
|
||||
//___________________________________________________________________________________________
|
||||
|
||||
// GenerateCoinKey returns the address of a public key, along with the secret
|
||||
// phrase to recover the private key.
|
||||
func GenerateCoinKey() (sdk.AccAddress, string, error) {
|
||||
|
||||
// construct an in-memory key store
|
||||
keybase := keys.New(
|
||||
dbm.NewMemDB(),
|
||||
)
|
||||
|
||||
// generate a private key, with recovery phrase
|
||||
info, secret, err := keybase.CreateMnemonic("name", keys.English, "pass", keys.Secp256k1)
|
||||
info, secret, err := clkeys.NewInMemoryKeyBase().CreateMnemonic(
|
||||
"name", keys.English, "pass", keys.Secp256k1)
|
||||
if err != nil {
|
||||
return sdk.AccAddress([]byte{}), "", err
|
||||
}
|
||||
|
@ -105,7 +25,8 @@ func GenerateCoinKey() (sdk.AccAddress, string, error) {
|
|||
|
||||
// GenerateSaveCoinKey returns the address of a public key, along with the secret
|
||||
// phrase to recover the private key.
|
||||
func GenerateSaveCoinKey(clientRoot, keyName, keyPass string, overwrite bool) (sdk.AccAddress, string, error) {
|
||||
func GenerateSaveCoinKey(clientRoot, keyName, keyPass string,
|
||||
overwrite bool) (sdk.AccAddress, string, error) {
|
||||
|
||||
// get the keystore from the client
|
||||
keybase, err := clkeys.NewKeyBaseFromDir(clientRoot)
|
||||
|
@ -127,6 +48,6 @@ func GenerateSaveCoinKey(clientRoot, keyName, keyPass string, overwrite bool) (s
|
|||
if err != nil {
|
||||
return sdk.AccAddress([]byte{}), "", err
|
||||
}
|
||||
addr := info.GetPubKey().Address()
|
||||
return sdk.AccAddress(addr), secret, nil
|
||||
|
||||
return sdk.AccAddress(info.GetPubKey().Address()), secret, nil
|
||||
}
|
||||
|
|
|
@ -0,0 +1,49 @@
|
|||
package server_test
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/client/keys"
|
||||
"github.com/cosmos/cosmos-sdk/server"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestGenerateCoinKey(t *testing.T) {
|
||||
addr, mnemonic, err := server.GenerateCoinKey()
|
||||
require.NoError(t, err)
|
||||
|
||||
// Test creation
|
||||
info, err := keys.NewInMemoryKeyBase().CreateAccount("xxx", mnemonic, "", "012345678", 0, 0)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, addr, info.GetAddress())
|
||||
}
|
||||
|
||||
func TestGenerateSaveCoinKey(t *testing.T) {
|
||||
dir, cleanup := tempdir(t)
|
||||
defer cleanup() // clean after itself
|
||||
// Remove the dir to that GenerateSaveCoinKey creates it automatically
|
||||
os.RemoveAll(dir)
|
||||
|
||||
addr, mnemonic, err := server.GenerateSaveCoinKey(dir, "keyname", "012345678", false)
|
||||
require.NoError(t, err)
|
||||
|
||||
// Test key was actually saved
|
||||
kb, err := keys.NewKeyBaseFromDir(dir)
|
||||
require.NoError(t, err)
|
||||
info, err := kb.Get("keyname")
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, addr, info.GetAddress())
|
||||
|
||||
// Test in-memory recovery
|
||||
info, err = keys.NewInMemoryKeyBase().CreateAccount("xxx", mnemonic, "", "012345678", 0, 0)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, addr, info.GetAddress())
|
||||
}
|
||||
|
||||
func tempdir(t *testing.T) (string, func()) {
|
||||
dir, err := ioutil.TempDir("", t.Name()+"_")
|
||||
require.NoError(t, err)
|
||||
return dir, func() { os.RemoveAll(dir) }
|
||||
}
|
Loading…
Reference in New Issue