Skip to content

Commit dff6d0e

Browse files
Alessio Tregliajackzampolin
authored andcommitted
Merge PR #3551: Code cleanup, small coverage boost
1 parent cf238f7 commit dff6d0e

File tree

4 files changed

+61
-85
lines changed

4 files changed

+61
-85
lines changed

client/keys/utils.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,9 @@ func NewKeyBaseFromDir(rootDir string) (keys.Keybase, error) {
7979
return getLazyKeyBaseFromDir(rootDir)
8080
}
8181

82+
// NewInMemoryKeyBase returns a storage-less keybase.
83+
func NewInMemoryKeyBase() keys.Keybase { return keys.NewInMemory() }
84+
8285
func getLazyKeyBaseFromDir(rootDir string) (keys.Keybase, error) {
8386
return keys.NewLazyKeybase(KeyDBName, filepath.Join(rootDir, "keys")), nil
8487
}

crypto/keys/keybase.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,9 @@ func New(db dbm.DB) Keybase {
8383
}
8484
}
8585

86+
// NewInMemory creates a new keybase on top of in-memory storage instance.
87+
func NewInMemory() Keybase { return dbKeybase{dbm.NewMemDB()} }
88+
8689
// CreateMnemonic generates a new key and persists it to storage, encrypted
8790
// using the provided password.
8891
// It returns the generated mnemonic and the key Info.

server/init.go

Lines changed: 6 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -1,101 +1,21 @@
11
package server
22

33
import (
4-
"encoding/json"
5-
"errors"
64
"fmt"
75

8-
"github.com/tendermint/tendermint/crypto"
9-
dbm "github.com/tendermint/tendermint/libs/db"
10-
"github.com/tendermint/tendermint/types"
11-
126
"github.com/cosmos/cosmos-sdk/crypto/keys"
137

14-
tmtypes "github.com/tendermint/tendermint/types"
15-
168
clkeys "github.com/cosmos/cosmos-sdk/client/keys"
17-
"github.com/cosmos/cosmos-sdk/codec"
189
sdk "github.com/cosmos/cosmos-sdk/types"
1910
)
2011

