diff --git a/lib/services/address/index.js b/lib/services/address/index.js index fb050397..095a44a7 100644 --- a/lib/services/address/index.js +++ b/lib/services/address/index.js @@ -16,7 +16,9 @@ var utils = require('../../utils'); var LRU = require('lru-cache'); var XXHash = require('xxhash'); -const MAX_TX_QUERY_LIMIT = 1000; +const MAX_TX_QUERY_LIMIT_HISTORY = 1000; +const MAX_TX_QUERY_LIMIT_UTXO = 1000; +const MAX_TX_QUERY_LIMIT_SUMMARY = 5000; // See rationale about this cache at function getTxList(next) const TXID_LIST_CACHE_ITEMS = 250; // nr of items (this translates to: consecutive @@ -198,7 +200,7 @@ AddressService.prototype.getAddressHistory = function(addresses, options, stream if( !_.isUndefined(options.from) || !_.isUndefined(options.to)) { old_support = true; options.from = options.from || 0; - options.to = options.to || 0xffffffff; //Max value of to will actually be MAX_TX_QUERY_LIMIT + options.to = options.to || 0xffffffff; //Max value of to will actually be MAX_TX_QUERY_LIMIT_HISTORY } if (_.isString(addresses)) { @@ -224,15 +226,15 @@ AddressService.prototype.getAddressHistory = function(addresses, options, stream if(!results.items.some(x => x.txid() === tx.txid())) //push only if tx not already in array results.items.unshift(tx); //using unshift, so that recent tx (low) are at front - if(results.items.length > MAX_TX_QUERY_LIMIT) { //remove items from array when overflown + if(results.items.length > MAX_TX_QUERY_LIMIT_HISTORY) { //remove items from array when overflown results.items.sort((a, b) => (b.__height || 0xffffffff) - (a.__height || 0xffffffff) || b.txid().localeCompare(a.txid())); - let del_count = results.items.length - MAX_TX_QUERY_LIMIT; - let start_index = old_support ? MAX_TX_QUERY_LIMIT : 0; + let del_count = results.items.length - MAX_TX_QUERY_LIMIT_HISTORY; + let start_index = old_support ? MAX_TX_QUERY_LIMIT_HISTORY : 0; results.items.splice(start_index, del_count); results.incomplete = true; - if(!old_support && addr_count >= MAX_TX_QUERY_LIMIT) + if(!old_support && addr_count >= MAX_TX_QUERY_LIMIT_HISTORY) addr_options.flag_stop = true; //limit has reached, stop quering db for more tx } @@ -362,7 +364,7 @@ AddressService.prototype.getAddressSummary = function(address, options, streamer result.lastItem = tx.txid(); } - if(count >= MAX_TX_QUERY_LIMIT) {//stop quering db when limit reached + if(count >= MAX_TX_QUERY_LIMIT_SUMMARY) {//stop quering db when limit reached options.flag_stop = true; result.incomplete = true; } @@ -649,7 +651,7 @@ AddressService.prototype._aggregateAddressSummaryResult = function (tx, address, result.transactions.unshift(txid); //using unshift, so that recent tx (low confirmation) are at front - if(result.transactions.length > MAX_TX_QUERY_LIMIT) + if(result.transactions.length > MAX_TX_QUERY_LIMIT_SUMMARY) result.transactions.pop(); //pop the oldest tx in list (when list limit is maxed out) } @@ -740,7 +742,7 @@ AddressService.prototype.getAddressUnspentOutputs = function(address, options, c utxoStream.on('data', function(data) { - if(results.length >= MAX_TX_QUERY_LIMIT) { //Max array limit reached, end response + if(results.length >= MAX_TX_QUERY_LIMIT_UTXO) { //Max array limit reached, end response utxoStream.emit('end'); return; } @@ -941,7 +943,7 @@ AddressService.prototype._getAddressTxidHistory = function(address, options, cal txIdTransformStream._transform = function(chunk, enc, callback) { var txInfo = self._encoding.decodeAddressIndexKey(chunk); - if(results.length >= MAX_TX_QUERY_LIMIT) { //Max array limit reached, end response + if(results.length >= MAX_TX_QUERY_LIMIT_HISTORY) { //Max array limit reached, end response txIdTransformStream.emit('end'); return; }