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);
});
});
current.e = e;
this.previous = current;
return current;

View File

@ -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;

View File

@ -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();
});
};

View File

@ -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
});
});
*/
};
/**