aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzelig <viktor.tron@gmail.com>2015-03-25 00:19:11 +0800
committerzelig <viktor.tron@gmail.com>2015-03-27 03:00:18 +0800
commitd1b52efdb581ca90613d2047b974d3a128f9bc58 (patch)
tree39148dfa9bf43062ec44bccd69d790218172725e
parent34d5a6c156a014ce000b4f850f2b0f11533387f0 (diff)
downloadgo-tangerine-d1b52efdb581ca90613d2047b974d3a128f9bc58.tar
go-tangerine-d1b52efdb581ca90613d2047b974d3a128f9bc58.tar.gz
go-tangerine-d1b52efdb581ca90613d2047b974d3a128f9bc58.tar.bz2
go-tangerine-d1b52efdb581ca90613d2047b974d3a128f9bc58.tar.lz
go-tangerine-d1b52efdb581ca90613d2047b974d3a128f9bc58.tar.xz
go-tangerine-d1b52efdb581ca90613d2047b974d3a128f9bc58.tar.zst
go-tangerine-d1b52efdb581ca90613d2047b974d3a128f9bc58.zip
cli: implement ethereum presale wallet import via cli
-rw-r--r--accounts/account_manager.go12
-rw-r--r--cmd/ethereum/main.go74
2 files changed, 59 insertions, 27 deletions
diff --git a/accounts/account_manager.go b/accounts/account_manager.go
index 21ef46991..f063f8ca5 100644
--- a/accounts/account_manager.go
+++ b/accounts/account_manager.go
@@ -239,3 +239,15 @@ func (am *Manager) Import(path string, keyAuth string) (Account, error) {
}
return Account{Address: key.Address}, nil
}
+
+func (am *Manager) ImportPreSaleKey(keyJSON []byte, password string) (acc Account, err error) {
+ var key *crypto.Key
+ key, err = crypto.ImportPreSaleKey(am.keyStore, keyJSON, password)
+ if err != nil {
+ return
+ }
+ if err = am.keyStore.StoreKey(key, password); err != nil {
+ return
+ }
+ return Account{Address: key.Address}, nil
+}
diff --git a/cmd/ethereum/main.go b/cmd/ethereum/main.go
index 39a0a9d7f..57729b206 100644
--- a/cmd/ethereum/main.go
+++ b/cmd/ethereum/main.go
@@ -23,6 +23,7 @@ package main
import (
"bufio"
"fmt"
+ "io/ioutil"
"os"
"runtime"
"strconv"
@@ -74,6 +75,19 @@ Regular users do not need to execute it.
The output of this command is supposed to be machine-readable.
`,
},
+
+ {
+ Action: accountList,
+ Name: "wallet",
+ Usage: "ethereum presale wallet",
+ Subcommands: []cli.Command{
+ {
+ Action: importWallet,
+ Name: "import",
+ Usage: "import ethereum presale wallet",
+ },
+ },
+ },
{
Action: accountList,
Name: "account",
@@ -280,22 +294,7 @@ func unlockAccount(ctx *cli.Context, am *accounts.Manager, account string) (pass
var err error
// Load startup keys. XXX we are going to need a different format
// Attempt to unlock the account
- passfile := ctx.GlobalString(utils.PasswordFileFlag.Name)
- if len(passfile) == 0 {
- fmt.Println("Please enter a passphrase now.")
- auth, err := readPassword("Passphrase: ", true)
- if err != nil {
- utils.Fatalf("%v", err)
- }
-
- passphrase = auth
-
- } else {
- if passphrase, err = common.ReadAllFile(passfile); err != nil {
- utils.Fatalf("Unable to read password file '%s': %v", passfile, err)
- }
- }
-
+ passphrase := getPassPhrase(ctx, "", false)
err = am.Unlock(common.FromHex(account), passphrase)
if err != nil {
utils.Fatalf("Unlock account failed '%v'", err)
@@ -335,22 +334,23 @@ func accountList(ctx *cli.Context) {
}
}
-func getPassPhrase(ctx *cli.Context) (passphrase string) {
+func getPassPhrase(ctx *cli.Context, desc string, confirmation bool) (passphrase string) {
if !ctx.GlobalBool(utils.UnencryptedKeysFlag.Name) {
passfile := ctx.GlobalString(utils.PasswordFileFlag.Name)
if len(passfile) == 0 {
- fmt.Println("The new account will be encrypted with a passphrase.")
- fmt.Println("Please enter a passphrase now.")
+ fmt.Println(desc)
auth, err := readPassword("Passphrase: ", true)
if err != nil {
utils.Fatalf("%v", err)
}
- confirm, err := readPassword("Repeat Passphrase: ", false)
- if err != nil {
- utils.Fatalf("%v", err)
- }
- if auth != confirm {
- utils.Fatalf("Passphrases did not match.")
+ if confirmation {
+ confirm, err := readPassword("Repeat Passphrase: ", false)
+ if err != nil {
+ utils.Fatalf("%v", err)
+ }
+ if auth != confirm {
+ utils.Fatalf("Passphrases did not match.")
+ }
}
passphrase = auth
@@ -366,7 +366,7 @@ func getPassPhrase(ctx *cli.Context) (passphrase string) {
func accountCreate(ctx *cli.Context) {
am := utils.GetAccountManager(ctx)
- passphrase := getPassPhrase(ctx)
+ passphrase := getPassPhrase(ctx, "Your new account is locked with a password. Please give a password. Do not forget this password.", true)
acct, err := am.NewAccount(passphrase)
if err != nil {
utils.Fatalf("Could not create the account: %v", err)
@@ -374,13 +374,33 @@ func accountCreate(ctx *cli.Context) {
fmt.Printf("Address: %x\n", acct)
}
+func importWallet(ctx *cli.Context) {
+ keyfile := ctx.Args().First()
+ if len(keyfile) == 0 {
+ utils.Fatalf("keyfile must be given as argument")
+ }
+ keyJson, err := ioutil.ReadFile(keyfile)
+ if err != nil {
+ utils.Fatalf("Could not read wallet file: %v", err)
+ }
+
+ am := utils.GetAccountManager(ctx)
+ passphrase := getPassPhrase(ctx, "", false)
+
+ acct, err := am.ImportPreSaleKey(keyJson, passphrase)
+ if err != nil {
+ utils.Fatalf("Could not create the account: %v", err)
+ }
+ fmt.Printf("Address: %x\n", acct)
+}
+
func accountImport(ctx *cli.Context) {
keyfile := ctx.Args().First()
if len(keyfile) == 0 {
utils.Fatalf("keyfile must be given as argument")
}
am := utils.GetAccountManager(ctx)
- passphrase := getPassPhrase(ctx)
+ passphrase := getPassPhrase(ctx, "Your new account is locked with a password. Please give a password. Do not forget this password.", true)
acct, err := am.Import(keyfile, passphrase)
if err != nil {
utils.Fatalf("Could not create the account: %v", err)