Add getaccount RPC command.

This commit is contained in:
Josh Rickmar 2013-12-30 16:31:33 -05:00
parent 920ff10155
commit fa699ef4a5

View file

@ -43,6 +43,7 @@ type cmdHandler func(chan []byte, btcjson.Cmd)
var rpcHandlers = map[string]cmdHandler{ var rpcHandlers = map[string]cmdHandler{
// Standard bitcoind methods (implemented) // Standard bitcoind methods (implemented)
"dumpprivkey": DumpPrivKey, "dumpprivkey": DumpPrivKey,
"getaccount": GetAccount,
"getaddressesbyaccount": GetAddressesByAccount, "getaddressesbyaccount": GetAddressesByAccount,
"getbalance": GetBalance, "getbalance": GetBalance,
"getnewaddress": GetNewAddress, "getnewaddress": GetNewAddress,
@ -60,7 +61,6 @@ var rpcHandlers = map[string]cmdHandler{
"backupwallet": Unimplemented, "backupwallet": Unimplemented,
"createmultisig": Unimplemented, "createmultisig": Unimplemented,
"dumpwallet": Unimplemented, "dumpwallet": Unimplemented,
"getaccount": Unimplemented,
"getaccountaddress": Unimplemented, "getaccountaddress": Unimplemented,
"getrawchangeaddress": Unimplemented, "getrawchangeaddress": Unimplemented,
"getreceivedbyaccount": Unimplemented, "getreceivedbyaccount": Unimplemented,
@ -338,6 +338,37 @@ func GetBalances(frontend chan []byte, cmd btcjson.Cmd) {
NotifyBalances(frontend) NotifyBalances(frontend)
} }
// GetAccount replies to a getaccount request by replying with the
// account name associated with a single address.
func GetAccount(frontend chan []byte, icmd btcjson.Cmd) {
// Type assert icmd to access parameters.
cmd, ok := icmd.(*btcjson.GetAccountCmd)
if !ok {
ReplyError(frontend, icmd.Id(), &btcjson.ErrInternal)
return
}
// Is address valid?
_, net, err := btcutil.DecodeAddress(cmd.Address)
if err != nil || net != cfg.Net() {
ReplyError(frontend, cmd.Id(), &btcjson.ErrInvalidAddressOrKey)
return
}
// Look up account which holds this address.
aname, err := LookupAccountByAddress(cmd.Address)
if err == ErrNotFound {
e := &btcjson.Error{
Code: btcjson.ErrInvalidAddressOrKey.Code,
Message: "Address not found in wallet",
}
ReplyError(frontend, cmd.Id(), e)
return
}
ReplySuccess(frontend, cmd.Id(), aname)
}
// GetAddressBalance replies to a getaddressbalance extension request // GetAddressBalance replies to a getaddressbalance extension request
// by replying with the current balance (sum of unspent transaction // by replying with the current balance (sum of unspent transaction
// output amounts) for a single address. // output amounts) for a single address.