From 917b9c6c8f9caeead21da927d18298a739648811 Mon Sep 17 00:00:00 2001 From: typhoonsimon <38272969+typhoonsimon@users.noreply.github.com> Date: Sat, 14 Mar 2020 16:13:53 +0800 Subject: [PATCH 1/8] Gigantic performance improvemet ... over large chains. Added indexes and brought back last_txs setting (set to 0 will display the whole chain in the index, but without sacrificing server or mongo performance). --- lib/database.js | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/lib/database.js b/lib/database.js index f2f8afdbf..298278d53 100644 --- a/lib/database.js +++ b/lib/database.js @@ -435,28 +435,33 @@ module.exports = { }, get_last_txs_ajax: function(start, length, min, cb) { - Tx.countDocuments({'total': {$gte: min}}, function(err, count){ - Tx.find({'total': {$gte: min}}).sort({blockindex: 'desc'}).skip(Number(start)).limit(Number(length)).exec(function(err, txs){ - if (err) { - return cb(err); - } else { - return cb(txs, count); - } - }); + lib.get_blockcount(function(blockcount) { + var blockFrom = blockcount - Number(start); + if (settings.index.last_txs != 0) { + blockcount = settings.index.last_txs; + } + var q = {$and: [{total: {$gt: Number(min)}}, {blockindex: {$lte: blockFrom}}]}; + Tx.find(q).sort({blockindex: -1}).limit(Number(length)).exec(function(err, txs) { + if (err) { + return cb(err); + } else { + return cb(txs, blockcount); + } + }); }); }, get_address_txs_ajax: function(hash, start, length, cb) { var totalCount = 0; - AddressTx.find({a_id: hash}).countDocuments({}, function(err, count){ + AddressTx.find({a_id: hash}).count(function(err, count){ if(err) { return cb(err); } else { totalCount = count; AddressTx.aggregate([ - { $match: { a_id: hash } }, + { $match: { a_id: hash } }, { $sort: {blockindex: -1} }, - { $skip: Number(start) }, + { $skip: Number(start) }, { $group: { _id: '', @@ -474,7 +479,7 @@ module.exports = { if (err) { return cb(err); } else { - AddressTx.find({a_id: hash}).sort({blockindex: 'desc'}).skip(Number(start)).limit(Number(length)).exec(function (err, address_tx) { + AddressTx.find({a_id: hash}).sort({blockindex: -1}).skip(Number(start)).limit(Number(length)).exec(function (err, address_tx) { if (err) { return cb(err); } else { From 8f9945b92418af574686285cf0d3ed2ffa95e392 Mon Sep 17 00:00:00 2001 From: typhoonsimon <38272969+typhoonsimon@users.noreply.github.com> Date: Sat, 14 Mar 2020 16:15:32 +0800 Subject: [PATCH 2/8] Rewritten peers sync way --- scripts/peers.js | 51 +++++++++++++++++++++++++----------------------- 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/scripts/peers.js b/scripts/peers.js index 17909f00e..9902bbfd7 100644 --- a/scripts/peers.js +++ b/scripts/peers.js @@ -23,37 +23,40 @@ mongoose.connect(dbString, function(err) { console.log('Aborting'); exit(); } else { - request({uri: 'http://127.0.0.1:' + settings.port + '/api/getpeerinfo', json: true}, function (error, response, body) { + var peers = Array(); + var cnt = 0; + request({uri: 'http://127.0.0.1:3002/api/getpeerinfo', json: true}, function (error, response, body) { lib.syncLoop(body.length, function (loop) { var i = loop.iteration(); var address = body[i].addr.split(':')[0]; var port = body[i].addr.split(':')[1]; - db.find_peer(address, function(peer) { - if (peer) { - if (isNaN(peer['port']) || peer['port'].length < 2 || peer['country'].length < 1) { - db.drop_peers(function() { - console.log('Saved peers missing ports or country, dropping peers. Re-reun this script afterwards.'); - exit(); - }); - } - // peer already exists - loop.next(); - } else { - request({uri: 'https://freegeoip.app/json/' + address, json: true}, function (error, response, geo) { - db.create_peer({ - address: address, - port: port, - protocol: body[i].version, - version: body[i].subver.replace('/', '').replace('/', ''), - country: geo.country_name - }, function(){ - loop.next(); - }); - }); + request({uri: 'https://freegeoip.app/json/' + address, json: true}, function (error, response, geo) { + if (address.startsWith('10.') || address.startsWith('192.168') || address.startsWith('172.16')) { + geo.country_name = '[private address]'; } + peers[cnt++] = { + address: address, + port: port, + protocol: body[i].version, + version: body[i].subver.replace('/', '').replace('/', ''), + country: geo.country_name + }; + loop.next(); }); }, function() { - exit(); + + // insert all at once after creation + db.drop_peers(function() { + console.log('Dropped, rebuilding...'); + lib.syncLoop(cnt, function (loop) { + var i = loop.iteration(); + db.create_peer(peers[i], function() { + loop.next(); + }); + }, function() { + exit(); + }); + }); }); }); } From 0a10086aaac70b9ca0b4389b2f249dd53e08dbf2 Mon Sep 17 00:00:00 2001 From: typhoonsimon <38272969+typhoonsimon@users.noreply.github.com> Date: Sat, 14 Mar 2020 16:16:32 +0800 Subject: [PATCH 3/8] Hybrid display fix From 45c5f5370b8f6db947ab9f35a357b13f6bca12ab Mon Sep 17 00:00:00 2001 From: typhoonsimon <38272969+typhoonsimon@users.noreply.github.com> Date: Sat, 14 Mar 2020 16:17:27 +0800 Subject: [PATCH 4/8] Hybrid display fix From ca2034382e457849c6ad70556ca9d71d610a2668 Mon Sep 17 00:00:00 2001 From: typhoonsimon <38272969+typhoonsimon@users.noreply.github.com> Date: Sat, 14 Mar 2020 16:19:01 +0800 Subject: [PATCH 5/8] Hybrid display fix --- views/layout.pug | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/layout.pug b/views/layout.pug index 88fa53535..51b002b2a 100644 --- a/views/layout.pug +++ b/views/layout.pug @@ -27,7 +27,7 @@ html function update_stats(){ $.ajax({url: '/ext/summary', success: function(json){ $("#supply").text(parseInt(parseFloat(json.data[0].supply).toFixed(0)).toLocaleString('en')); - $("#difficulty").text(parseFloat(json.data[0].difficulty).toFixed(2)); + $("#difficulty").text(json.data[0].difficulty); $("#difficultyHybrid").text(json.data[0].difficultyHybrid); $("#hashrate").text(parseFloat(json.data[0].hashrate).toLocaleString('en')); $("#lastPrice").text(parseFloat(json.data[0].lastPrice).toFixed(8) + ' #{settings.markets.exchange}'.toUpperCase()); From 5a28894f93641e6ff8ab2b6d466f8a681374123f Mon Sep 17 00:00:00 2001 From: typhoonsimon <38272969+typhoonsimon@users.noreply.github.com> Date: Sat, 14 Mar 2020 16:23:38 +0800 Subject: [PATCH 6/8] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 1720cf756..fd92aa015 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ An open source block explorer written in node.js. * [Sugarchain Explorer](https://1explorer.sugarchain.org/) * [Florincoin](https://florincoin.info/info) * [Maxcoin Explorer 1](https://explorer.maxcoinproject.net/) +* [Litecoin Plus Explorer 1](https://explorer.litecoinplus.co/) *Note: If you would like your instance mentioned here contact me* From 263140e4eeeaf99caab2b3c8464583c27e44d0e1 Mon Sep 17 00:00:00 2001 From: typhoonsimon <38272969+typhoonsimon@users.noreply.github.com> Date: Sat, 14 Mar 2020 16:25:24 +0800 Subject: [PATCH 7/8] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fd92aa015..b20e39a2f 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ An open source block explorer written in node.js. * [Sugarchain Explorer](https://1explorer.sugarchain.org/) * [Florincoin](https://florincoin.info/info) * [Maxcoin Explorer 1](https://explorer.maxcoinproject.net/) -* [Litecoin Plus Explorer 1](https://explorer.litecoinplus.co/) +* [Litecoin Plus Explorer 1](http://explorer.litecoinplus.co/) *Note: If you would like your instance mentioned here contact me* From 4f7f61b9979ff72a019e9e261ece2c1585e613ec Mon Sep 17 00:00:00 2001 From: typhoonsimon <38272969+typhoonsimon@users.noreply.github.com> Date: Sat, 14 Mar 2020 18:07:39 +0800 Subject: [PATCH 8/8] Add files via upload --- scripts/peers.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/peers.js b/scripts/peers.js index 9902bbfd7..c4bbddfec 100644 --- a/scripts/peers.js +++ b/scripts/peers.js @@ -25,7 +25,7 @@ mongoose.connect(dbString, function(err) { } else { var peers = Array(); var cnt = 0; - request({uri: 'http://127.0.0.1:3002/api/getpeerinfo', json: true}, function (error, response, body) { + request({uri: 'http://127.0.0.1:' + settings.port + '/api/getpeerinfo', json: true}, function (error, response, body) { lib.syncLoop(body.length, function (loop) { var i = loop.iteration(); var address = body[i].addr.split(':')[0];