faster sync via p2p
This commit is contained in:
parent
9f290649e6
commit
fe038ac5f8
@ -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;
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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();
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
@ -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
|
||||
});
|
||||
});
|
||||
*/
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
Loading…
Reference in New Issue
Block a user