From e3416add35c97e96da90ae68be7b35080686f08f Mon Sep 17 00:00:00 2001 From: Josh Rickmar Date: Tue, 3 Sep 2013 11:00:01 -0400 Subject: [PATCH] Implement 'getbalance' replier (currently replies with 0). --- cmdmgr.go | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/cmdmgr.go b/cmdmgr.go index 5d30513..d3c56ef 100644 --- a/cmdmgr.go +++ b/cmdmgr.go @@ -155,6 +155,8 @@ func ProcessFrontendMsg(reply chan []byte, msg []byte) { // Standard bitcoind methods case "getaddressesbyaccount": GetAddressesByAccount(reply, msg) + case "getbalance": + GetBalance(reply, msg) case "getnewaddress": GetNewAddress(reply, msg) case "walletlock": @@ -170,7 +172,7 @@ func ProcessFrontendMsg(reply chan []byte, msg []byte) { default: // btcwallet does not understand method. Pass to btcd. - log.Info("Unknown btcwallet method", cmd) + log.Info("Unknown btcwallet method ", cmd) seq.Lock() n := seq.n @@ -215,7 +217,7 @@ func ReplySuccess(reply chan []byte, id interface{}, result interface{}) { } } -// GetAddressesByAccount Gets all addresses for an account. +// GetAddressesByAccount replies with all addresses for an account. func GetAddressesByAccount(reply chan []byte, msg []byte) { var v map[string]interface{} json.Unmarshal(msg, &v) @@ -233,6 +235,38 @@ func GetAddressesByAccount(reply chan []byte, msg []byte) { ReplySuccess(reply, v["id"], result) } +// GetBalance replies with the balance for an account (wallet). If +// the requested wallet does not exist, a JSON error will be returned to +// the client. +// +// TODO(jrick): Actually calculate correct balance. +func GetBalance(reply chan []byte, msg []byte) { + var v map[string]interface{} + json.Unmarshal(msg, &v) + params := v["params"].([]interface{}) + var wname string + if len(params) > 0 { + if s, ok := params[0].(string); ok { + wname = s + } else { + ReplyError(reply, v["id"], &InvalidParams) + } + } + + wallets.RLock() + w := wallets.m[wname] + wallets.RUnlock() + var result interface{} + if w != nil { + result = 0 // TODO(jrick) + ReplySuccess(reply, v["id"], result) + } else { + e := WalletInvalidAccountName + e.Message = fmt.Sprintf("Wallet for account '%s' does not exist.", wname) + ReplyError(reply, v["id"], &e) + } +} + // GetNewAddress gets or generates a new address for an account. If // the requested wallet does not exist, a JSON error will be returned to // the client.