From db064e9527ef268f46bb798424d11f1b112ef9cd Mon Sep 17 00:00:00 2001 From: Mario Colque Date: Tue, 18 Feb 2014 14:35:54 -0300 Subject: [PATCH] added Minig Pool Detection --- app/controllers/blocks.js | 7 +++++-- lib/BlockDb.js | 21 +++++++++++++++++++-- lib/PoolMatch.js | 27 +++++++++------------------ public/views/block.html | 4 ++++ 4 files changed, 37 insertions(+), 22 deletions(-) diff --git a/app/controllers/blocks.js b/app/controllers/blocks.js index 5d828dc..409679f 100644 --- a/app/controllers/blocks.js +++ b/app/controllers/blocks.js @@ -17,8 +17,11 @@ exports.block = function(req, res, next, hash) { if (err || !block) return common.handleErrors(err, res, next); else { - req.block = block.info; - return next(); + bdb.getPoolInfo(block.info.tx[0], function(info) { + block.info.poolInfo = info; + req.block = block.info; + return next(); + }); } }); }; diff --git a/lib/BlockDb.js b/lib/BlockDb.js index 76a118c..3fdb3ff 100644 --- a/lib/BlockDb.js +++ b/lib/BlockDb.js @@ -25,6 +25,9 @@ function spec(b) { var Rpc = b.rpc || require('./Rpc').class(); var PoolMatch = b.poolMatch || require('./PoolMatch').class(config); + var buffertools = require('buffertools'); + var TransactionDb = require('./TransactionDb.js').class(); + var BlockDb = function() { BlockDb.super(this, arguments); this.poolMatch = new PoolMatch(); @@ -57,7 +60,7 @@ function spec(b) { return db.batch() .put(time_key, b.hash) .put(MAIN_PREFIX + b.hash, 1) - .put(PREV_PREFIX + b.hash, b.previousblockhash) + .put(PREV_PREFIX + b.hash, b.previousblockhash) .write(function(err){ if (!err) { self.emit('new_block', {blockid: b.hash}); @@ -164,6 +167,21 @@ function spec(b) { }); }; + BlockDb.prototype.getPoolInfo = function(tx, cb) { + var tr = new TransactionDb(); + var self = this; + + tr._getInfo(tx, function(e, a) { + if (e) return cb(false); + + if (a.isCoinBase) { + var coinbaseHexBuffer = new Buffer(a.vin[0].coinbase, 'hex'); + var a = self.poolMatch.match(coinbaseHexBuffer); + + return cb(a); + } + }); + }; BlockDb.prototype.fromHashWithInfo = function(hash, cb) { var self = this; @@ -175,7 +193,6 @@ function spec(b) { if (err) return cb(err); info.isMainChain = val ? true : false; -// info.poolInfo = self.poolMatch.match(info.hex); return cb(null, { hash: hash, diff --git a/lib/PoolMatch.js b/lib/PoolMatch.js index 8c8db66..83aa70a 100644 --- a/lib/PoolMatch.js +++ b/lib/PoolMatch.js @@ -11,36 +11,27 @@ function spec(b) { var PoolMatch = function() { var self = this; - self.strings={}; + self.strings = {}; db.forEach(function(pool) { pool.searchStrings.forEach(function(s) { - if (!self.strings[s]) self.strings[s] = []; - self.strings[s].push(pool); + self.strings[s] = { + poolName: pool.poolName, + url: pool.url + }; }); }); - Object.keys( self.strings, function(s) { - delete self.strings[s].searchStrings; - }); - self.stringsK = Object.keys(self.strings); - self.stringsKl = self.stringsK.length; }; PoolMatch.prototype.match = function(buffer) { var self = this; - - var match; - var i =0; - while (!match && i < self.stringsKl) { - var k = self.stringsK[i++]; - if ( buffertools.indexOf(buffer,self.strings[k]) >= 0 ) { - match = self.strings[k]; + for(var k in self.strings) { + if (buffertools.indexOf(buffer, k) >= 0) { + return self.strings[k]; } - } - return match; + }; }; return PoolMatch; } module.defineClass(spec); - diff --git a/public/views/block.html b/public/views/block.html index e983dbd..e68ea07 100644 --- a/public/views/block.html +++ b/public/views/block.html @@ -53,6 +53,10 @@ Timestamp {{block.time * 1000 | date:'medium'}} + + Relayed by + {{block.poolInfo.poolName}} + Merkle Root