Fixed issues with reorg again.
This commit is contained in:
parent
7350fb3bf6
commit
de163ad4c9
@ -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');
|
||||
|
||||
@ -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();
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
@ -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);
|
||||
};
|
||||
|
||||
@ -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
98
package-lock.json
generated
@ -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",
|
||||
|
||||
@ -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",
|
||||
|
||||
@ -20,7 +20,6 @@ describe('Address Service', function() {
|
||||
sandbox = sinon.sandbox.create();
|
||||
addressService = new AddressService({
|
||||
node: {
|
||||
getNetworkName: function() { return 'regtest'; },
|
||||
services: []
|
||||
}
|
||||
});
|
||||
|
||||
@ -19,7 +19,6 @@ describe('Block Service', function() {
|
||||
sandbox = sinon.sandbox.create();
|
||||
blockService = new BlockService({
|
||||
node: {
|
||||
getNetworkName: function() { return 'regtest'; },
|
||||
services: []
|
||||
}
|
||||
});
|
||||
|
||||
@ -22,7 +22,6 @@ describe('Header Service', function() {
|
||||
sandbox = sinon.sandbox.create();
|
||||
headerService = new HeaderService({
|
||||
node: {
|
||||
getNetworkName: function() { return 'regtest'; },
|
||||
services: []
|
||||
}
|
||||
});
|
||||
|
||||
@ -18,7 +18,6 @@ describe('Mempool Service', function() {
|
||||
sandbox = sinon.sandbox.create();
|
||||
mempoolService = new MempoolService({
|
||||
node: {
|
||||
getNetworkName: function() { return 'regtest'; },
|
||||
services: []
|
||||
}
|
||||
});
|
||||
|
||||
@ -18,7 +18,6 @@ describe('Transaction Service', function() {
|
||||
sandbox = sinon.sandbox.create();
|
||||
txService = new TxService({
|
||||
node: {
|
||||
getNetworkName: function() { return 'regtest'; },
|
||||
services: []
|
||||
}
|
||||
});
|
||||
|
||||
Loading…
Reference in New Issue
Block a user