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);
|
self.emit(event.name || event.constructor.name, event);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
current.e = e;
|
|
||||||
this.previous = current;
|
this.previous = current;
|
||||||
return current;
|
return current;
|
||||||
|
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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();
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
*/
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user