diff --git a/lib/bcoin/mempool.js b/lib/bcoin/mempool.js index 24c5b5ec..b72ef4a9 100644 --- a/lib/bcoin/mempool.js +++ b/lib/bcoin/mempool.js @@ -1146,14 +1146,15 @@ Mempool.prototype.getBalance = function getBalance(callback) { lte: 'c~', values: true, parse: function(data, key) { - return bcoin.coin.fromRaw(data); + assert(data.length >= 16); + return utils.read64N(data, 8); } }, function(err, coins) { if (err) return callback(err); for (i = 0; i < coins.length; i++) - total += coins[i].value; + total += coins[i]; return callback(null, { confirmed: 0, diff --git a/lib/bcoin/txdb.js b/lib/bcoin/txdb.js index e10694a1..72d8ab37 100644 --- a/lib/bcoin/txdb.js +++ b/lib/bcoin/txdb.js @@ -1609,6 +1609,7 @@ TXDB.prototype.hasCoin = function hasCoin(hash, index, callback) { */ TXDB.prototype.getBalance = function getBalance(address, callback) { + var self = this; var confirmed = 0; var unconfirmed = 0; var i; @@ -1618,21 +1619,49 @@ TXDB.prototype.getBalance = function getBalance(address, callback) { address = null; } - return this.getCoins(address, function(err, coins) { + // return this.getCoins(address, function(err, coins) { + // if (err) + // return callback(err); + // + // for (i = 0; i < coins.length; i++) { + // if (coins[i].height === -1) + // unconfirmed += coins[i].value; + // else + // confirmed += coins[i].value; + // } + // + // return callback(null, { + // confirmed: confirmed, + // unconfirmed: unconfirmed, + // total: confirmed + unconfirmed + // }); + // }); + + return this.getCoinHashes(address, function(err, hashes) { if (err) return callback(err); - for (i = 0; i < coins.length; i++) { - if (coins[i].height === -1) - unconfirmed += coins[i].value; - else - confirmed += coins[i].value; - } + utils.forEachSerial(hashes, function(hash, next) { + self.db.fetch('c/' + hash[0] + '/' + hash[1], function(data, key) { + var height = utils.readU32(data, 4); + var value = utils.read64N(data, 8); - return callback(null, { - confirmed: confirmed, - unconfirmed: unconfirmed, - total: confirmed + unconfirmed + assert(data.length >= 16); + + if (height === 0x7fffffff) + unconfirmed += value; + else + confirmed += value; + }, next); + }, function(err) { + if (err) + return callback(err); + + return callback(null, { + confirmed: confirmed, + unconfirmed: unconfirmed, + total: confirmed + unconfirmed + }); }); }); };