give btcctl some options instead of using hardcoded values

This commit is contained in:
David Hill 2013-10-16 19:19:26 -04:00
parent f346c36a0d
commit 90fbae1781

View file

@ -2,38 +2,50 @@ package main
import ( import (
"errors" "errors"
"flag"
"fmt" "fmt"
"github.com/conformal/btcjson" "github.com/conformal/btcjson"
"github.com/conformal/go-flags"
"github.com/davecgh/go-spew/spew" "github.com/davecgh/go-spew/spew"
"os"
"strconv" "strconv"
) )
const ( type config struct {
User = "rpcuser" Help bool `short:"h" long:"help" description:"Help"`
Password = "rpcpass" RpcUser string `short:"u" description:"RPC username"`
Server = "127.0.0.1:8334" RpcPassword string `short:"P" long:"rpcpass" description:"RPC password"`
) RpcServer string `short:"s" long:"rpcserver" description:"RPC server to connect to"`
}
var ( var (
ErrNoData = errors.New("No data returned.") ErrNoData = errors.New("No data returned.")
) )
func main() { func main() {
flag.Parse() cfg := config{
RpcServer: "127.0.0.1:8334",
}
parser := flags.NewParser(&cfg, flags.None)
args := flag.Args() args, err := parser.Parse()
if len(args) < 1 { if err != nil {
usage() if e, ok := err.(*flags.Error); !ok || e.Type != flags.ErrHelp {
usage(parser)
}
return
}
if len(args) < 1 || cfg.Help {
usage(parser)
return return
} }
switch args[0] { switch args[0] {
default: default:
usage() usage(parser)
case "getblock": case "getblock":
if len(args) != 2 { if len(args) != 2 {
usage() usage(parser)
break break
} }
msg, err := btcjson.CreateMessage("getblock", args[1]) msg, err := btcjson.CreateMessage("getblock", args[1])
@ -41,7 +53,7 @@ func main() {
fmt.Printf("CreateMessage: %v\n", err) fmt.Printf("CreateMessage: %v\n", err)
break break
} }
reply, err := send(msg) reply, err := send(&cfg, msg)
if err != nil { if err != nil {
fmt.Printf("RpcCommand: %v\n", err) fmt.Printf("RpcCommand: %v\n", err)
break break
@ -53,7 +65,7 @@ func main() {
fmt.Printf("CreateMessage: %v\n", err) fmt.Printf("CreateMessage: %v\n", err)
break break
} }
reply, err := send(msg) reply, err := send(&cfg, msg)
if err != nil { if err != nil {
fmt.Printf("RpcCommand: %v\n", err) fmt.Printf("RpcCommand: %v\n", err)
break break
@ -61,7 +73,7 @@ func main() {
fmt.Printf("%d\n", int(reply.(float64))) fmt.Printf("%d\n", int(reply.(float64)))
case "getblockhash": case "getblockhash":
if len(args) != 2 { if len(args) != 2 {
usage() usage(parser)
break break
} }
idx, err := strconv.Atoi(args[1]) idx, err := strconv.Atoi(args[1])
@ -74,7 +86,7 @@ func main() {
fmt.Printf("CreateMessage: %v\n", err) fmt.Printf("CreateMessage: %v\n", err)
break break
} }
reply, err := send(msg) reply, err := send(&cfg, msg)
if err != nil { if err != nil {
fmt.Printf("RpcCommand: %v\n", err) fmt.Printf("RpcCommand: %v\n", err)
break break
@ -86,7 +98,7 @@ func main() {
fmt.Printf("CreateMessage: %v\n", err) fmt.Printf("CreateMessage: %v\n", err)
break break
} }
reply, err := send(msg) reply, err := send(&cfg, msg)
if err != nil { if err != nil {
fmt.Printf("RpcCommand: %v\n", err) fmt.Printf("RpcCommand: %v\n", err)
break break
@ -94,7 +106,7 @@ func main() {
fmt.Printf("%v\n", reply.(bool)) fmt.Printf("%v\n", reply.(bool))
case "getrawtransaction": case "getrawtransaction":
if len(args) != 2 { if len(args) != 2 {
usage() usage(parser)
break break
} }
msg, err := btcjson.CreateMessage("getrawtransaction", args[1], 1) msg, err := btcjson.CreateMessage("getrawtransaction", args[1], 1)
@ -102,7 +114,7 @@ func main() {
fmt.Printf("CreateMessage: %v\n", err) fmt.Printf("CreateMessage: %v\n", err)
break break
} }
reply, err := send(msg) reply, err := send(&cfg, msg)
if err != nil { if err != nil {
fmt.Printf("RpcCommand: %v\n", err) fmt.Printf("RpcCommand: %v\n", err)
break break
@ -114,7 +126,7 @@ func main() {
fmt.Printf("CreateMessage: %v\n", err) fmt.Printf("CreateMessage: %v\n", err)
break break
} }
reply, err := send(msg) reply, err := send(&cfg, msg)
if err != nil { if err != nil {
fmt.Printf("RpcCommand: %v\n", err) fmt.Printf("RpcCommand: %v\n", err)
break break
@ -123,8 +135,8 @@ func main() {
} }
} }
func send(msg []byte) (interface{}, error) { func send(cfg *config, msg []byte) (interface{}, error) {
reply, err := btcjson.RpcCommand(User, Password, Server, msg) reply, err := btcjson.RpcCommand(cfg.RpcUser, cfg.RpcPassword, cfg.RpcServer, msg)
if err != nil { if err != nil {
return 0, err return 0, err
} }
@ -135,13 +147,14 @@ func send(msg []byte) (interface{}, error) {
return reply.Result, nil return reply.Result, nil
} }
func usage() { func usage(parser *flags.Parser) {
fmt.Printf( parser.WriteHelp(os.Stderr)
"usage:\n" + fmt.Fprintf(os.Stderr,
"\tgetblock <blockhash>\n" + "\nCommands:\n"+
"\tgetblockcount\n" + "\tgetblock <blockhash>\n"+
"\tgetblockhash <blocknumber>\n" + "\tgetblockcount\n"+
"\tgetgenerate\n" + "\tgetblockhash <blocknumber>\n"+
"\tgetrawtransaction <txhash>\n" + "\tgetgenerate\n"+
"\tgetrawtransaction <txhash>\n"+
"\tstop\n") "\tstop\n")
} }