-
Notifications
You must be signed in to change notification settings - Fork 39
/
accounts.go
127 lines (109 loc) · 3.56 KB
/
accounts.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
package main
import (
"fmt"
"os"
"github.com/pkg/errors"
"github.com/spf13/cobra"
"github.com/stratosnet/sds/pp/setting"
"github.com/stratosnet/sds/utils"
"github.com/stratosnet/sds/utils/console"
"github.com/stratosnet/stratos-chain/types"
)
const (
hdPathFlag = "hd-path"
mnemonicFlag = "mnemonic"
passwordFlag = "password"
savePassFlag = "save-pass"
nicknameFlag = "nickname"
p2pPassFlag = "p2p-pass"
newP2pKeyFlag = "new-p2p-key"
)
func createAccounts(cmd *cobra.Command, args []string) error {
p2ppass, _ := cmd.Flags().GetString(p2pPassFlag)
newP2pKey, _ := cmd.Flags().GetBool(newP2pKeyFlag)
p2pkeyfiles := findp2pKeyFiles()
if len(p2pkeyfiles) < 1 || newP2pKey {
fmt.Println("generating new p2p key")
p2pKeyAddress, err := utils.CreateP2PKey(setting.Config.Home.AccountsPath, "p2pkey", p2ppass,
types.SdsNodeP2PAddressPrefix)
if err != nil {
return errors.New("couldn't create p2pkey: " + err.Error())
}
p2pKeyAddressString, err := p2pKeyAddress.ToBech(types.SdsNodeP2PAddressPrefix)
if err != nil {
return errors.New("couldn't convert P2P key address to bech string: " + err.Error())
}
setting.Config.Keys.P2PAddress = p2pKeyAddressString
setting.Config.Keys.P2PPassword = p2ppass
err = setting.FlushConfig()
if err != nil {
return err
}
}
nickname, _ := cmd.Flags().GetString(nicknameFlag)
if len(nickname) <= 0 {
nickname = "wallet"
}
password, _ := cmd.Flags().GetString(passwordFlag)
if len(password) <= 0 {
newPassword, err := console.Stdin.PromptPassword("Enter wallet password: ")
if err != nil {
return errors.New("couldn't read password from input: " + err.Error())
}
password = newPassword
}
mnemonic, _ := cmd.Flags().GetString(mnemonicFlag)
if len(mnemonic) <= 0 {
newMnemonic, err := utils.NewMnemonic()
if err != nil {
return errors.Wrap(err, "Couldn't generate new mnemonic")
}
mnemonic = newMnemonic
fmt.Println("generated mnemonic is : \n" +
"======================================================================= \n" +
mnemonic + "\n" +
"======================================================================= \n")
}
hdPath, err := cmd.Flags().GetString(hdPathFlag)
if err != nil {
return err
}
if len(hdPath) <= 0 {
hdPath = setting.HDPath
}
//hrp, mnemonic, bip39Passphrase, hdPath
walletKeyAddress, err := utils.CreateWallet(setting.Config.Home.AccountsPath, nickname, password,
types.StratosBech32Prefix, mnemonic, "", hdPath)
if err != nil {
return errors.New("couldn't create WalletAddress: " + err.Error())
}
walletKeyAddressString, err := walletKeyAddress.ToBech(types.StratosBech32Prefix)
if err != nil {
return errors.New("couldn't convert wallet address to bech string: " + err.Error())
}
setting.Config.Keys.WalletAddress = walletKeyAddressString
save, _ := cmd.Flags().GetBool(savePassFlag)
if save {
setting.Config.Keys.WalletPassword = password
}
err = setting.FlushConfig()
if err != nil {
return err
}
fmt.Println("save the mnemonic phase properly for future recover: \n" +
"======================================================================= \n" +
mnemonic + "\n" +
"======================================================================= \n")
return nil
}
func findp2pKeyFiles() []string {
files, _ := os.ReadDir(setting.Config.Home.AccountsPath)
var p2pkeyfiles []string
for _, file := range files {
fileName := file.Name()
if fileName[len(fileName)-5:] == ".json" && fileName[:len(types.SdsNodeP2PAddressPrefix)] == types.SdsNodeP2PAddressPrefix {
p2pkeyfiles = append(p2pkeyfiles, fileName)
}
}
return p2pkeyfiles
}