Fixed issues with reorg again.

This commit is contained in:
Chris Kleeschulte 2017-09-14 10:10:07 -04:00
parent 7350fb3bf6
commit de163ad4c9
No known key found for this signature in database
GPG Key ID: 33195D27EF6BDB7F
11 changed files with 78 additions and 72 deletions

View File

@ -201,14 +201,6 @@ Node.prototype.start = function(callback) {
);
};
Node.prototype.getNetworkName = function() {
var network = this.network.name;
if (this.network.regtestEnabled) {
network = 'regtest';
}
return network;
};
Node.prototype.stop = function(callback) {
log.info('Beginning shutdown');

View File

@ -191,11 +191,12 @@ BlockService.prototype._checkTip = function(callback) {
assert(self._reorgQueue.length === 0, 'Reorg Queue is not the expected length.');
var hash = header.hash;
if (self._reorgQueue.indexOf(hash) === -1) {
self._reorgQueue.push(hash);
}
self._handleReorg(headers, callback);
self._handleReorg(hash, headers, callback);
});
@ -397,13 +398,12 @@ BlockService.prototype._getHash = function(blockArg, callback) {
};
BlockService.prototype._handleReorg = function(allHeaders, callback) {
BlockService.prototype._handleReorg = function(reorgHash, allHeaders, callback) {
var self = this;
self._reorging = true;
var reorgHash = self._reorgQueue.shift();
var reorgHeader = allHeaders.get(reorgHash);
assert(reorgHeader, 'We were asked to reorg to a non-existent hash.');
@ -631,19 +631,33 @@ BlockService.prototype._setListeners = function() {
self._header.once('headers', self._onAllHeaders.bind(self));
self._header.on('reorg', function(hash, headers) {
self._header.on('reorg', function(block, headers) {
log.debug('Block Service: detected a reorg from the header service.');
if (self._reorgQueue.indexOf(hash) === -1) {
self._reorgQueue.push(hash);
if (self._reorgQueue.indexOf(block) === -1) {
self._reorgQueue.push(block);
}
var _block;
async.whilst(function() {
return self._reorgQueue.length > 0;
_block = self._reorgQueue.shift();
return _block;
}, function(next) {
self._handleReorg(headers, next);
}, self._startSync.bind(self));
self._handleReorg(_block.rhash(), headers, function(err) {
if (err) {
return next(err);
}
self._onBlock(_block);
next();
});
}, function(err) {
if (err) {
log.error(err);
self.nodes.stop();
}
});
});

View File

@ -606,7 +606,7 @@ HeaderService.prototype._handleReorg = function(block, commonHeader, callback) {
// emit the fact that there is a reorg even though the block
// service may not have reached this point in its sync.
// Let the block service sort that our
self.emit('reorg', hash, headers);
self.emit('reorg', block, headers);
return callback();
});
@ -635,6 +635,7 @@ HeaderService.prototype._onReorg = function(reorgHeader, headers, commonHeader,
// setting our tip to the common ancestor
this._tip.hash = commonHeader.hash;
this._tip.height = commonHeader.height;
this._lastHeader = commonHeader;
this._db.batch(ops, callback);
};

View File

@ -344,7 +344,7 @@ P2P.prototype._onPeerReady = function(peer, addr) {
if (this._currentRequest) {
log.info('Restarting last query');
this.clearInventoryCache();
this.getBlocks(this._currentRequest);
this.getP2PBlock(this._currentRequest);
}
if (bestHeight >= 0) {

98
package-lock.json generated
View File

@ -194,68 +194,77 @@
"integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY="
},
"bcoin": {
"version": "github:bcoin-org/bcoin#57b98b2368c8106a9c215d73e40e1a7ae39042f3",
"version": "github:bitpay/bcoin#46ecd2c4ed3b7fbcadd9cfe10b0f5d64e4c5088d",
"requires": {
"bcoin-native": "0.0.23",
"bn.js": "4.11.8",
"bn.js": "4.11.7",
"elliptic": "6.4.0",
"leveldown": "1.7.2",
"n64": "0.0.18",
"secp256k1": "3.3.0",
"socket.io": "2.0.3",
"socket.io-client": "2.0.3"
"n64": "0.0.12",
"secp256k1": "3.2.5",
"socket.io": "2.0.1",
"socket.io-client": "2.0.1"
},
"dependencies": {
"secp256k1": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.3.0.tgz",
"integrity": "sha512-CbrQoeGG5V0kQ1ohEMGI+J7oKerapLTpivLICBaXR0R4HyQcN3kM9itLsV5fdpV1UR1bD14tOkJ1xughmlDIiQ==",
"optional": true,
"requires": {
"bindings": "1.2.1",
"bip66": "1.1.5",
"bn.js": "4.11.8",
"create-hash": "1.1.3",
"drbg.js": "1.0.1",
"elliptic": "6.4.0",
"nan": "2.6.2",
"prebuild-install": "2.2.0",
"safe-buffer": "5.1.1"
}
"bn.js": {
"version": "4.11.7",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.7.tgz",
"integrity": "sha512-LxFiV5mefv0ley0SzqkOPR1bC4EbpPx8LkOz5vMe/Yi15t5hzwgO/G+tc7wOtL4PZTYjwHu8JnEiSLumuSjSfA=="
},
"ms": {
"version": "0.7.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-0.7.3.tgz",
"integrity": "sha1-cIFVpeROM/X9D8U+gdDUCpG+H/8=",
"optional": true
},
"n64": {
"version": "0.0.12",
"resolved": "https://registry.npmjs.org/n64/-/n64-0.0.12.tgz",
"integrity": "sha512-Apl4Wy7GeLySDv2974ajM80DTTuD/RHk59ORtkR/jsbt9hmPcKJYzUkjFIGOlUMA13nvx7sY2fet+Lb6KYQdWA=="
},
"socket.io": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.0.3.tgz",
"integrity": "sha1-Q1nwaiSTOua9CHeYr3jGgOrjReM=",
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.0.1.tgz",
"integrity": "sha1-BkwSUXhGLkd6bfI9L9rRjdHFkU8=",
"optional": true,
"requires": {
"debug": "2.6.8",
"engine.io": "3.1.0",
"object-assign": "4.1.1",
"socket.io-adapter": "1.1.0",
"socket.io-client": "2.0.3",
"socket.io-client": "2.0.1",
"socket.io-parser": "3.1.2"
}
},
"socket.io-client": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.0.3.tgz",
"integrity": "sha1-bK9K/5+FsZ/ZG2zhPWmttWT4hzs=",
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.0.1.tgz",
"integrity": "sha1-HVL4x0Zgxou2aVlT+hGZcRVfrZM=",
"optional": true,
"requires": {
"backo2": "1.0.2",
"base64-arraybuffer": "0.1.5",
"component-bind": "1.0.0",
"component-emitter": "1.2.1",
"debug": "2.6.8",
"debug": "2.6.4",
"engine.io-client": "3.1.1",
"has-cors": "1.1.0",
"indexof": "0.0.1",
"object-component": "0.0.3",
"parseqs": "0.0.5",
"parseuri": "0.0.5",
"socket.io-parser": "3.1.2",
"to-array": "0.1.4"
},
"dependencies": {
"debug": {
"version": "2.6.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.4.tgz",
"integrity": "sha1-dYaps8OXQcAoKuM0RcTorHRzT+A=",
"optional": true,
"requires": {
"ms": "0.7.3"
}
}
}
}
}
@ -2906,9 +2915,9 @@
}
},
"mocha": {
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.1.tgz",
"integrity": "sha512-2jD6NS4PNKVDpaICERx8vEkXaisx2MlRKxj5KuFJVZJdK1zRGs/HnS3OeH7zXhXAbGlzaMIan4Kwpm4O5hORnA==",
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.3.tgz",
"integrity": "sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg==",
"requires": {
"browser-stdout": "1.3.0",
"commander": "2.9.0",
@ -2979,11 +2988,6 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
"n64": {
"version": "0.0.18",
"resolved": "https://registry.npmjs.org/n64/-/n64-0.0.18.tgz",
"integrity": "sha512-z5gRoCNFTY5fderO8n5tt6p7+jZiivzN1LhuR4EqrTkciYDCpJy8xkwkd1YO5eyfimeLAjXy/6k3FLC+GQ6lLw=="
},
"nan": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz",
@ -4229,6 +4233,14 @@
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
"integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4="
},
"string_decoder": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
"integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
"requires": {
"safe-buffer": "5.1.1"
}
},
"string-length": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/string-length/-/string-length-1.0.1.tgz",
@ -4248,14 +4260,6 @@
"strip-ansi": "3.0.1"
}
},
"string_decoder": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
"integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
"requires": {
"safe-buffer": "5.1.1"
}
},
"stringstream": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",

