Usability upgrades:
- node will start services prior to bcoin becoming synchronized - resume after peer disconnection and reconnection - error message when using non-supported versions of nodeJS.
This commit is contained in:
parent
511c0e2b54
commit
99d8a6f7ae
@ -415,6 +415,11 @@ HeaderService.prototype._onHeader = function(header) {
|
|||||||
HeaderService.prototype._onHeaders = function(headers) {
|
HeaderService.prototype._onHeaders = function(headers) {
|
||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
|
if (self._headerInterval) {
|
||||||
|
clearInterval(self._headerInterval);
|
||||||
|
}
|
||||||
|
|
||||||
log.debug('Header Service: Received: ' + headers.length + ' header(s).');
|
log.debug('Header Service: Received: ' + headers.length + ' header(s).');
|
||||||
|
|
||||||
var dbOps = [];
|
var dbOps = [];
|
||||||
@ -666,10 +671,26 @@ HeaderService.prototype._startSync = function() {
|
|||||||
|
|
||||||
HeaderService.prototype._sync = function() {
|
HeaderService.prototype._sync = function() {
|
||||||
|
|
||||||
log.info('Header Service: download progress: ' + this._tip.height + '/' +
|
var self = this;
|
||||||
this._bestHeight + ' (' + (this._tip.height / this._bestHeight*100.00).toFixed(2) + '%)');
|
|
||||||
|
|
||||||
this._p2p.getHeaders({ startHash: this._tip.hash });
|
var progress;
|
||||||
|
if (self._bestHeight === 0) {
|
||||||
|
progress = 0;
|
||||||
|
} else {
|
||||||
|
progress = (self._tip.height / self._bestHeight*100.00).toFixed(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
log.info('Header Service: download progress: ' + self._tip.height + '/' +
|
||||||
|
self._bestHeight + ' (' + progress + '%)');
|
||||||
|
|
||||||
|
self._p2p.getHeaders({ startHash: self._tip.hash });
|
||||||
|
|
||||||
|
// when connecting to a peer that isn't yet responding to getHeaders, we will start a interval timer
|
||||||
|
// to retry until we can get headers, this may be a very long interval
|
||||||
|
self._headerInterval = setInterval(function() {
|
||||||
|
log.info('Header Service: retrying get headers since ' + self._tip.hash);
|
||||||
|
self._p2p.getHeaders({ startHash: self._tip.hash });
|
||||||
|
}, 2000);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -3,14 +3,12 @@
|
|||||||
var index = require('../../');
|
var index = require('../../');
|
||||||
var log = index.log;
|
var log = index.log;
|
||||||
var bcoin = require('bcoin');
|
var bcoin = require('bcoin');
|
||||||
var EE = require('events').EventEmitter;
|
|
||||||
|
|
||||||
var Bcoin = function(options) {
|
var Bcoin = function(options) {
|
||||||
this._config = this._getConfig(options);
|
this._config = this._getConfig(options);
|
||||||
this.emitter = new EE();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
Bcoin.prototype.start = function(done) {
|
Bcoin.prototype.start = function(callback) {
|
||||||
var self = this;
|
var self = this;
|
||||||
self._bcoin = bcoin.fullnode(self._config);
|
self._bcoin = bcoin.fullnode(self._config);
|
||||||
|
|
||||||
@ -20,12 +18,8 @@ Bcoin.prototype.start = function(done) {
|
|||||||
self._bcoin.connect().then(function() {
|
self._bcoin.connect().then(function() {
|
||||||
log.info('Waiting for Bcoin to sync');
|
log.info('Waiting for Bcoin to sync');
|
||||||
self._bcoin.startSync();
|
self._bcoin.startSync();
|
||||||
if (self._bcoin.chain.synced){
|
// this will instruct the p2p service to start trying to connect to bcoin right away
|
||||||
return done();
|
callback();
|
||||||
}
|
|
||||||
self._bcoin.chain.once('full', function() {
|
|
||||||
done();
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
@ -128,9 +128,11 @@ P2P.prototype._disconnectPool = function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
P2P.prototype.stop = function(callback) {
|
P2P.prototype.stop = function(callback) {
|
||||||
|
|
||||||
if (this._bcoin){
|
if (this._bcoin){
|
||||||
return this._bcoin.stop(callback);
|
return this._bcoin.stop(callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
setImmediate(callback);
|
setImmediate(callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -297,10 +299,31 @@ P2P.prototype._onPeerInventory = function(peer, message) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
P2P.prototype._matchNetwork = function(network) {
|
||||||
|
|
||||||
|
if (this.node.network !== network.name &&
|
||||||
|
this.node.network !== network.alias) {
|
||||||
|
log.error('Configured network: "' + this.node.network +
|
||||||
|
'" does not match our peer\'s reported network: "' +
|
||||||
|
network.name + '".');
|
||||||
|
return this.node.stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.node.network === network.name ? network.name : network.alias;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
P2P.prototype._onPeerReady = function(peer, addr) {
|
P2P.prototype._onPeerReady = function(peer, addr) {
|
||||||
|
|
||||||
|
// want to make sure the peer we are connecting to matches our network config.
|
||||||
|
var network = this._matchNetwork(peer.network);
|
||||||
|
|
||||||
|
if (!network) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
log.info('Connected to peer: ' + addr.ip.v4 + ', network: ' +
|
log.info('Connected to peer: ' + addr.ip.v4 + ', network: ' +
|
||||||
peer.network.alias + ', version: ' + peer.version + ', subversion: ' +
|
network + ', version: ' + peer.version + ', subversion: ' +
|
||||||
peer.subversion + ', status: ' + peer.status + ', port: ' +
|
peer.subversion + ', status: ' + peer.status + ', port: ' +
|
||||||
peer.port + ', best height: ' + peer.bestHeight);
|
peer.port + ', best height: ' + peer.bestHeight);
|
||||||
|
|
||||||
@ -362,20 +385,36 @@ P2P.prototype._setResourceFilter = function(filter, resource) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
P2P.prototype._startBcoin = function(callback) {
|
P2P.prototype._startBcoin = function(callback) {
|
||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
const network = ['livenet', 'live', 'main', 'mainnet'].indexOf(this.node.network) !== -1? 'main' : 'testnet';
|
|
||||||
|
var network;
|
||||||
|
var port;
|
||||||
|
if (['livenet', 'live', 'main', 'mainnet'].indexOf(this.node.network) !== -1) {
|
||||||
|
network = 'main';
|
||||||
|
port = this._configPeers[0].port || 8333;
|
||||||
|
} else if (this.node.network !== 'regtest') {
|
||||||
|
network = 'testnet';
|
||||||
|
port = this._configPeers[0].port || 18333;
|
||||||
|
} else {
|
||||||
|
network = this.node.network;
|
||||||
|
port = this._configPeers[0].port || 48444;
|
||||||
|
}
|
||||||
|
|
||||||
self._bcoin = new Bcoin({
|
self._bcoin = new Bcoin({
|
||||||
network: network,
|
network: network,
|
||||||
prefix: self.node.datadir,
|
prefix: self.node.datadir,
|
||||||
port: 48333
|
port: port
|
||||||
});
|
});
|
||||||
|
|
||||||
self._bcoin.start(callback);
|
self._bcoin.start(callback);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
P2P.prototype._startBcoinIfNecessary = function(callback) {
|
P2P.prototype._startBcoinIfNecessary = function(callback) {
|
||||||
if (!this._hasPeers()) {
|
if (!this._hasPeers()) {
|
||||||
log.info('Peers not explicitly configured, starting a local bcoin node.');
|
log.info('Peers not explicitly configured, starting a local bcoin node.');
|
||||||
this._configPeers = [{ip: {v4: '127.0.0.1'}, port: 48333}];
|
this._configPeers = [{ ip: { v4: '127.0.0.1'} }];
|
||||||
return this._startBcoin(callback);
|
return this._startBcoin(callback);
|
||||||
}
|
}
|
||||||
setImmediate(callback);
|
setImmediate(callback);
|
||||||
|
|||||||
2
package-lock.json
generated
2
package-lock.json
generated
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "bitcore-node",
|
"name": "bitcore-node",
|
||||||
"version": "5.0.0-beta.3",
|
"version": "5.0.0-beta.4",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
@ -29,7 +29,7 @@
|
|||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"async": "^2.5.0",
|
"async": "^2.5.0",
|
||||||
"bcoin": "bcoin-org/bcoin#57b98b2368c8106a9c215d73e40e1a7ae39042f3",
|
"bcoin": "1.0.0-beta.14",
|
||||||
"bitcoind-rpc": "^0.6.0",
|
"bitcoind-rpc": "^0.6.0",
|
||||||
"bitcore-lib": "5.0.0-beta.1",
|
"bitcore-lib": "5.0.0-beta.1",
|
||||||
"bitcore-p2p": "5.0.0-beta.1",
|
"bitcore-p2p": "5.0.0-beta.1",
|
||||||
|
|||||||
@ -233,6 +233,7 @@ describe('DB', function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('#close', function() {
|
describe('#close', function() {
|
||||||
|
this.timeout(3000);
|
||||||
it('should close the store if there is a store and it is open', function(done) {
|
it('should close the store if there is a store and it is open', function(done) {
|
||||||
|
|
||||||
var close = sandbox.stub().callsArgWith(0, null);
|
var close = sandbox.stub().callsArgWith(0, null);
|
||||||
@ -246,6 +247,7 @@ describe('DB', function() {
|
|||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
this.timeout(2000);
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('#getServiceTip', function() {
|
describe('#getServiceTip', function() {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user