github.com/sixexorg/magnetic-ring@v0.0.0-20191119090307-31705a21e419/cmd/cmd_account.go (about) 1 package cmd 2 3 import ( 4 "fmt" 5 "github.com/urfave/cli" 6 "github.com/sixexorg/magnetic-ring/account" 7 pasw "github.com/sixexorg/magnetic-ring/common/password" 8 "github.com/sixexorg/magnetic-ring/config" 9 "github.com/sixexorg/magnetic-ring/crypto" 10 httpcli "github.com/sixexorg/magnetic-ring/http/cli" 11 "github.com/sixexorg/magnetic-ring/http/req" 12 ) 13 14 var ( 15 AccountCommand = cli.Command{ 16 Action: cli.ShowSubcommandHelp, 17 Name: "account", 18 Usage: "Manage accounts", 19 ArgsUsage: "[arguments...]", 20 Description: `Wallet management commands can be used to add, view, modify, delete, import account, and so on. 21 You can use ./go-crystal account --help command to view help information of wallet management command.`, 22 Subcommands: []cli.Command{ 23 { 24 Action: accountCreate, 25 Name: "add", 26 Usage: "Add a new account", 27 ArgsUsage: "[sub-command options]", 28 Flags: []cli.Flag{ 29 cli.StringFlag{ 30 Name: "type,t", 31 Value: "normal", 32 Usage: "account type:[normal,node]", 33 }, 34 }, 35 Description: ` Add a new account to keystore.`, 36 }, 37 { 38 Action: getBoxBalance, 39 Name: "getbalance", 40 Usage: "get balance", 41 ArgsUsage: "[sub-command options]", 42 Flags: []cli.Flag{}, 43 Description: ` Add a new account to keystore.`, 44 }, 45 { 46 Action: oneKeyAccountCreate, 47 Name: "create", 48 Usage: "create a new account", 49 ArgsUsage: "[sub-command options]", 50 Flags: []cli.Flag{ 51 cli.StringFlag{ 52 Name: "dir,d", 53 Value: "normal", 54 Usage: "point keystore file path", 55 }, 56 }, 57 Description: ` create a new account to keystore.`, 58 }, 59 }, 60 } 61 ) 62 63 func accountCreate(ctx *cli.Context) { 64 password, err := pasw.GetConfirmedPassword() 65 if err != nil { 66 fmt.Printf("input password error:%v\n", err) 67 return 68 } 69 70 mgr, err := account.NewManager() 71 if err != nil { 72 fmt.Printf("create wallet error:%v\n", err) 73 return 74 } 75 76 accountType := ctx.String("type") 77 78 var acct account.NormalAccount 79 80 if accountType == "normal" { 81 acct, err = mgr.GenerateNormalAccount(string(password)) 82 if err != nil { 83 fmt.Printf("create normal account error:%v\n", err) 84 return 85 } 86 } else if accountType == "node" { 87 acct, err = mgr.GenerateNodeAccount(string(password)) 88 if err != nil { 89 fmt.Printf("create node account error:%v\n", err) 90 return 91 } 92 } else { 93 fmt.Printf("only [normal,node] account support") 94 return 95 } 96 97 mult := account.MultiAccountUnit{1, []crypto.PublicKey{acct.PublicKey()}} 98 99 muls := make(account.MultiAccountUnits, 1) 100 muls[0] = mult 101 102 mulacct, err := mgr.CreateMultipleAccount(acct.Address(), muls) 103 104 if err != nil { 105 return 106 } 107 108 pubksrcbuf := acct.PublicKey().Bytes() 109 110 fmt.Printf("public key:%x\n", pubksrcbuf) 111 fmt.Printf("address:%s\n", acct.Address().ToString()) 112 fmt.Printf("default multiple address:%s\n", mulacct.Address().ToString()) 113 114 } 115 116 func oneKeyAccountCreate(ctx *cli.Context) { 117 password, err := pasw.GetConfirmedPassword() 118 if err != nil { 119 fmt.Printf("input password error:%v\n", err) 120 return 121 } 122 123 mgr, err := account.NewManager() 124 if err != nil { 125 fmt.Printf("create wallet error:%v\n", err) 126 return 127 } 128 129 multact, err := mgr.CreateOneKeyAccount(password) 130 if err != nil { 131 fmt.Printf("create account error=%v\n", err) 132 return 133 } 134 135 impl := multact.(*account.MultipleAccountImpl) 136 137 pubksrcbuf := impl.OnlyPubkey().Bytes() 138 139 fmt.Printf("public key:%x\n", pubksrcbuf) 140 fmt.Printf("address:%s\n", multact.Address().ToString()) 141 //fmt.Printf("default multiple address:%s\n", mulacct.Address().ToString()) 142 143 } 144 145 func getBoxBalance(ctx *cli.Context) { 146 baseurl := fmt.Sprintf("http://127.0.0.1:%d", config.GlobalConfig.SysCfg.HttpPort) 147 addr := ctx.Args().First() 148 orgId := ctx.Args().Get(1) 149 req := req.ReqGetBalance{ 150 orgId, 151 addr, 152 } 153 fullurl := fmt.Sprintf("%s/block/getbalance", baseurl) 154 resp, err := httpcli.HttpSend(fullurl, req) 155 if err != nil { 156 fmt.Printf("push transaction to net work error:=%v\n", err) 157 return 158 } 159 fmt.Printf("%s\n", resp) 160 161 }