This commit is contained in:
Chris Kleeschulte 2017-07-25 23:10:07 -04:00
parent f69dfd0462
commit 35a21288b4
2 changed files with 47 additions and 21 deletions

View File

@ -49,7 +49,7 @@ inherits(BlockService, BaseService);
BlockService.dependencies = [ 'p2p', 'db', 'header' ];
BlockService.MAX_BLOCKS = 1;
BlockService.MAX_BLOCKS = 3
// --- public prototype functions
BlockService.prototype.getAPIMethods = function() {

View File

@ -10,6 +10,7 @@ var async = require('async');
var BN = require('bn.js');
var consensus = require('bcoin').consensus;
var assert = require('assert');
var constants = require('../../constants');
var HeaderService = function(options) {
@ -23,6 +24,7 @@ var HeaderService = function(options) {
this.subscriptions = {};
this.subscriptions.block = [];
this.GENESIS_HASH = constants.BITCOIN_GENESIS_HASH[this.node.getNetworkName()];
};
inherits(HeaderService, BaseService);
@ -90,7 +92,23 @@ HeaderService.prototype.start = function(callback) {
},
function(tip, next) {
self._tip = tip;
self._originalTip = Object.assign(self._tip, {});
if (self._tip.height === 0) {
self._headers.set(self.GENESIS_HASH, {
hash: self.GENESIS_HASH,
height: 0,
chainwork: HeaderService.STARTING_CHAINWORK,
version: 1,
prevHash: new Array(65).join('0'),
timestamp: 1231006505,
nonce: 2083236893,
bits: 0x1d00ffff,
merkleRoot: '4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b'
});
}
self._originalTip = {
height: self._tip.height,
hash: self._tip.hash
};
next();
},
function(next) {
@ -121,12 +139,14 @@ HeaderService.prototype._startSubscriptions = function() {
}
this._subscribed = true;
if (!this._bus) {
this._bus = this.node.openBus({remoteAddress: 'localhost-header'});
}
this._bus.on('p2p/headers', this._onHeaders.bind(this));
this._bus.on('p2p/block', this._onBlock.bind(this));
this._bus.subscribe('p2p/headers');
this._bus.subscribe('p2p/block');
@ -215,7 +235,30 @@ HeaderService.prototype._onHeaders = function(headers, convert) {
});
self._db._store.batch(dbOps, function() {
self._sync();
if (self._tip.height < self._bestHeight) {
self._sync();
return;
}
log.debug('Header Service: download complete.');
// have we reorg'ed since we've been shutdown?
if (self._originalTip.height > 0) {
var headerHash = self._headers.getIndex(self._originalTip.height).hash;
console.log(headerHash, self._originalTip, self._tip, self._headers.getIndex(0));
if (self._originalTip.hash !== headerHash) {
self.emit('reorg', headerHash, self._headers);
return;
}
}
self.emit('headers', self._headers);
});
};
@ -251,29 +294,12 @@ HeaderService.prototype._startSync = function() {
HeaderService.prototype._sync = function() {
if (this._tip.height < this._bestHeight) {
log.debug('Header Service: download progress: ' + this._tip.height + '/' +
this._numNeeded + ' (' + (this._tip.height / this._numNeeded*100).toFixed(2) + '%)');
this._bestHeight + ' (' + (this._tip.height / this._bestHeight*100).toFixed(2) + '%)');
this._p2p.getHeaders({ startHash: this._tip.hash });
return;
}
log.debug('Header Service: download complete.');
// have we reorg'ed since we've been shutdown?
var headerHash = this._headers.getIndex(this._originalTip.height).hash;
if (this._originalTip.hash !== headerHash) {
this.emit('reorg', headerHash, this._headers);
return;
}
this.emit('headers', this._headers);
};