faster sync via p2p

This commit is contained in:
Manuel Araoz 2015-04-09 13:17:19 -03:00
parent 9f290649e6
commit fe038ac5f8
4 changed files with 31 additions and 12 deletions

View File

@ -52,7 +52,6 @@ EventBus.prototype.process = function(e) {
self.emit(event.name || event.constructor.name, event); self.emit(event.name || event.constructor.name, event);
}); });
}); });
current.e = e;
this.previous = current; this.previous = current;
return current; return current;

View File

@ -66,19 +66,23 @@ NetworkMonitor.prototype.setupPeer = function(peer) {
}; };
NetworkMonitor.prototype.requestBlocks = function(locator) { 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({ this.peer.sendMessage(messages.GetBlocks({
starts: locator starts: locator,
})); }));
}; };
NetworkMonitor.prototype.start = function() { NetworkMonitor.prototype.start = function() {
this.peer.connect(); this.peer.connect();
}; };
NetworkMonitor.prototype.stop = function(reason) { NetworkMonitor.prototype.stop = function(reason) {
this.peer.disconnect(); this.peer.disconnect();
console.log('Stopping network, reason:', reason); console.log('Stopping network, reason:', reason);
}; };
NetworkMonitor.prototype.abort = function(reason) { NetworkMonitor.prototype.abort = function(reason) {
this.peer.disconnect(); this.peer.disconnect();
throw reason; throw reason;

View File

@ -96,6 +96,7 @@ util.inherits(BitcoreNode, EventEmitter);
BitcoreNode.prototype.requestFromTip = function() { BitcoreNode.prototype.requestFromTip = function() {
var locator = this.blockchain.getBlockLocator(); var locator = this.blockchain.getBlockLocator();
console.log('requesting blocks, locator size:', locator.length);
this.networkMonitor.requestBlocks(locator); this.networkMonitor.requestBlocks(locator);
}; };
@ -153,7 +154,7 @@ BitcoreNode.prototype.stop = function(reason) {
BitcoreNode.prototype.sync = function() { BitcoreNode.prototype.sync = function() {
var self = this; var self = this;
this.networkMonitor.on('ready', function() { this.networkMonitor.on('ready', function() {
self.networkMonitor.requestBlocks(self.blockchain.getBlockLocator()); self.requestFromTip();
}); });
}; };

View File

@ -244,31 +244,35 @@ BlockService.prototype.confirm = function(block) {
var ops = []; var ops = [];
//console.log(0);
return Promise.try(function() { return Promise.try(function() {
//console.log(1); //console.log(1);
return self._setNextBlock(ops, block.header.prevHash, block); return self._setNextBlock(ops, block.header.prevHash, block);
}).then(function() { })
.then(function() {
//console.log(3); //console.log(3);
return self._setBlockHeight(ops, block, block.height); return self._setBlockHeight(ops, block, block.height);
}).then(function() { })
.then(function() {
//console.log(4); //console.log(4);
return self._setBlockByTs(ops, block); return self._setBlockByTs(ops, block);
}).then(function() { })
.then(function() {
//console.log(5); //console.log(5);
return Promise.all(block.transactions.map(function(transaction) { return Promise.all(block.transactions.map(function(transaction) {
return self.transactionService._confirmTransaction(ops, block, transaction); return self.transactionService._confirmTransaction(ops, block, transaction);
})); }));
}).then(function() { })
.then(function() {
//console.log(6); //console.log(6);
var p = self.database.batchAsync(ops); var p = self.database.batchAsync(ops);
//console.log(6.5);
return p; return p;
}) })
@ -308,15 +312,22 @@ BlockService.prototype._setBlockHeight = function(ops, block, height) {
}; };
BlockService.prototype._setBlockByTs = function(ops, block) { BlockService.prototype._setBlockByTs = function(ops, block) {
// TODO: uncomment this
/*
var self = 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() { return Promise.try(function() {
console.log('a');
return self.database.getAsync(key); return self.database.getAsync(key);
}).then(function(result) { })
.then(function(result) {
console.log('b');
if (result === block.hash) { if (result === block.hash) {
return Promise.resolve(); return Promise.resolve();
} else { } else {
@ -324,7 +335,10 @@ BlockService.prototype._setBlockByTs = function(ops, block) {
throw new Error('Found blocks that have same timestamp'); 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 // TODO: Check if err is not found
return ops.push({ return ops.push({
type: 'put', type: 'put',
@ -332,6 +346,7 @@ BlockService.prototype._setBlockByTs = function(ops, block) {
value: block.hash value: block.hash
}); });
}); });
*/
}; };
/** /**