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  }