OSDN Git Service

new repo
[bytom/vapor.git] / cmd / vaporcli / commands / account.go
1 package commands
2
3 import (
4         "os"
5         "strings"
6
7         "github.com/spf13/cobra"
8         jww "github.com/spf13/jwalterweatherman"
9
10         "github.com/vapor/crypto/ed25519/chainkd"
11         "github.com/vapor/util"
12 )
13
14 func init() {
15         createAccountCmd.PersistentFlags().IntVarP(&accountQuorum, "quorom", "q", 1, "quorum must be greater than 0 and less than or equal to the number of signers")
16         createAccountCmd.PersistentFlags().StringVarP(&accountToken, "access", "a", "", "access token")
17
18         listAccountsCmd.PersistentFlags().StringVar(&accountID, "id", "", "account ID")
19         listAccountsCmd.PersistentFlags().StringVar(&accountAlias, "alias", "", "account alias")
20
21         listAddressesCmd.PersistentFlags().StringVar(&accountID, "id", "", "account ID")
22         listAddressesCmd.PersistentFlags().StringVar(&accountAlias, "alias", "", "account alias")
23
24         listUnspentOutputsCmd.PersistentFlags().StringVar(&outputID, "id", "", "ID of unspent output")
25         listUnspentOutputsCmd.PersistentFlags().BoolVar(&smartContract, "contract", false, "list smart contract unspent outputs")
26 }
27
28 var (
29         accountID     = ""
30         accountAlias  = ""
31         accountQuorum = 1
32         accountToken  = ""
33         outputID      = ""
34         smartContract = false
35 )
36
37 var createAccountCmd = &cobra.Command{
38         Use:   "create-account <alias> <xpub(s)>",
39         Short: "Create an account",
40         Args:  cobra.MinimumNArgs(2),
41         Run: func(cmd *cobra.Command, args []string) {
42                 ins := accountIns{}
43
44                 for _, x := range args[1:] {
45                         xpub := chainkd.XPub{}
46                         if err := xpub.UnmarshalText([]byte(x)); err != nil {
47                                 jww.ERROR.Println(err)
48                                 os.Exit(util.ErrLocalExe)
49                         }
50                         ins.RootXPubs = append(ins.RootXPubs, xpub)
51                 }
52
53                 ins.Quorum = accountQuorum
54                 ins.Alias = args[0]
55                 ins.AccessToken = accountToken
56
57                 data, exitCode := util.ClientCall("/create-account", &ins)
58                 if exitCode != util.Success {
59                         os.Exit(exitCode)
60                 }
61
62                 printJSON(data)
63         },
64 }
65
66 var listAccountsCmd = &cobra.Command{
67         Use:   "list-accounts",
68         Short: "List the existing accounts",
69         Args:  cobra.NoArgs,
70         Run: func(cmd *cobra.Command, args []string) {
71                 filter := struct {
72                         ID    string `json:"id"`
73                         Alias string `json:"alias"`
74                 }{ID: accountID, Alias: accountAlias}
75
76                 data, exitCode := util.ClientCall("/list-accounts", &filter)
77                 if exitCode != util.Success {
78                         os.Exit(exitCode)
79                 }
80
81                 printJSONList(data)
82         },
83 }
84
85 var deleteAccountCmd = &cobra.Command{
86         Use:   "delete-account <accountID|alias>",
87         Short: "Delete the existing account",
88         Args:  cobra.ExactArgs(1),
89         Run: func(cmd *cobra.Command, args []string) {
90                 accountInfo := &struct {
91                         AccountInfo string `json:"account_info"`
92                 }{AccountInfo: args[0]}
93
94                 if _, exitCode := util.ClientCall("/delete-account", accountInfo); exitCode != util.Success {
95                         os.Exit(exitCode)
96                 }
97
98                 jww.FEEDBACK.Println("Successfully delete account")
99         },
100 }
101
102 var createAccountReceiverCmd = &cobra.Command{
103         Use:   "create-account-receiver <accountAlias> [accountID]",
104         Short: "Create an account receiver",
105         Args:  cobra.RangeArgs(1, 2),
106         Run: func(cmd *cobra.Command, args []string) {
107                 var ins = struct {
108                         AccountID    string `json:"account_id"`
109                         AccountAlias string `json:"account_alias"`
110                 }{AccountAlias: args[0]}
111
112                 if len(args) == 2 {
113                         ins.AccountID = args[1]
114                 }
115
116                 data, exitCode := util.ClientCall("/create-account-receiver", &ins)
117                 if exitCode != util.Success {
118                         os.Exit(exitCode)
119                 }
120
121                 printJSON(data)
122         },
123 }
124
125 var listAddressesCmd = &cobra.Command{
126         Use:   "list-addresses",
127         Short: "List the account addresses",
128         Args:  cobra.NoArgs,
129         Run: func(cmd *cobra.Command, args []string) {
130                 var ins = struct {
131                         AccountID    string `json:"account_id"`
132                         AccountAlias string `json:"account_alias"`
133                 }{AccountID: accountID, AccountAlias: accountAlias}
134
135                 data, exitCode := util.ClientCall("/list-addresses", &ins)
136                 if exitCode != util.Success {
137                         os.Exit(exitCode)
138                 }
139
140                 printJSONList(data)
141         },
142 }
143
144 var validateAddressCmd = &cobra.Command{
145         Use:   "validate-address <address>",
146         Short: "validate the account addresses",
147         Args:  cobra.ExactArgs(1),
148         Run: func(cmd *cobra.Command, args []string) {
149                 var ins = struct {
150                         Address string `json:"address"`
151                 }{Address: args[0]}
152
153                 data, exitCode := util.ClientCall("/validate-address", &ins)
154                 if exitCode != util.Success {
155                         os.Exit(exitCode)
156                 }
157
158                 printJSON(data)
159         },
160 }
161
162 var listPubKeysCmd = &cobra.Command{
163         Use:   "list-pubkeys <accountInfo> [publicKey]",
164         Short: "list the account pubkeys",
165         Args:  cobra.RangeArgs(1, 2),
166         Run: func(cmd *cobra.Command, args []string) {
167                 var ins = struct {
168                         AccountID    string `json:"account_id"`
169                         AccountAlias string `json:"account_alias"`
170                         PublicKey    string `json:"public_key"`
171                 }{}
172
173                 if len(args[0]) == 13 && strings.HasPrefix(args[0], "0") {
174                         ins.AccountID = args[0]
175                 } else {
176                         ins.AccountAlias = args[0]
177                 }
178
179                 if len(args) == 2 {
180                         ins.PublicKey = args[1]
181                 }
182
183                 data, exitCode := util.ClientCall("/list-pubkeys", &ins)
184                 if exitCode != util.Success {
185                         os.Exit(exitCode)
186                 }
187
188                 printJSON(data)
189         },
190 }
191
192 var listBalancesCmd = &cobra.Command{
193         Use:   "list-balances",
194         Short: "List the accounts balances",
195         Args:  cobra.NoArgs,
196         Run: func(cmd *cobra.Command, args []string) {
197                 data, exitCode := util.ClientCall("/list-balances")
198                 if exitCode != util.Success {
199                         os.Exit(exitCode)
200                 }
201
202                 printJSONList(data)
203         },
204 }
205
206 var listUnspentOutputsCmd = &cobra.Command{
207         Use:   "list-unspent-outputs",
208         Short: "List the accounts unspent outputs",
209         Args:  cobra.NoArgs,
210         Run: func(cmd *cobra.Command, args []string) {
211                 filter := struct {
212                         ID            string `json:"id"`
213                         SmartContract bool   `json:"smart_contract"`
214                 }{ID: outputID, SmartContract: smartContract}
215
216                 data, exitCode := util.ClientCall("/list-unspent-outputs", &filter)
217                 if exitCode != util.Success {
218                         os.Exit(exitCode)
219                 }
220
221                 printJSONList(data)
222         },
223 }