Fixed height on block load.

This commit is contained in:
Chris Kleeschulte 2017-08-09 17:53:52 -04:00
parent 9875d81df1
commit cbf59e8e72
6 changed files with 59 additions and 242 deletions

View File

@ -9,6 +9,7 @@ var log = index.log;
var utils = require('../../utils');
var assert = require('assert');
var constants = require('../../constants');
var bcoin = require('bcoin');
var BlockService = function(options) {
@ -49,6 +50,10 @@ BlockService.prototype.getBestBlockHash = function(callback) {
callback(this._header.getAllHeaders().getLastIndex().hash);
};
BlockService.prototype.getTip = function() {
return this._tip;
};
BlockService.prototype.getBlock = function(arg, callback) {
var hash = this._getHash(arg);
@ -143,6 +148,7 @@ BlockService.prototype.start = function(callback) {
return callback(err);
}
assert(tip.height >= 0, 'tip is not initialized');
self._setTip(tip);
self._setListeners();
self._startSubscriptions();
@ -193,7 +199,7 @@ BlockService.prototype._broadcast = function(subscribers, name, entity) {
};
BlockService.prototype._detectReorg = function(block) {
var prevHash = block.toHeaders().toJSON().prevBlock;
var prevHash = bcoin.util.revHex(block.prevBlock);
if (this._tip.hash !== prevHash) {
return true;
}
@ -227,7 +233,7 @@ BlockService.prototype._findCommonAncestor = function(hash, allHeaders, callback
}
var block = self._encoding.decodeBlockValue(data);
_oldTip = block.toHeaders().toJSON().prevBlock;
_oldTip = bcoin.util.revHex(block.prevBlock);
var header = allHeaders.get(_newTip);
if (!header) {
@ -286,12 +292,15 @@ BlockService.prototype._getHash = function(blockArg) {
return headers.getIndex(blockArg).hash;
}
return blockArg;
};
BlockService.prototype._handleReorg = function(hash, allHeaders) {
BlockService.prototype._handleReorg = function(block, allHeaders) {
this._reorging = true; // while this is set, we won't be sending blocks
var hash = block.rhash();
log.warn('Block Service: Chain reorganization detected! Our current block tip is: ' +
this._tip.hash + ' the current block: ' + hash + '.');
@ -345,7 +354,7 @@ BlockService.prototype._getOldBlocks = function(hash, callback) {
return;
}
blocks.push(block);
_tip = block.toHeaders().toJSON().prevHash;
_tip = bcoin.util.revHex(block.prevBlock);
});
},
function(err) {
@ -394,6 +403,7 @@ BlockService.prototype._processBlock = function() {
var operations = [];
var services = self.node.services;
var block = self._unprocessedBlocks.shift();
var headers = self._header.getAllHeaders();
async.eachSeries(
services,
@ -429,7 +439,7 @@ BlockService.prototype._processBlock = function() {
return;
}
self._tip.height++;
self._tip.height = headers.get(block.rhash()).height;
self._tip.hash = block.rhash();
var tipOps = utils.encodeTip(self._tip, self.name);

1
lib/services/insight Symbolic link
View File

@ -0,0 +1 @@
/Users/chrisk/source/insight

1
lib/services/insight-api Symbolic link
View File

@ -0,0 +1 @@
/Users/chrisk/source/insight-api

View File

@ -3,11 +3,13 @@ var BaseService = require('../../service');
var util = require('util');
var utils = require('../../utils');
var Encoding = require('./encoding');
// var index = require('../../index');
// var log = index.log;
var index = require('../../');
var log = index.log;
var MempoolService = function(options) {
BaseService.call(this, options);
this._subscriptions = {};
this._subscriptions.transaction = [];
this._db = this.node.services.db;
};
@ -22,6 +24,37 @@ MempoolService.prototype.getAPIMethods = function() {
return methods;
};
MempoolService.prototype.getPublishEvents = function() {
return [
{
name: 'mempool/transaction',
scope: this,
subscribe: this.subscribe.bind(this, 'transaction'),
unsubscribe: this.unsubscribe.bind(this, 'transaction')
}
];
};
MempoolService.prototype.subscribe = function(name, emitter) {
this._subscriptions[name].push(emitter);
log.info(emitter.remoteAddress, 'subscribe:', 'mempool/' + name, 'total:', this._subscriptions[name].length);
};
MempoolService.prototype.unsubscribe = function(name, emitter) {
var index = this._subscriptions[name].indexOf(emitter);
if (index > -1) {
this._subscriptions[name].splice(index, 1);
}
log.info(emitter.remoteAddress, 'unsubscribe:', 'mempool/' + name, 'total:', this._subscriptions[name].length);
};
MempoolService.prototype.start = function(callback) {
var self = this;

View File

@ -263,9 +263,6 @@ TransactionService.prototype._processTransaction = function(tx, opts) {
// input values
tx.__inputValues = this._getInputValues(tx); //if there are any nulls here, this is a cache miss
if (_.compact(tx.__inputValues).length < tx.inputs.length) {
log.debug('Transaction Service: Cache miss for tx id: ' + tx.txid());
}
//timestamp
tx.__timestamp = this._getBlockTimestamp(opts.block.rhash());

239
package-lock.json generated
View File

@ -60,11 +60,6 @@
"integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
"dev": true
},
"append-field": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/append-field/-/append-field-0.1.0.tgz",
"integrity": "sha1-bdxY+gg8e8VF08WZWygwzCNm1Eo="
},
"aproba": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.2.tgz",
@ -300,12 +295,6 @@
"integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=",
"dev": true
},
"benchmark": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/benchmark/-/benchmark-1.0.0.tgz",
"integrity": "sha1-Lx4vpMNZ8REiqhgwgiGOlX45DHM=",
"dev": true
},
"better-assert": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
@ -334,9 +323,7 @@
"integrity": "sha1-sRMsBNzc5tNT1SDI8C3a+PmB+zQ="
},
"bitcore-lib": {
"version": "0.14.0",
"resolved": "https://registry.npmjs.org/bitcore-lib/-/bitcore-lib-0.14.0.tgz",
"integrity": "sha1-IcsjWf57mXo7e3c+t9cnWuN9ZE4=",
"version": "github:bitpay/bitcore-lib#e622ab2186512a670e3bcaaeeda9d146ca911eed",
"requires": {
"bn.js": "2.0.4",
"bs58": "2.0.0",
@ -403,7 +390,7 @@
"version": "github:bitpay/bitcore-p2p#5de3ca9eabc1ad7dbeeb882e5b3f85c5f6a4ed9d",
"requires": {
"bcoin": "github:bcoin-org/bcoin#886008a1822ce1da7fa8395ee7db4bcc1750a28a",
"bitcore-lib": "0.14.0",
"bitcore-lib": "github:bitpay/bitcore-lib#e622ab2186512a670e3bcaaeeda9d146ca911eed",
"bloom-filter": "0.2.0",
"buffers": "github:bitpay/node-buffers#04f4c4264e0d105db2b99b786843ed64f23230d8",
"socks5-client": "0.3.6"
@ -521,48 +508,6 @@
"integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
"optional": true
},
"bufferutil": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-1.2.1.tgz",
"integrity": "sha1-N75dNuHgZJIiHmjUdLGsWOUQy9c=",
"optional": true,
"requires": {
"bindings": "1.2.1",
"nan": "2.6.2"
}
},
"busboy": {
"version": "0.2.14",
"resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz",
"integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=",
"requires": {
"dicer": "0.2.5",
"readable-stream": "1.1.14"
},
"dependencies": {
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
},
"readable-stream": {
"version": "1.1.14",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
"integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
"requires": {
"core-util-is": "1.0.2",
"inherits": "2.0.3",
"isarray": "0.0.1",
"string_decoder": "0.10.31"
}
},
"string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
}
}
},
"bytes": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz",
@ -725,16 +670,6 @@
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
},
"concat-stream": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz",
"integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=",
"requires": {
"inherits": "2.0.3",
"readable-stream": "2.3.3",
"typedarray": "0.0.6"
}
},
"console-browserify": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
@ -939,38 +874,6 @@
"fs-exists-sync": "0.1.0"
}
},
"dicer": {
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz",
"integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=",
"requires": {
"readable-stream": "1.1.14",
"streamsearch": "0.1.2"
},
"dependencies": {
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
},
"readable-stream": {
"version": "1.1.14",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
"integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
"requires": {
"core-util-is": "1.0.2",
"inherits": "2.0.3",
"isarray": "0.0.1",
"string_decoder": "0.10.31"
}
},
"string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
}
}
},
"diff": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz",
@ -1457,11 +1360,6 @@
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
},
"functional-red-black-tree": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
"integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc="
},
"gauge": {
"version": "2.7.4",
"resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
@ -1788,11 +1686,6 @@
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz",
"integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es="
},
"immediate": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz",
"integrity": "sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw="
},
"indexof": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
@ -2191,6 +2084,11 @@
"integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=",
"dev": true
},
"level-codec": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/level-codec/-/level-codec-7.0.0.tgz",
"integrity": "sha1-x1W2jQ1E/6Cxy6BEuPgaVaFK05s="
},
"level-errors": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.0.4.tgz",
@ -2259,11 +2157,6 @@
"xtend": "4.0.1"
},
"dependencies": {
"level-codec": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/level-codec/-/level-codec-7.0.0.tgz",
"integrity": "sha1-x1W2jQ1E/6Cxy6BEuPgaVaFK05s="
},
"prr": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
@ -2417,11 +2310,6 @@
"yallist": "2.1.2"
}
},
"ltgt": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.1.3.tgz",
"integrity": "sha1-EIUaBtmWS5cReEQcI8nlJpjuzjQ="
},
"map-cache": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
@ -2432,28 +2320,6 @@
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
"integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
},
"memdown": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/memdown/-/memdown-1.2.4.tgz",
"integrity": "sha1-zZo0qvB01TRFonEQjrS43U7A8n8=",
"requires": {
"abstract-leveldown": "2.4.1",
"functional-red-black-tree": "1.0.1",
"immediate": "3.2.3",
"inherits": "2.0.3",
"ltgt": "2.1.3"
},
"dependencies": {
"abstract-leveldown": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.4.1.tgz",
"integrity": "sha1-s7/tuITraToSd18MVenwpCDM7mQ=",
"requires": {
"xtend": "4.0.1"
}
}
}
},
"merge-descriptors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
@ -2626,41 +2492,6 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
"multer": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/multer/-/multer-1.3.0.tgz",
"integrity": "sha1-CSsmcPaEb6SRSWXvyM+Uwg/sbNI=",
"requires": {
"append-field": "0.1.0",
"busboy": "0.2.14",
"concat-stream": "1.6.0",
"mkdirp": "0.5.1",
"object-assign": "3.0.0",
"on-finished": "2.3.0",
"type-is": "1.6.15",
"xtend": "4.0.1"
},
"dependencies": {
"minimist": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
},
"mkdirp": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
"requires": {
"minimist": "0.0.8"
}
},
"object-assign": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
"integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I="
}
}
},
"nan": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz",
@ -3289,11 +3120,6 @@
"prebuild-install": "2.2.0"
}
},
"semver": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
"integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8="
},
"send": {
"version": "0.15.3",
"resolved": "https://registry.npmjs.org/send/-/send-0.15.3.tgz",
@ -3737,11 +3563,6 @@
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
"integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4="
},
"streamsearch": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz",
"integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo="
},
"string_decoder": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
@ -3851,11 +3672,6 @@
"punycode": "1.4.1"
}
},
"ttyread": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/ttyread/-/ttyread-1.0.2.tgz",
"integrity": "sha1-USW2ZoTW8a79u5m1HthK8xfpkuU="
},
"tunnel-agent": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
@ -3895,11 +3711,6 @@
"mime-types": "2.1.15"
}
},
"typedarray": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
"integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
},
"uglify-js": {
"version": "2.8.29",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
@ -3948,24 +3759,6 @@
"resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz",
"integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4="
},
"utf-8-validate": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-1.2.2.tgz",
"integrity": "sha1-i7hxpHQeCFxwSHynrNvX1tNgKes=",
"optional": true,
"requires": {
"bindings": "1.2.1",
"nan": "2.4.0"
},
"dependencies": {
"nan": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.4.0.tgz",
"integrity": "sha1-+zxZ1F/k7/4hXwuJD4rfbrMtIjI=",
"optional": true
}
}
},
"util": {
"version": "0.10.3",
"resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
@ -4132,24 +3925,6 @@
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
"integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk="
},
"zmq": {
"version": "2.15.3",
"resolved": "https://registry.npmjs.org/zmq/-/zmq-2.15.3.tgz",
"integrity": "sha1-Zsbegsw2sJc0uCBwN3ZJCm+75iQ=",
"dev": true,
"requires": {
"bindings": "1.2.1",
"nan": "2.3.5"
},
"dependencies": {
"nan": {
"version": "2.3.5",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.3.5.tgz",
"integrity": "sha1-gioNwmYpDOTNOhIoLKPn42Rmigg=",
"dev": true
}
}
}
}
}