From db064e9527ef268f46bb798424d11f1b112ef9cd Mon Sep 17 00:00:00 2001 From: Mario Colque Date: Tue, 18 Feb 2014 14:35:54 -0300 Subject: [PATCH 1/2] 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 5d828dc5..409679f2 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 76a118c1..3fdb3ff6 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 8c8db665..83aa70aa 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 e983dbd1..e68ea072 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 From 36f3d6684a4ac2f11f8787c5dc766b1f12e46e81 Mon Sep 17 00:00:00 2001 From: Mario Colque Date: Tue, 18 Feb 2014 15:44:02 -0300 Subject: [PATCH 2/2] #340 added mining pool detection on homepage and block list page --- app/controllers/blocks.js | 8 +++++++- public/views/block.html | 4 +++- public/views/block_list.html | 2 ++ public/views/index.html | 2 ++ 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/app/controllers/blocks.js b/app/controllers/blocks.js index 409679f2..def4e359 100644 --- a/app/controllers/blocks.js +++ b/app/controllers/blocks.js @@ -66,7 +66,12 @@ var getBlock = function(blockhash, cb) { isOrphan: 1, }; } - return cb(err, block.info); + + bdb.getPoolInfo(block.info.tx[0], function(info) { + block.info.poolInfo = info; + return cb(err, block.info); + }); + }); }; @@ -130,6 +135,7 @@ exports.list = function(req, res) { hash: b.hash, time: b.ts || info.time, txlength: info.tx.length, + poolInfo: info.poolInfo }); }); }, function(err, allblocks) { diff --git a/public/views/block.html b/public/views/block.html index e68ea072..41f012e2 100644 --- a/public/views/block.html +++ b/public/views/block.html @@ -55,7 +55,9 @@ Relayed by - {{block.poolInfo.poolName}} + + {{block.poolInfo.poolName}} + Merkle Root diff --git a/public/views/block_list.html b/public/views/block_list.html index 99d9ffd4..ea6d8419 100644 --- a/public/views/block_list.html +++ b/public/views/block_list.html @@ -35,6 +35,7 @@ Height Timestamp Transactions + Relayed by Size @@ -46,6 +47,7 @@ {{b.height}} {{b.time * 1000 | date:'medium'}} {{b.txlength}} + {{b.poolInfo.poolName}} {{b.size}} diff --git a/public/views/index.html b/public/views/index.html index 585e5fd7..96dbeaee 100644 --- a/public/views/index.html +++ b/public/views/index.html @@ -13,6 +13,7 @@ Height Age Transactions + Relayed by Size @@ -24,6 +25,7 @@ {{humanSince(b.time)}} {{b.txlength}} + {{b.poolInfo.poolName}} {{b.size}} bytes