View File

@ -29,7 +29,7 @@
],
"dependencies": {
"async": "^2.5.0",
"bcoin": "1.0.0-beta.14",
"bcoin": "bitpay/bcoin#v1.0.0-beta.14+cash",
"bitcoind-rpc": "^0.6.0",
"bitcore-lib": "5.0.0-beta.1",
"bitcore-p2p": "5.0.0-beta.1",

View File

@ -20,7 +20,6 @@ describe('Address Service', function() {
sandbox = sinon.sandbox.create();
addressService = new AddressService({
node: {
getNetworkName: function() { return 'regtest'; },
services: []
}
});

View File

@ -19,7 +19,6 @@ describe('Block Service', function() {
sandbox = sinon.sandbox.create();
blockService = new BlockService({
node: {
getNetworkName: function() { return 'regtest'; },
services: []
}
});

View File

@ -22,7 +22,6 @@ describe('Header Service', function() {
sandbox = sinon.sandbox.create();
headerService = new HeaderService({
node: {
getNetworkName: function() { return 'regtest'; },
services: []
}
});

View File

@ -18,7 +18,6 @@ describe('Mempool Service', function() {
sandbox = sinon.sandbox.create();
mempoolService = new MempoolService({
node: {
getNetworkName: function() { return 'regtest'; },
services: []
}
});

View File

@ -18,7 +18,6 @@ describe('Transaction Service', function() {
sandbox = sinon.sandbox.create();
txService = new TxService({
node: {
getNetworkName: function() { return 'regtest'; },
services: []
}
});