Add btcctl; currently a barebones utility to send commands
to btcd.
This commit is contained in:
parent
cd68e3060f
commit
e8d73d83ef
1 changed files with 147 additions and 0 deletions
147
util/btcctl/btcctl.go
Normal file
147
util/btcctl/btcctl.go
Normal file
|
@ -0,0 +1,147 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"flag"
|
||||
"fmt"
|
||||
"github.com/conformal/btcjson"
|
||||
"github.com/davecgh/go-spew/spew"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
const (
|
||||
User = "rpcuser"
|
||||
Password = "rpcpass"
|
||||
Server = "127.0.0.1:8332"
|
||||
)
|
||||
|
||||
var (
|
||||
ErrNoData = errors.New("No data returned.")
|
||||
)
|
||||
|
||||
func main() {
|
||||
flag.Parse()
|
||||
|
||||
args := flag.Args()
|
||||
if len(args) < 1 {
|
||||
usage()
|
||||
return
|
||||
}
|
||||
|
||||
switch args[0] {
|
||||
default:
|
||||
usage()
|
||||
case "getblock":
|
||||
if len(args) != 2 {
|
||||
usage()
|
||||
break
|
||||
}
|
||||
msg, err := btcjson.CreateMessage("getblock", args[1])
|
||||
if err != nil {
|
||||
fmt.Printf("CreateMessage: %v\n", err)
|
||||
break
|
||||
}
|
||||
reply, err := send(msg)
|
||||
if err != nil {
|
||||
fmt.Printf("RpcCommand: %v\n", err)
|
||||
break
|
||||
}
|
||||
spew.Dump(reply.(btcjson.BlockResult))
|
||||
case "getblockcount":
|
||||
msg, err := btcjson.CreateMessage("getblockcount")
|
||||
if err != nil {
|
||||
fmt.Printf("CreateMessage: %v\n", err)
|
||||
break
|
||||
}
|
||||
reply, err := send(msg)
|
||||
if err != nil {
|
||||
fmt.Printf("RpcCommand: %v\n", err)
|
||||
break
|
||||
}
|
||||
fmt.Printf("%d\n", int(reply.(float64)))
|
||||
case "getblockhash":
|
||||
if len(args) != 2 {
|
||||
usage()
|
||||
break
|
||||
}
|
||||
idx, err := strconv.Atoi(args[1])
|
||||
if err != nil {
|
||||
fmt.Printf("Atoi: %v\n", err)
|
||||
break
|
||||
}
|
||||
msg, err := btcjson.CreateMessage("getblockhash", idx)
|
||||
if err != nil {
|
||||
fmt.Printf("CreateMessage: %v\n", err)
|
||||
break
|
||||
}
|
||||
reply, err := send(msg)
|
||||
if err != nil {
|
||||
fmt.Printf("RpcCommand: %v\n", err)
|
||||
break
|
||||
}
|
||||
fmt.Printf("%v\n", reply)
|
||||
case "getgenerate":
|
||||
msg, err := btcjson.CreateMessage("getgenerate")
|
||||
if err != nil {
|
||||
fmt.Printf("CreateMessage: %v\n", err)
|
||||
break
|
||||
}
|
||||
reply, err := send(msg)
|
||||
if err != nil {
|
||||
fmt.Printf("RpcCommand: %v\n", err)
|
||||
break
|
||||
}
|
||||
fmt.Printf("%v\n", reply.(bool))
|
||||
case "getrawtransaction":
|
||||
if len(args) != 2 {
|
||||
usage()
|
||||
break
|
||||
}
|
||||
msg, err := btcjson.CreateMessage("getrawtransaction", args[1], 1)
|
||||
if err != nil {
|
||||
fmt.Printf("CreateMessage: %v\n", err)
|
||||
break
|
||||
}
|
||||
reply, err := send(msg)
|
||||
if err != nil {
|
||||
fmt.Printf("RpcCommand: %v\n", err)
|
||||
break
|
||||
}
|
||||
spew.Dump(reply)
|
||||
case "stop":
|
||||
msg, err := btcjson.CreateMessage("stop")
|
||||
if err != nil {
|
||||
fmt.Printf("CreateMessage: %v\n", err)
|
||||
break
|
||||
}
|
||||
reply, err := send(msg)
|
||||
if err != nil {
|
||||
fmt.Printf("RpcCommand: %v\n", err)
|
||||
break
|
||||
}
|
||||
fmt.Printf("%s\n", reply.(string))
|
||||
}
|
||||
}
|
||||
|
||||
func send(msg []byte) (interface{}, error) {
|
||||
reply, err := btcjson.RpcCommand(User, Password, Server, msg)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
if reply.Result == nil {
|
||||
err := ErrNoData
|
||||
return 0, err
|
||||
}
|
||||
return reply.Result, nil
|
||||
}
|
||||
|
||||
func usage() {
|
||||
fmt.Printf(
|
||||
"usage:\n" +
|
||||
"\tgetblock <blockhash>\n" +
|
||||
"\tgetblockcount\n" +
|
||||
"\tgetblockhash <blocknumber>\n" +
|
||||
"\tgetgenerate\n" +
|
||||
"\tgetrawtransaction <txhash>\n" +
|
||||
"\tstop\n")
|
||||
}
|
Loading…
Reference in a new issue