From fe038ac5f8a52d6fea1adbd78ad17a12a9b33e94 Mon Sep 17 00:00:00 2001 From: Manuel Araoz Date: Thu, 9 Apr 2015 13:17:19 -0300 Subject: [PATCH] faster sync via p2p --- lib/eventbus.js | 1 - lib/networkmonitor.js | 8 ++++++-- lib/node.js | 3 ++- lib/services/block.js | 31 +++++++++++++++++++++++-------- 4 files changed, 31 insertions(+), 12 deletions(-) diff --git a/lib/eventbus.js b/lib/eventbus.js index 90730674..e67c09e3 100644 --- a/lib/eventbus.js +++ b/lib/eventbus.js @@ -52,7 +52,6 @@ EventBus.prototype.process = function(e) { self.emit(event.name || event.constructor.name, event); }); }); - current.e = e; this.previous = current; return current; diff --git a/lib/networkmonitor.js b/lib/networkmonitor.js index 7fbd83c4..fb500299 100644 --- a/lib/networkmonitor.js +++ b/lib/networkmonitor.js @@ -66,19 +66,23 @@ NetworkMonitor.prototype.setupPeer = function(peer) { }; NetworkMonitor.prototype.requestBlocks = function(locator) { - $.checkArgument(_.isArray(locator) && _.isString(locator[0]), 'start must be a block hash string array'); + $.checkArgument(_.isArray(locator) && + _.isUndefined(locator[0]) || + _.isString(locator[0]), 'start must be a block hash string array'); this.peer.sendMessage(messages.GetBlocks({ - starts: locator + starts: locator, })); }; NetworkMonitor.prototype.start = function() { this.peer.connect(); }; + NetworkMonitor.prototype.stop = function(reason) { this.peer.disconnect(); console.log('Stopping network, reason:', reason); }; + NetworkMonitor.prototype.abort = function(reason) { this.peer.disconnect(); throw reason; diff --git a/lib/node.js b/lib/node.js index 78a01eee..c8c78ca0 100644 --- a/lib/node.js +++ b/lib/node.js @@ -96,6 +96,7 @@ util.inherits(BitcoreNode, EventEmitter); BitcoreNode.prototype.requestFromTip = function() { var locator = this.blockchain.getBlockLocator(); + console.log('requesting blocks, locator size:', locator.length); this.networkMonitor.requestBlocks(locator); }; @@ -153,7 +154,7 @@ BitcoreNode.prototype.stop = function(reason) { BitcoreNode.prototype.sync = function() { var self = this; this.networkMonitor.on('ready', function() { - self.networkMonitor.requestBlocks(self.blockchain.getBlockLocator()); + self.requestFromTip(); }); }; diff --git a/lib/services/block.js b/lib/services/block.js index 38d833e9..eb4fb229 100644 --- a/lib/services/block.js +++ b/lib/services/block.js @@ -244,31 +244,35 @@ BlockService.prototype.confirm = function(block) { var ops = []; + //console.log(0); return Promise.try(function() { //console.log(1); return self._setNextBlock(ops, block.header.prevHash, block); - }).then(function() { + }) + .then(function() { //console.log(3); return self._setBlockHeight(ops, block, block.height); - }).then(function() { + }) + .then(function() { //console.log(4); return self._setBlockByTs(ops, block); - }).then(function() { + }) + .then(function() { //console.log(5); return Promise.all(block.transactions.map(function(transaction) { return self.transactionService._confirmTransaction(ops, block, transaction); })); - }).then(function() { + }) + .then(function() { //console.log(6); var p = self.database.batchAsync(ops); - //console.log(6.5); return p; }) @@ -308,15 +312,22 @@ BlockService.prototype._setBlockHeight = function(ops, block, height) { }; BlockService.prototype._setBlockByTs = function(ops, block) { + + // TODO: uncomment this + /* var self = this; - var key = Index.timestamp + block.time; + var key = Index.timestamp + block.header.time; + console.log('key', key); return Promise.try(function() { + console.log('a'); return self.database.getAsync(key); - }).then(function(result) { + }) + .then(function(result) { + console.log('b'); if (result === block.hash) { return Promise.resolve(); } else { @@ -324,7 +335,10 @@ BlockService.prototype._setBlockByTs = function(ops, block) { throw new Error('Found blocks that have same timestamp'); } - }).error(function(err) { + }) + .error(function(err) { + console.log('err', err); + // TODO: Check if err is not found return ops.push({ type: 'put', @@ -332,6 +346,7 @@ BlockService.prototype._setBlockByTs = function(ops, block) { value: block.hash }); }); + */ }; /**