diff --git a/lib/bcoin/mempool.js b/lib/bcoin/mempool.js index f5787329..9c21a24c 100644 --- a/lib/bcoin/mempool.js +++ b/lib/bcoin/mempool.js @@ -460,7 +460,40 @@ Mempool.prototype.isSpent = function isSpent(hash, index, callback) { */ Mempool.prototype.getCoinsByAddress = function getCoinsByAddress(addresses, callback) { - return this.chain.db.getCoinsByAddress.call(this, addresses, callback); + var self = this; + var coins = []; + + if (!Array.isArray(addresses)) + addresses = [addresses]; + + addresses = utils.uniq(addresses); + + utils.forEachSerial(addresses, function(address, next) { + address = bcoin.address.getHash(address); + + if (!address) + return next(); + + self.db.lookup({ + gte: 'C/' + address, + lte: 'C/' + address + '~', + transform: function(key) { + key = key.split('/'); + return 'c/' + key[2] + '/' + key[3]; + }, + parse: function(data, key) { + var coin = bcoin.coin.fromRaw(data); + key = key.split('/'); + coin.hash = key[1]; + coin.index = +key[2]; + coins.push(coin); + } + }, next); + }, function(err) { + if (err) + return callback(err); + return callback(null, coins); + }); }; /** @@ -470,7 +503,44 @@ Mempool.prototype.getCoinsByAddress = function getCoinsByAddress(addresses, call */ Mempool.prototype.getTXByAddress = function getTXByAddress(addresses, callback) { - return this.chain.db.getTXByAddress.call(this, addresses, callback); + var self = this; + var txs = []; + var have = {}; + + if (!Array.isArray(addresses)) + addresses = [addresses]; + + addresses = utils.uniq(addresses); + + utils.forEachSerial(addresses, function(address, next) { + address = bcoin.address.getHash(address); + + if (!address) + return next(); + + self.db.lookup({ + gte: 'T/' + address, + lte: 'T/' + address + '~', + transform: function(key) { + var hash = key.split('/')[2]; + + if (addresses.length > 1) { + if (have[hash]) + return false; + have[hash] = true; + } + + return 't/' + hash; + }, + parse: function(data, key) { + txs.push(bcoin.tx.fromRaw(data)); + } + }, next); + }, function(err) { + if (err) + return callback(err); + return callback(null, txs); + }); }; /**