Skip to content
This repository was archived by the owner on Jul 13, 2022. It is now read-only.

Commit 306cdbb

Browse files
author
David Ansermino
authored
Add subkey network flag (#484)
- Adds `--network` for `accounts generate` and `accounts import` - Updates sr25519 methos to accept network parameter - Bump GSRPC version
1 parent a92ea6f commit 306cdbb

File tree

9 files changed

+222
-37
lines changed

9 files changed

+222
-37
lines changed

cmd/chainbridge/account.go

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ func handleGenerateCmd(ctx *cli.Context, dHandler *dataHandler) error {
6363
password = []byte(pwdflag)
6464
}
6565

66-
_, err := generateKeypair(keytype, dHandler.datadir, password)
66+
_, err := generateKeypair(keytype, dHandler.datadir, password, ctx.String(config.SubkeyNetworkFlag.Name))
6767
if err != nil {
6868
return fmt.Errorf("failed to generate key: %s", err)
6969
}
@@ -72,12 +72,8 @@ func handleGenerateCmd(ctx *cli.Context, dHandler *dataHandler) error {
7272

7373
// handleImportCmd imports external keystores into the bridge
7474
func handleImportCmd(ctx *cli.Context, dHandler *dataHandler) error {
75-
76-
// import key
77-
78-
var err error
79-
8075
log.Info("Importing key...")
76+
var err error
8177

8278
// check if --ed25519 or --sr25519 is set
8379
keytype := crypto.Secp256k1Type
@@ -105,7 +101,7 @@ func handleImportCmd(ctx *cli.Context, dHandler *dataHandler) error {
105101
password = []byte(pwdflag)
106102
}
107103

108-
_, err = importPrivKey(keytype, dHandler.datadir, privkeyflag, password)
104+
_, err = importPrivKey(ctx, keytype, dHandler.datadir, privkeyflag, password)
109105
} else {
110106
if keyimport := ctx.Args().First(); keyimport != "" {
111107
_, err = importKey(keyimport, dHandler.datadir)
@@ -147,7 +143,7 @@ func getDataDir(ctx *cli.Context) (string, error) {
147143
}
148144

149145
//importPrivKey imports a private key into a keypair
150-
func importPrivKey(keytype, datadir, key string, password []byte) (string, error) {
146+
func importPrivKey(ctx *cli.Context, keytype, datadir, key string, password []byte) (string, error) {
151147
if password == nil {
152148
password = keystore.GetPassword("Enter password to encrypt keystore file:")
153149
}
@@ -162,7 +158,8 @@ func importPrivKey(keytype, datadir, key string, password []byte) (string, error
162158

163159
if keytype == crypto.Sr25519Type {
164160
// generate sr25519 keys
165-
kp, err = sr25519.NewKeypairFromSeed(key)
161+
network := ctx.String(config.SubkeyNetworkFlag.Name)
162+
kp, err = sr25519.NewKeypairFromSeed(key, network)
166163
if err != nil {
167164
return "", fmt.Errorf("could not generate sr25519 keypair from given string: %s", err)
168165
}
@@ -338,7 +335,7 @@ func getKeyFiles(datadir string) ([]string, error) {
338335
// generateKeypair create a new keypair with the corresponding type and saves it to datadir/keystore/[public key].key
339336
// in json format encrypted using the specified password
340337
// it returns the resulting filepath of the new key
341-
func generateKeypair(keytype, datadir string, password []byte) (string, error) {
338+
func generateKeypair(keytype, datadir string, password []byte, subNetwork string) (string, error) {
342339
if password == nil {
343340
password = keystore.GetPassword("Enter password to encrypt keystore file:")
344341
}
@@ -353,7 +350,7 @@ func generateKeypair(keytype, datadir string, password []byte) (string, error) {
353350

354351
if keytype == crypto.Sr25519Type {
355352
// generate sr25519 keys
356-
kp, err = sr25519.GenerateKeypair()
353+
kp, err = sr25519.GenerateKeypair(subNetwork)
357354
if err != nil {
358355
return "", fmt.Errorf("could not generate sr25519 keypair: %s", err)
359356
}

cmd/chainbridge/account_test.go

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -126,16 +126,11 @@ func TestAccountCommands(t *testing.T) {
126126
}
127127

128128
keypath := "."
129-
130-
srFile, err := generateKeypair("sr25519", keypath, testPassword)
129+
srFile, err := generateKeypair("sr25519", keypath, testPassword, "substrate")
131130
if err != nil {
132131
t.Fatal(err)
133132
}
134-
secpFile, err := generateKeypair("secp256k1", keypath, testPassword)
135-
if err != nil {
136-
t.Fatal(err)
137-
}
138-
133+
secpFile, err := generateKeypair("secp256k1", keypath, testPassword, "")
139134
if err != nil {
140135
t.Fatal(err)
141136
}
@@ -225,7 +220,7 @@ func TestGetDatadir(t *testing.T) {
225220
}
226221

227222
func TestGenerateKey_NoType(t *testing.T) {
228-
keyfile, err := generateKeypair("", testKeystoreDir, testPassword)
223+
keyfile, err := generateKeypair("", testKeystoreDir, testPassword, "")
229224
if err != nil {
230225
t.Fatal(err)
231226
}
@@ -258,7 +253,7 @@ func TestImportKey_ShouldFail(t *testing.T) {
258253
func TestImportKey(t *testing.T) {
259254
keypath := "../../"
260255

261-
importkeyfile, err := generateKeypair("sr25519", keypath, testPassword)
256+
importkeyfile, err := generateKeypair("sr25519", keypath, testPassword, "")
262257
if err != nil {
263258
t.Fatal(err)
264259
}
@@ -318,7 +313,7 @@ func TestImportEthKey(t *testing.T) {
318313
}
319314

320315
func TestImportKey_withPk(t *testing.T) {
321-
keyfile, err := importPrivKey("", testKeystoreDir, "000000000000000000000000000000000000000000000000000000416c696365", testPassword)
316+
keyfile, err := importPrivKey(cli.NewContext(app, nil, nil), "", testKeystoreDir, "000000000000000000000000000000000000000000000000000000416c696365", testPassword)
322317
if err != nil {
323318
t.Fatal(err)
324319
}
@@ -347,12 +342,12 @@ func TestListKeys(t *testing.T) {
347342
var err error
348343
var keyfile string
349344
if i%2 == 0 {
350-
keyfile, err = generateKeypair(crypto.Sr25519Type, testKeystoreDir, testPassword)
345+
keyfile, err = generateKeypair(crypto.Sr25519Type, testKeystoreDir, testPassword, "")
351346
if err != nil {
352347
t.Fatal(err)
353348
}
354349
} else {
355-
keyfile, err = generateKeypair(crypto.Secp256k1Type, testKeystoreDir, testPassword)
350+
keyfile, err = generateKeypair(crypto.Secp256k1Type, testKeystoreDir, testPassword, "")
356351
if err != nil {
357352
t.Fatal(err)
358353
}

cmd/chainbridge/main.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ var generateFlags = []cli.Flag{
3636
config.PasswordFlag,
3737
config.Sr25519Flag,
3838
config.Secp256k1Flag,
39+
config.SubkeyNetworkFlag,
3940
}
4041

4142
var devFlags = []cli.Flag{
@@ -48,6 +49,7 @@ var importFlags = []cli.Flag{
4849
config.Sr25519Flag,
4950
config.Secp256k1Flag,
5051
config.PasswordFlag,
52+
config.SubkeyNetworkFlag,
5153
}
5254

5355
var accountCommand = cli.Command{

config/flags.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,11 @@ var (
6868
Name: "privateKey",
6969
Usage: "Import a hex representation of a private key into a keystore.",
7070
}
71+
SubkeyNetworkFlag = &cli.StringFlag{
72+
Name: "network",
73+
Usage: "Specify the network to use for the address encoding (substrate/polkadot/centrifuge)",
74+
DefaultText: "substrate",
75+
}
7176
)
7277

7378
// Test Setting Flags

crypto/sr25519/sr25519.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,17 @@ type Keypair struct {
1818
keyringPair *signature.KeyringPair
1919
}
2020

21-
func GenerateKeypair() (*Keypair, error) {
21+
func GenerateKeypair(network string) (*Keypair, error) {
2222
data := make([]byte, 32)
2323
_, err := rand.Read(data)
2424
if err != nil {
2525
return nil, err
2626
}
27-
return NewKeypairFromSeed("//" + hexutil.Encode(data))
27+
return NewKeypairFromSeed("//"+hexutil.Encode(data), network)
2828
}
2929

30-
func NewKeypairFromSeed(seed string) (*Keypair, error) {
31-
kp, err := signature.KeyringPairFromSecret(seed)
30+
func NewKeypairFromSeed(seed, network string) (*Keypair, error) {
31+
kp, err := signature.KeyringPairFromSecret(seed, network)
3232
return &Keypair{&kp}, err
3333
}
3434

crypto/sr25519/sr25519_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import (
1111
)
1212

1313
func TestNewKeypairFromSeed(t *testing.T) {
14-
kp, err := NewKeypairFromSeed("//Alice")
14+
kp, err := NewKeypairFromSeed("//Alice", "substrate")
1515
if err != nil {
1616
t.Fatal(err)
1717
}
@@ -22,7 +22,7 @@ func TestNewKeypairFromSeed(t *testing.T) {
2222
}
2323

2424
func TestKeypair_AsKeyringPair(t *testing.T) {
25-
kp, err := NewKeypairFromSeed("//Alice")
25+
kp, err := NewKeypairFromSeed("//Alice", "substrate")
2626
if err != nil {
2727
t.Fatal(err)
2828
}
@@ -38,7 +38,7 @@ func TestKeypair_AsKeyringPair(t *testing.T) {
3838
}
3939

4040
func TestEncodeAndDecodeKeypair(t *testing.T) {
41-
kp, err := NewKeypairFromSeed("//Alice")
41+
kp, err := NewKeypairFromSeed("//Alice", "substrate")
4242
if err != nil {
4343
t.Fatal(err)
4444
}

go.mod

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,17 @@ go 1.13
55
require (
66
github.com/ChainSafe/chainbridge-substrate-events v0.0.0-20200715141113-87198532025e
77
github.com/ChainSafe/log15 v1.0.0
8+
github.com/aristanetworks/goarista v0.0.0-20200609010056-95bcf8053598 // indirect
89
github.com/btcsuite/btcd v0.20.1-beta // indirect
9-
github.com/centrifuge/go-substrate-rpc-client v2.0.0-alpha.4+incompatible
10-
github.com/ethereum/go-ethereum v1.9.13
10+
github.com/centrifuge/go-substrate-rpc-client v2.0.0-alpha.5+incompatible
11+
github.com/deckarep/golang-set v1.7.1 // indirect
12+
github.com/ethereum/go-ethereum v1.9.16
13+
github.com/gorilla/websocket v1.4.2 // indirect
1114
github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416
15+
github.com/rs/cors v1.7.0 // indirect
1216
github.com/stretchr/testify v1.4.0
1317
github.com/urfave/cli/v2 v2.2.0
14-
golang.org/x/crypto v0.0.0-20200429183012-4b2356b1ed79
18+
golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899
19+
golang.org/x/net v0.0.0-20200707034311-ab3426394381 // indirect
20+
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae // indirect
1521
)

0 commit comments

Comments
 (0)