diff --git a/cmd/kaspawallet/config.go b/cmd/kaspawallet/config.go index e39c18f31..3440445ee 100644 --- a/cmd/kaspawallet/config.go +++ b/cmd/kaspawallet/config.go @@ -15,6 +15,7 @@ const ( createUnsignedTransactionSubCmd = "createUnsignedTransaction" signSubCmd = "sign" broadcastSubCmd = "broadcast" + showAddressSubCmd = "show-address" ) type configFlags struct { @@ -22,7 +23,7 @@ type configFlags struct { } type createConfig struct { - KeysFile string `long:"keys-file" short:"f" description:"Keys file location (only if different from default)"` + KeysFile string `long:"keys-file" short:"f" description:"Keys file location (default: ~/.kaspawallet/keys.json (*nix), %USERPROFILE%\\AppData\\Local\\Kaspawallet\\key.json (Windows))"` MinimumSignatures uint32 `long:"min-signatures" short:"m" description:"Minimum required signatures" default:"1"` NumPrivateKeys uint32 `long:"num-private-keys" short:"k" description:"Number of private keys to generate" default:"1"` NumPublicKeys uint32 `long:"num-public-keys" short:"n" description:"Total number of keys" default:"1"` @@ -30,13 +31,13 @@ type createConfig struct { } type balanceConfig struct { - KeysFile string `long:"keys-file" short:"f" description:"Keys file location (only if different from default)"` + KeysFile string `long:"keys-file" short:"f" description:"Keys file location (default: ~/.kaspawallet/keys.json (*nix), %USERPROFILE%\\AppData\\Local\\Kaspawallet\\key.json (Windows))"` RPCServer string `long:"rpcserver" short:"s" description:"RPC server to connect to"` config.NetworkFlags } type sendConfig struct { - KeysFile string `long:"keys-file" short:"f" description:"Keys file location (only if different from default)"` + KeysFile string `long:"keys-file" short:"f" description:"Keys file location (default: ~/.kaspawallet/keys.json (*nix), %USERPROFILE%\\AppData\\Local\\Kaspawallet\\key.json (Windows))"` RPCServer string `long:"rpcserver" short:"s" description:"RPC server to connect to"` ToAddress string `long:"to-address" short:"t" description:"The public address to send Kaspa to" required:"true"` SendAmount float64 `long:"send-amount" short:"v" description:"An amount to send in Kaspa (e.g. 1234.12345678)" required:"true"` @@ -44,7 +45,7 @@ type sendConfig struct { } type createUnsignedTransactionConfig struct { - KeysFile string `long:"keys-file" short:"f" description:"Keys file location (only if different from default)"` + KeysFile string `long:"keys-file" short:"f" description:"Keys file location (default: ~/.kaspawallet/keys.json (*nix), %USERPROFILE%\\AppData\\Local\\Kaspawallet\\key.json (Windows))"` RPCServer string `long:"rpcserver" short:"s" description:"RPC server to connect to"` ToAddress string `long:"to-address" short:"t" description:"The public address to send Kaspa to" required:"true"` SendAmount float64 `long:"send-amount" short:"v" description:"An amount to send in Kaspa (e.g. 1234.12345678)" required:"true"` @@ -52,7 +53,7 @@ type createUnsignedTransactionConfig struct { } type signConfig struct { - KeysFile string `long:"keys-file" short:"f" description:"Keys file location (only if different from default)"` + KeysFile string `long:"keys-file" short:"f" description:"Keys file location (default: ~/.kaspawallet/keys.json (*nix), %USERPROFILE%\\AppData\\Local\\Kaspawallet\\key.json (Windows))"` Transaction string `long:"transaction" short:"t" description:"The unsigned transaction to sign on (encoded in hex)" required:"true"` config.NetworkFlags } @@ -63,6 +64,11 @@ type broadcastConfig struct { config.NetworkFlags } +type showAddressConfig struct { + KeysFile string `long:"keys-file" short:"f" description:"Keys file location (default: ~/.kaspawallet/keys.json (*nix), %USERPROFILE%\\AppData\\Local\\Kaspawallet\\key.json (Windows))"` + config.NetworkFlags +} + func parseCommandLine() (subCommand string, config interface{}) { cfg := &configFlags{} parser := flags.NewParser(cfg, flags.PrintErrors|flags.HelpFlag) @@ -91,6 +97,10 @@ func parseCommandLine() (subCommand string, config interface{}) { parser.AddCommand(broadcastSubCmd, "Broadcast the given transaction", "Broadcast the given transaction", broadcastConf) + showAddressConf := &showAddressConfig{} + parser.AddCommand(showAddressSubCmd, "Shows the public address of the current wallet", + "Shows the public address of the current wallet", showAddressConf) + _, err := parser.Parse() if err != nil { @@ -146,6 +156,13 @@ func parseCommandLine() (subCommand string, config interface{}) { printErrorAndExit(err) } config = broadcastConf + case showAddressSubCmd: + combineNetworkFlags(&showAddressConf.NetworkFlags, &cfg.NetworkFlags) + err := showAddressConf.ResolveNetwork(parser) + if err != nil { + printErrorAndExit(err) + } + config = showAddressConf } return parser.Command.Active.Name, config diff --git a/cmd/kaspawallet/main.go b/cmd/kaspawallet/main.go index 56be3d8cd..1acecc59e 100644 --- a/cmd/kaspawallet/main.go +++ b/cmd/kaspawallet/main.go @@ -19,6 +19,8 @@ func main() { err = sign(config.(*signConfig)) case broadcastSubCmd: err = broadcast(config.(*broadcastConfig)) + case showAddressSubCmd: + err = showAddress(config.(*showAddressConfig)) default: err = errors.Errorf("Unknown sub-command '%s'\n", subCmd) } diff --git a/cmd/kaspawallet/show_address.go b/cmd/kaspawallet/show_address.go new file mode 100644 index 000000000..3077b83ce --- /dev/null +++ b/cmd/kaspawallet/show_address.go @@ -0,0 +1,22 @@ +package main + +import ( + "fmt" + "github.com/kaspanet/kaspad/cmd/kaspawallet/keys" + "github.com/kaspanet/kaspad/cmd/kaspawallet/libkaspawallet" +) + +func showAddress(conf *showAddressConfig) error { + keysFile, err := keys.ReadKeysFile(conf.KeysFile) + if err != nil { + return err + } + + address, err := libkaspawallet.Address(conf.NetParams(), keysFile.PublicKeys, keysFile.MinimumSignatures) + if err != nil { + return err + } + + fmt.Printf("The wallet address is:\n%s\n", address) + return nil +}