block: only cache block summary with height if confirmed >= 6
- update api with changes in bitcore node - add block event
This commit is contained in:
parent
9d78188f64
commit
19c5b617d1
@ -13,6 +13,7 @@ function BlockController(node) {
|
|||||||
this.node = node;
|
this.node = node;
|
||||||
|
|
||||||
this.blockSummaryCache = LRU(1000000);
|
this.blockSummaryCache = LRU(1000000);
|
||||||
|
this.blockSummaryCacheConfirmations = 6;
|
||||||
this.blockCache = LRU(1000);
|
this.blockCache = LRU(1000);
|
||||||
|
|
||||||
this.poolStrings = {};
|
this.poolStrings = {};
|
||||||
@ -125,11 +126,12 @@ BlockController.prototype._getBlockSummary = function(hash, moreTs, next) {
|
|||||||
finish(summaryCache);
|
finish(summaryCache);
|
||||||
} else {
|
} else {
|
||||||
self.node.services.bitcoind.getRawBlock(hash, function(err, blockBuffer) {
|
self.node.services.bitcoind.getRawBlock(hash, function(err, blockBuffer) {
|
||||||
if(err) {
|
if (err) {
|
||||||
return next(err);
|
return next(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
var br = new bitcore.encoding.BufferReader(blockBuffer);
|
var br = new bitcore.encoding.BufferReader(blockBuffer);
|
||||||
|
|
||||||
// take a shortcut to get number of transactions and the blocksize.
|
// take a shortcut to get number of transactions and the blocksize.
|
||||||
// Also reads the coinbase transaction and only that.
|
// Also reads the coinbase transaction and only that.
|
||||||
// Old code parsed all transactions in every block _and_ then encoded
|
// Old code parsed all transactions in every block _and_ then encoded
|
||||||
@ -142,9 +144,13 @@ BlockController.prototype._getBlockSummary = function(hash, moreTs, next) {
|
|||||||
info.transactions = [bitcore.Transaction().fromBufferReader(br)];
|
info.transactions = [bitcore.Transaction().fromBufferReader(br)];
|
||||||
|
|
||||||
self.node.services.bitcoind.getBlockHeader(hash, function(err, blockHeader) {
|
self.node.services.bitcoind.getBlockHeader(hash, function(err, blockHeader) {
|
||||||
|
if (err) {
|
||||||
|
return next(err);
|
||||||
|
}
|
||||||
|
var height = blockHeader.height;
|
||||||
|
|
||||||
var block = {
|
var summary = {
|
||||||
height: blockHeader.height,
|
height: height,
|
||||||
size: blockBuffer.length,
|
size: blockBuffer.length,
|
||||||
hash: hash,
|
hash: hash,
|
||||||
time: header.time,
|
time: header.time,
|
||||||
@ -152,9 +158,12 @@ BlockController.prototype._getBlockSummary = function(hash, moreTs, next) {
|
|||||||
poolInfo: self.getPoolInfo(info)
|
poolInfo: self.getPoolInfo(info)
|
||||||
};
|
};
|
||||||
|
|
||||||
self.blockSummaryCache.set(hash, summary);
|
var confirmations = self.node.services.bitcoind.height - height + 1;
|
||||||
|
if (confirmations >= self.blockSummaryCacheConfirmations) {
|
||||||
|
self.blockSummaryCache.set(hash, summary);
|
||||||
|
}
|
||||||
|
|
||||||
finish(block);
|
finish(summary);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
15
lib/index.js
15
lib/index.js
@ -84,8 +84,8 @@ InsightAPI.prototype.getRoutePrefix = function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
InsightAPI.prototype.start = function(callback) {
|
InsightAPI.prototype.start = function(callback) {
|
||||||
this.node.services.bitcoind.on('tx', this.transactionHandler.bind(this));
|
this.node.services.bitcoind.on('tx', this.transactionEventHandler.bind(this));
|
||||||
|
this.node.services.bitcoind.on('block', this.blockEventHandler.bind(this));
|
||||||
setImmediate(callback);
|
setImmediate(callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -213,18 +213,13 @@ InsightAPI.prototype.getPublishEvents = function() {
|
|||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
InsightAPI.prototype.blockHandler = function(block, add, callback) {
|
InsightAPI.prototype.blockEventHandler = function(hashBuffer) {
|
||||||
// Notify inv subscribers
|
// Notify inv subscribers
|
||||||
for (var i = 0; i < this.subscriptions.inv.length; i++) {
|
for (var i = 0; i < this.subscriptions.inv.length; i++) {
|
||||||
this.subscriptions.inv[i].emit('block', block.hash);
|
this.subscriptions.inv[i].emit('block', hashBuffer.toString('hex'));
|
||||||
}
|
}
|
||||||
|
|
||||||
setImmediate(function() {
|
|
||||||
callback(null, []);
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
InsightAPI.prototype.transactionEventHandler = function(txBuffer) {
|
||||||
InsightAPI.prototype.transactionHandler = function(txBuffer) {
|
|
||||||
var tx = new Transaction().fromBuffer(txBuffer);
|
var tx = new Transaction().fromBuffer(txBuffer);
|
||||||
var result = this.txController.transformInvTransaction(tx);
|
var result = this.txController.transformInvTransaction(tx);
|
||||||
|
|
||||||
|
|||||||
@ -24,7 +24,7 @@ TxController.prototype.show = function(req, res) {
|
|||||||
TxController.prototype.transaction = function(req, res, next, txid) {
|
TxController.prototype.transaction = function(req, res, next, txid) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
this.node.getTransactionWithBlockInfo(txid, true, function(err, transaction) {
|
this.node.getTransactionWithBlockInfo(txid, function(err, transaction) {
|
||||||
if (err && err instanceof self.node.errors.Transaction.NotFound) {
|
if (err && err instanceof self.node.errors.Transaction.NotFound) {
|
||||||
return common.handleErrors(null, res);
|
return common.handleErrors(null, res);
|
||||||
} else if(err) {
|
} else if(err) {
|
||||||
@ -231,7 +231,7 @@ TxController.prototype.transformInvTransaction = function(transaction) {
|
|||||||
TxController.prototype.rawTransaction = function(req, res, next, txid) {
|
TxController.prototype.rawTransaction = function(req, res, next, txid) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
this.node.getTransaction(txid, true, function(err, transaction) {
|
this.node.getTransaction(txid, function(err, transaction) {
|
||||||
if (err && err instanceof self.node.errors.Transaction.NotFound) {
|
if (err && err instanceof self.node.errors.Transaction.NotFound) {
|
||||||
return common.handleErrors(null, res);
|
return common.handleErrors(null, res);
|
||||||
} else if(err) {
|
} else if(err) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user