From cbf59e8e72b6758cfc97abd296209a27270f8022 Mon Sep 17 00:00:00 2001 From: Chris Kleeschulte Date: Wed, 9 Aug 2017 17:53:52 -0400 Subject: [PATCH] Fixed height on block load. --- lib/services/block/index.js | 20 ++- lib/services/insight | 1 + lib/services/insight-api | 1 + lib/services/mempool/index.js | 37 ++++- lib/services/transaction/index.js | 3 - package-lock.json | 239 +----------------------------- 6 files changed, 59 insertions(+), 242 deletions(-) create mode 120000 lib/services/insight create mode 120000 lib/services/insight-api diff --git a/lib/services/block/index.js b/lib/services/block/index.js index 343126b2..bf21afb2 100644 --- a/lib/services/block/index.js +++ b/lib/services/block/index.js @@ -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); diff --git a/lib/services/insight b/lib/services/insight new file mode 120000 index 00000000..ca228bef --- /dev/null +++ b/lib/services/insight @@ -0,0 +1 @@ +/Users/chrisk/source/insight \ No newline at end of file diff --git a/lib/services/insight-api b/lib/services/insight-api new file mode 120000 index 00000000..86f819d4 --- /dev/null +++ b/lib/services/insight-api @@ -0,0 +1 @@ +/Users/chrisk/source/insight-api \ No newline at end of file diff --git a/lib/services/mempool/index.js b/lib/services/mempool/index.js index 6b591f4d..6162fd2a 100644 --- a/lib/services/mempool/index.js +++ b/lib/services/mempool/index.js @@ -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; diff --git a/lib/services/transaction/index.js b/lib/services/transaction/index.js index 8b55f68e..7c96b8fe 100644 --- a/lib/services/transaction/index.js +++ b/lib/services/transaction/index.js @@ -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()); diff --git a/package-lock.json b/package-lock.json index 95cfdbd1..92e178aa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -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 - } - } } } }