diff --git a/lib/node.js b/lib/node.js index 337f497..6a8e799 100644 --- a/lib/node.js +++ b/lib/node.js @@ -105,6 +105,7 @@ function Node () this._socket = false; this._latestQueue = null; + this._chainDebouncer = 0; this.pendingFilter = false; this.chainFilter = false; this.updateInterval = false; @@ -233,6 +234,7 @@ Node.prototype.setupSockets = function() }) .on('timeout', function () { + self._socket = false; console.error('wsc', 'Socket connection timeout'); }) .on('close', function () @@ -247,6 +249,7 @@ Node.prototype.setupSockets = function() }) .on('online', function () { + self._socket = true; console.info('wsc', 'Network connection is online'); }) .on('reconnect', function () @@ -255,19 +258,23 @@ Node.prototype.setupSockets = function() }) .on('reconnect scheduled', function (opts) { + self._socket = false; console.warn('wsc', 'Reconnecting in', opts.scheduled, 'ms'); console.warn('wsc', 'This is attempt', opts.attempt, 'out of', opts.retries); }) .on('reconnected', function (opts) { + self._socket = true; console.success('wsc', 'Socket reconnected successfully after', opts.duration, 'ms'); }) .on('reconnect timeout', function (err, opts) { + self._socket = false; console.error('wsc', 'Socket reconnect atempt took too long:', err.message); }) .on('reconnect failed', function (err, opts) { + self._socket = false; console.error('wsc', 'Socket reconnect failed:', err.message); }); } @@ -388,7 +395,12 @@ Node.prototype.validateLatestBlock = function (error, result, timeString) { console.warn("==>", "Got same block:", chalk.reset.cyan(block.number)); - return false; + if( _.isEqual(JSON.stringify(this.stats.block), JSON.stringify(block)) ) + return false; + + console.info(this.stats.block); + console.info(block); + console.warn("Blocks are different... updating block"); } console.success("==>", "Got block:", chalk.reset.red(block.number)); @@ -655,7 +667,24 @@ Node.prototype.setWatches = function() console.info('>>>', 'Chain Filter triggered: ', chalk.reset.red(hash), '- last trigger:', chalk.reset.cyan(time)); - self._latestQueue.push(hash); + if(time < 5) + { + self._chainDebouncer++; + } else { + self._chainDebouncer = 0; + } + + if(self._chainDebouncer < 20) + { + self._latestQueue.push(hash); + } + else + { + debounce(function() { + self._latestQueue.push(hash); + self._chainDebouncer = 0; + }, 5); + } }); console.success("Installed chain filter"); @@ -686,8 +715,9 @@ Node.prototype.setWatches = function() self.getPending(); }, 5); } - console.success("Installed pending filter"); }); + + console.success("Installed pending filter"); } catch (err) {