From c61490ed623eff690214f38f5b78637e3877a316 Mon Sep 17 00:00:00 2001 From: Chris Kleeschulte Date: Wed, 9 Aug 2017 18:11:03 -0400 Subject: [PATCH] WIP changes for next version --- lib/blocks.js | 33 ++++++++++++++++++++++----------- lib/index.js | 24 ++++++++++++++++++++---- package.json | 2 +- 3 files changed, 43 insertions(+), 16 deletions(-) diff --git a/lib/blocks.js b/lib/blocks.js index 4d286a5..356ef63 100644 --- a/lib/blocks.js +++ b/lib/blocks.js @@ -27,6 +27,9 @@ function BlockController(options) { }); this.common = new Common({log: this.node.log}); + this._block = this.node.services.block; + this._header = this.node.services.header; + this._timestamp = this.node.services.timestamp; } var BLOCK_LIMIT = 200; @@ -59,24 +62,31 @@ BlockController.prototype.block = function(req, res, next) { var blockCached = self.blockCache.get(hash); if (blockCached) { - blockCached.confirmations = self.node.services.bitcoind.height - blockCached.height + 1; + var height = self._block.getTip().height; + blockCached.confirmations = height - blockCached.height + 1; req.block = blockCached; next(); } else { - self.node.getBlock(hash, function(err, block) { - if((err && err.code === -5) || (err && err.code === -8)) { - return self.common.handleErrors(null, res); - } else if(err) { + self._block.getBlock(hash, function(err, block) { + if (err) { return self.common.handleErrors(err, res); } - self.node.services.bitcoind.getBlockHeader(hash, function(err, info) { + + if (!block) { + return self.common.handleErrors(null, res); + } + + self._header.getBlockHeader(hash, function(err, info) { +console.log(info); if (err) { return self.common.handleErrors(err, res); } + var blockResult = self.transformBlock(block, info); if (blockResult.confirmations >= self.blockCacheConfirmations) { self.blockCache.set(hash, blockResult); } + req.block = blockResult; next(); }); @@ -158,7 +168,7 @@ BlockController.prototype.showRaw = function(req, res) { BlockController.prototype.blockIndex = function(req, res) { var self = this; var height = req.params.height; - this.node.services.bitcoind.getBlockHeader(parseInt(height), function(err, info) { + self._header.getBlockHeader(parseInt(height), function(err, info) { if (err) { return self.common.handleErrors(err, res); } @@ -183,7 +193,7 @@ BlockController.prototype._getBlockSummary = function(hash, moreTimestamp, next) if (summaryCache) { finish(summaryCache); } else { - self.node.services.bitcoind.getRawBlock(hash, function(err, blockBuffer) { + self._block.getRawBlock(hash, function(err, blockBuffer) { if (err) { return next(err); } @@ -201,7 +211,7 @@ BlockController.prototype._getBlockSummary = function(hash, moreTimestamp, next) var txlength = br.readVarintNum(); info.transactions = [bitcore.Transaction().fromBufferReader(br)]; - self.node.services.bitcoind.getBlockHeader(hash, function(err, blockHeader) { + self._header.getBlockHeader(hash, function(err, blockHeader) { if (err) { return next(err); } @@ -216,7 +226,8 @@ BlockController.prototype._getBlockSummary = function(hash, moreTimestamp, next) poolInfo: self.getPoolInfo(info) }; - var confirmations = self.node.services.bitcoind.height - height + 1; + var _height = self._block.getTip().height; + var confirmations = _height - height + 1; if (confirmations >= self.blockCacheConfirmations) { self.blockSummaryCache.set(hash, summary); } @@ -259,7 +270,7 @@ BlockController.prototype.list = function(req, res) { var more = false; var moreTimestamp = lte; - self.node.services.bitcoind.getBlockHashesByTimestamp(lte, gte, function(err, hashes) { + self._timestamp.getBlockHashesByTimestamp(lte, gte, function(err, hashes) { if(err) { return self.common.handleErrors(err, res); } diff --git a/lib/index.js b/lib/index.js index 422615f..465d2f8 100644 --- a/lib/index.js +++ b/lib/index.js @@ -61,7 +61,7 @@ var InsightAPI = function(options) { this.txController = new TxController(this.node); }; -InsightAPI.dependencies = ['bitcoind', 'web']; +InsightAPI.dependencies = ['header', 'block', 'transaction', 'address', 'web', 'mempool', 'timestamp', 'fee']; inherits(InsightAPI, BaseService); @@ -90,9 +90,25 @@ InsightAPI.prototype.getRoutePrefix = function() { }; InsightAPI.prototype.start = function(callback) { - this.node.services.bitcoind.on('tx', this.transactionEventHandler.bind(this)); - this.node.services.bitcoind.on('block', this.blockEventHandler.bind(this)); - setImmediate(callback); + + if (this._subscribed) { + return; + } + + this._subscribed = true; + + if (!this._bus) { + this._bus = this.node.openBus({remoteAddress: 'localhost-insight-api'}); + } + + this._bus.on('block/block', this.transactionEventHandler.bind(this)); + this._bus.subscribe('block/block'); + + this._bus.on('mempool/transaction', this.blockEventHandler.bind(this)); + this._bus.subscribe('mempool/transaction'); + + callback(); + }; InsightAPI.prototype.createLogInfoStream = function() { diff --git a/package.json b/package.json index b95909a..66a879c 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ "bitcoreNode": "lib", "dependencies": { "async": "*", - "bitcore-lib": "^0.13.7", + "bitcore-lib": "bitpay/bitcore-lib#transitional", "bitcore-message": "^1.0.1", "body-parser": "^1.13.3", "compression": "^1.6.1",