21-
// SimpleGenTx is a simple genesis tx
22-
type SimpleGenTx struct {
23-
Addr sdk.AccAddress `json:"addr"`
24-
}
25-
26-
//_____________________________________________________________________
27-
28-
// Generate a genesis transaction
29-
func SimpleAppGenTx(cdc *codec.Codec, pk crypto.PubKey) (
30-
appGenTx, cliPrint json.RawMessage, validator types.GenesisValidator, err error) {
31-
var addr sdk.AccAddress
32-
var secret string
33-
addr, secret, err = GenerateCoinKey()
34-
if err != nil {
35-
return
36-
}
37-
var bz []byte
38-
simpleGenTx := SimpleGenTx{Addr: addr}
39-
bz, err = cdc.MarshalJSON(simpleGenTx)
40-
if err != nil {
41-
return
42-
}
43-
appGenTx = json.RawMessage(bz)
44-
mm := map[string]string{"secret": secret}
45-
bz, err = cdc.MarshalJSON(mm)
46-
if err != nil {
47-
return
48-
}
49-
cliPrint = json.RawMessage(bz)
50-
validator = tmtypes.GenesisValidator{
51-
PubKey: pk,
52-
Power: 10,
53-
}
54-
return
55-
}
56-
57-
// create the genesis app state
58-
func SimpleAppGenState(cdc *codec.Codec, genDoc tmtypes.GenesisDoc, appGenTxs []json.RawMessage) (
59-
appState json.RawMessage, err error) {
60-
61-
if len(appGenTxs) != 1 {
62-
err = errors.New("must provide a single genesis transaction")
63-
return
64-
}
65-
66-
var tx SimpleGenTx
67-
err = cdc.UnmarshalJSON(appGenTxs[0], &tx)
68-
if err != nil {
69-
return
70-
}
71-
72-
appState = json.RawMessage(fmt.Sprintf(`{
73-
"accounts": [{
74-
"address": "%s",
75-
"coins": [
76-
{
77-
"denom": "mycoin",
78-
"amount": "9007199254740992"
79-
}
80-
]
81-
}]
82-
}`, tx.Addr))
83-
return
84-
}
85-
86-
//___________________________________________________________________________________________
87-
8812
// GenerateCoinKey returns the address of a public key, along with the secret
8913
// phrase to recover the private key.
9014
func GenerateCoinKey() (sdk.AccAddress, string, error) {
9115

92-
// construct an in-memory key store
93-
keybase := keys.New(
94-
dbm.NewMemDB(),
95-
)
96-
9716
// generate a private key, with recovery phrase
98-
info, secret, err := keybase.CreateMnemonic("name", keys.English, "pass", keys.Secp256k1)
17+
info, secret, err := clkeys.NewInMemoryKeyBase().CreateMnemonic(
18+
"name", keys.English, "pass", keys.Secp256k1)
9919
if err != nil {
10020
return sdk.AccAddress([]byte{}), "", err
10121
}
@@ -105,7 +25,8 @@ func GenerateCoinKey() (sdk.AccAddress, string, error) {
10525

10626
// GenerateSaveCoinKey returns the address of a public key, along with the secret
10727
// phrase to recover the private key.
108-
func GenerateSaveCoinKey(clientRoot, keyName, keyPass string, overwrite bool) (sdk.AccAddress, string, error) {
28+
func GenerateSaveCoinKey(clientRoot, keyName, keyPass string,
29+
overwrite bool) (sdk.AccAddress, string, error) {
10930

11031
// get the keystore from the client
11132
keybase, err := clkeys.NewKeyBaseFromDir(clientRoot)
@@ -127,6 +48,6 @@ func GenerateSaveCoinKey(clientRoot, keyName, keyPass string, overwrite bool) (s
12748
if err != nil {
12849
return sdk.AccAddress([]byte{}), "", err
12950
}
130-
addr := info.GetPubKey().Address()
131-
return sdk.AccAddress(addr), secret, nil
51+
52+
return sdk.AccAddress(info.GetPubKey().Address()), secret, nil
13253
}

server/init_test.go

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package server_test
2+
3+
import (
4+
"io/ioutil"
5+
"os"
6+
"testing"
7+
8+
"github.com/cosmos/cosmos-sdk/client/keys"
9+
"github.com/cosmos/cosmos-sdk/server"
10+
"github.com/stretchr/testify/require"
11+
)
12+
13+
func TestGenerateCoinKey(t *testing.T) {
14+
addr, mnemonic, err := server.GenerateCoinKey()
15+
require.NoError(t, err)
16+
17+
// Test creation
18+
info, err := keys.NewInMemoryKeyBase().CreateAccount("xxx", mnemonic, "", "012345678", 0, 0)
19+
require.NoError(t, err)
20+
require.Equal(t, addr, info.GetAddress())
21+
}
22+
23+
func TestGenerateSaveCoinKey(t *testing.T) {
24+
dir, cleanup := tempdir(t)
25+
defer cleanup() // clean after itself
26+
// Remove the dir to that GenerateSaveCoinKey creates it automatically
27+
os.RemoveAll(dir)
28+
29+
addr, mnemonic, err := server.GenerateSaveCoinKey(dir, "keyname", "012345678", false)
30+
require.NoError(t, err)
31+
32+
// Test key was actually saved
33+
kb, err := keys.NewKeyBaseFromDir(dir)
34+
require.NoError(t, err)
35+
info, err := kb.Get("keyname")
36+
require.NoError(t, err)
37+
require.Equal(t, addr, info.GetAddress())
38+
39+
// Test in-memory recovery
40+
info, err = keys.NewInMemoryKeyBase().CreateAccount("xxx", mnemonic, "", "012345678", 0, 0)
41+
require.NoError(t, err)
42+
require.Equal(t, addr, info.GetAddress())
43+
}
44+
45+
func tempdir(t *testing.T) (string, func()) {
46+
dir, err := ioutil.TempDir("", t.Name()+"_")
47+
require.NoError(t, err)
48+
return dir, func() { os.RemoveAll(dir) }
49+
}

0 commit comments

Comments
 (0)