diff --git a/app.js b/app.js
index e353d35..98c82fd 100644
--- a/app.js
+++ b/app.js
@@ -184,7 +184,7 @@ app.use('/ext/getbasicstats', function(req,res){
app.use('/ext/getaddresstxsajax', function(req,res){
req.query.length = parseInt(req.query.length);
- if(isNaN(req.query.length) || req.query.length > settings.index.last_txs){
+ if(isNaN(req.query.length) || req.query.length > settings.txcount){
req.query.length = settings.txcount;
}
db.get_address_txs_ajax(req.query.address, req.query.start, req.query.length,function(txs, count){
@@ -196,13 +196,13 @@ app.use('/ext/getaddresstxsajax', function(req,res){
txs[i].vout.forEach(function (r) {
if (r.addresses == req.query.address) {
- out = r.amount;
+ out += r.amount;
}
});
txs[i].vin.forEach(function (s) {
if (s.addresses == req.query.address) {
- vin = s.amount
+ vin += s.amount
}
});
@@ -247,6 +247,7 @@ app.set('website', settings.website);
app.set('genesis_block', settings.genesis_block);
app.set('index', settings.index);
app.set('heavy', settings.heavy);
+app.set('lock_during_index', settings.lock_during_index);
app.set('txcount', settings.txcount);
app.set('nethash', settings.nethash);
app.set('nethash_units', settings.nethash_units);
@@ -304,4 +305,4 @@ app.use(function(err, req, res, next) {
});
});
-module.exports = app;
+module.exports = app;
\ No newline at end of file
diff --git a/lib/database.js b/lib/database.js
index 9fa3be3..2fc0a83 100644
--- a/lib/database.js
+++ b/lib/database.js
@@ -9,6 +9,7 @@ var mongoose = require('mongoose')
, Heavy = require('../models/heavy')
, lib = require('./explorer')
, settings = require('./settings')
+ , fs = require('fs')
, poloniex = require('./markets/poloniex')
, bittrex = require('./markets/bittrex')
, bleutrade = require('./markets/bleutrade')
@@ -39,6 +40,16 @@ function find_address(hash, caseSensitive, cb) {
}
}
+function find_address_tx(address, hash, cb) {
+ AddressTx.findOne({a_id: address, txid: hash}, function(err, address_tx) {
+ if(address_tx) {
+ return cb(address_tx);
+ } else {
+ return cb();
+ }
+ });
+}
+
function find_richlist(coin, cb) {
Richlist.findOne({coin: coin}, function(err, richlist) {
if(richlist) {
@@ -62,41 +73,38 @@ function update_address(hash, txid, amount, type, cb) {
return cb();
});
} else {
- //Considering no duplicate
- var tx_array = [];
- var received = address.received;
- var sent = address.sent;
- if (type == 'vin') {
- sent = sent + amount;
- } else {
- received = received + amount;
+ var received = address.received;
+ var sent = address.sent;
+ if (type == 'vin') {
+ sent = sent + amount;
+ } else {
+ received = received + amount;
+ }
+ Address.updateOne({a_id:hash}, {
+ received: received,
+ sent: sent,
+ balance: received - sent
+ }, function() {
+ // ensure tx doesnt already exist in address.txs
+ find_address_tx(hash, txid, function(address_tx) {
+ if (typeof address_tx == "undefined") {
+ var newAddressTx = new AddressTx({
+ a_id: hash,
+ txid: txid
+ });
+ newAddressTx.save(function(err) {
+ if (err) {
+ return cb(err);
+ } else {
+ return cb();
+ }
+ });
+ } else {
+ return cb(); //duplicate
+ }
+ });
+ });
}
-
- tx_array.push({addresses: txid, type: type});
-
- Address.updateOne({a_id:hash}, {
- received: received,
- sent: sent,
- balance: received - sent
- }, function() {
-
- var newAddressTx = new AddressTx({
- a_id: hash,
- addresses: txid,
- type: type
- });
- newAddressTx.save(function(err) {
- if (err) {
- return cb(err);
- } else {
- //console.log('address saved: %s', hash);
- //console.log(newAddress);
- return cb();
- }
- });
- return cb();
- });
- }
} else {
//new address
if (type == 'vin') {
@@ -117,24 +125,17 @@ function update_address(hash, txid, amount, type, cb) {
if (err) {
return cb(err);
} else {
- //console.log('address saved: %s', hash);
- //console.log(newAddress);
-
var newAddressTx = new AddressTx({
a_id: hash,
- addresses: txid,
- type: type
+ txid: txid
});
newAddressTx.save(function(err) {
if (err) {
return cb(err);
} else {
- //console.log('address saved: %s', hash);
- //console.log(newAddress);
return cb();
}
});
- return cb();
}
});
}
@@ -255,6 +256,53 @@ function get_market_data(market, cb) {
}
}
+function create_lock(lockfile, cb) {
+ if (settings.lock_during_index == true) {
+ var fname = './tmp/' + lockfile + '.pid';
+ fs.appendFile(fname, process.pid, function (err) {
+ if (err) {
+ console.log("Error: unable to create %s", fname);
+ process.exit(1);
+ } else {
+ return cb();
+ }
+ });
+ } else {
+ return cb();
+ }
+}
+
+function remove_lock(lockfile, cb) {
+ if (settings.lock_during_index == true) {
+ var fname = './tmp/' + lockfile + '.pid';
+ fs.unlink(fname, function (err){
+ if(err) {
+ console.log("unable to remove lock: %s", fname);
+ process.exit(1);
+ } else {
+ return cb();
+ }
+ });
+ } else {
+ return cb();
+ }
+}
+
+function is_locked(lockfile, cb) {
+ if (settings.lock_during_index == true) {
+ var fname = './tmp/' + lockfile + '.pid';
+ fs.exists(fname, function (exists){
+ if(exists) {
+ return cb(true);
+ } else {
+ return cb(false);
+ }
+ });
+ } else {
+ return cb(false);
+ }
+}
+
module.exports = {
// initialize DB
connect: function(database, cb) {
@@ -270,6 +318,16 @@ module.exports = {
});
},
+ is_locked: function(cb) {
+ is_locked("db_index", function (exists) {
+ if (exists) {
+ return cb(true);
+ } else {
+ return cb(false);
+ }
+ });
+ },
+
check_stats: function(coin, cb) {
Stats.findOne({coin: coin}, function(err, stats) {
if(stats) {
@@ -380,29 +438,43 @@ module.exports = {
},
create_tx: function(txid, cb) {
- save_tx(txid, function(err){
- if (err) {
- return cb(err);
- } else {
- //console.log('tx stored: %s', txid);
+ is_locked("db_index", function (exists) {
+ if (exists) {
+ console.log("db_index lock file exists...");
return cb();
+ } else {
+ save_tx(txid, function(err){
+ if (err) {
+ return cb(err);
+ } else {
+ //console.log('tx stored: %s', txid);
+ return cb();
+ }
+ });
}
});
},
create_txs: function(block, cb) {
- lib.syncLoop(block.tx.length, function (loop) {
- var i = loop.iteration();
- save_tx(block.tx[i], function(err){
- if (err) {
- loop.next();
- } else {
- //console.log('tx stored: %s', block.tx[i]);
- loop.next();
- }
- });
- }, function(){
- return cb();
+ is_locked("db_index", function (exists) {
+ if (exists) {
+ console.log("db_index lock file exists...");
+ return cb();
+ } else {
+ lib.syncLoop(block.tx.length, function (loop) {
+ var i = loop.iteration();
+ save_tx(block.tx[i], function(err){
+ if (err) {
+ loop.next();
+ } else {
+ //console.log('tx stored: %s', block.tx[i]);
+ loop.next();
+ }
+ });
+ }, function(){
+ return cb();
+ });
+ }
});
},
@@ -432,7 +504,6 @@ module.exports = {
if (err) {
return cb(err);
} else {
- //console.log(address);
var txs = [];
var count = address.length;
var hashes = address;
@@ -441,13 +512,15 @@ module.exports = {
lib.syncLoop(count, function (loop) {
var i = loop.iteration();
- find_tx(hashes[i].addresses, function (tx) {
- if (tx) {
+ find_tx(hashes[i].txid, function (tx) {
+ if (tx && !txs.includes(tx)) {
txs.push(tx);
loop.next();
- } else {
+ } else if (!txs.includes(tx)) {
txs.push("1. Not found");
loop.next();
+ } else {
+ loop.next();
}
})
}, function () {
@@ -738,65 +811,75 @@ module.exports = {
// updates tx, address & richlist db's; called by sync.js
update_tx_db: function(coin, start, end, timeout, cb) {
- var complete = false;
- if (start < 1) start = 1; // fix for invalid block height (skip genesis block as it should not have valid txs)
- lib.syncLoop((end - start) + 1, function (loop) {
- var x = loop.iteration();
- if (x % 5000 === 0) {
- Tx.find({}).where('blockindex').lt(start + x).sort({timestamp: 'desc'}).limit(settings.index.last_txs).exec(function(err, txs){
- Stats.updateOne({coin: coin}, {
- last: start + x - 1,
- last_txs: '' //not used anymore left to clear out existing objects
- }, function() {});
- });
- }
- lib.get_blockhash(start + x, function(blockhash){
- if (blockhash) {
- lib.get_block(blockhash, function(block) {
- if (block) {
- lib.syncLoop(block.tx.length, function (subloop) {
- var i = subloop.iteration();
- Tx.findOne({txid: block.tx[i]}, function(err, tx) {
- if(tx) {
- tx = null;
- subloop.next();
- } else {
- save_tx(block.tx[i], function(err){
- if (err) {
- console.log(err);
- } else {
- console.log('%s: %s', block.height, block.tx[i]);
- }
- setTimeout( function(){
- tx = null;
- subloop.next();
- }, timeout);
+ is_locked("db_index", function (exists) {
+ if (exists) {
+ console.log("db_index lock file exists...");
+ return cb();
+ } else {
+ create_lock("db_index", function (){
+ var complete = false;
+ lib.syncLoop((end - start) + 1, function (loop) {
+ var x = loop.iteration();
+ if (x % 5000 === 0) {
+ Tx.find({}).where('blockindex').lt(start + x).sort({timestamp: 'desc'}).limit(settings.index.last_txs).exec(function(err, txs){
+ Stats.updateOne({coin: coin}, {
+ last: start + x - 1,
+ last_txs: '' //not used anymore left to clear out existing objects
+ }, function() {});
+ });
+ }
+ lib.get_blockhash(start + x, function(blockhash){
+ if (blockhash) {
+ lib.get_block(blockhash, function(block) {
+ if (block) {
+ lib.syncLoop(block.tx.length, function (subloop) {
+ var i = subloop.iteration();
+ Tx.findOne({txid: block.tx[i]}, function(err, tx) {
+ if(tx) {
+ tx = null;
+ subloop.next();
+ } else {
+ save_tx(block.tx[i], function(err){
+ if (err) {
+ console.log(err);
+ } else {
+ console.log('%s: %s', block.height, block.tx[i]);
+ }
+ setTimeout( function(){
+ tx = null;
+ subloop.next();
+ }, timeout);
+ });
+ }
+ });
+ }, function(){
+ blockhash = null;
+ block = null;
+ loop.next();
});
+ } else {
+ console.log('block not found: %s', blockhash);
+ loop.next();
}
});
- }, function(){
- blockhash = null;
- block = null;
+ } else {
loop.next();
+ }
+ });
+ }, function(){
+ Tx.find({}).sort({timestamp: 'desc'}).limit(settings.index.last_txs).exec(function(err, txs){
+ Stats.update({coin: coin}, {
+ last: end,
+ last_txs: '' //not used anymore left to clear out existing objects
+ }, function() {
+ remove_lock("db_index", function(){
+ return cb();
+ });
});
- } else {
- console.log('block not found: %s', blockhash);
- loop.next();
- }
+ });
});
- } else {
- loop.next();
- }
- });
- }, function(){
- Tx.find({}).sort({timestamp: 'desc'}).limit(settings.index.last_txs).exec(function(err, txs){
- Stats.updateOne({coin: coin}, {
- last: end,
- last_txs: '' //not used anymore left to clear out existing objects
- }, function() {
- return cb();
});
- });
+ }
});
},
diff --git a/lib/settings.js b/lib/settings.js
index edad47d..08b9d94 100644
--- a/lib/settings.js
+++ b/lib/settings.js
@@ -143,6 +143,7 @@ exports.genesis_tx = "dd1d332ad2d8d8f49195056d482ae3c96fd2d16e9d166413b27ca7f197
exports.genesis_block = "0000860fcf946b44df0e7d85d6757d45f8de6f4c9aacc5c7b6abc13db1f68819";
exports.heavy = false;
+exports.lock_during_index = false;
exports.txcount = 100;
exports.show_sent_received = true;
exports.supply = "TXOUTSET";
diff --git a/models/addresstx.js b/models/addresstx.js
index 178a1dd..46517ca 100644
--- a/models/addresstx.js
+++ b/models/addresstx.js
@@ -3,8 +3,7 @@ var mongoose = require('mongoose')
var AddressTXSchema = new Schema({
a_id: { type: String, index: true},
- addresses: { type: String, lowercase: true},
- type: { type: String }
+ txid: { type: String, lowercase: true, index: true}
}, {id: false});
-module.exports = mongoose.model('AddressTx', AddressTXSchema);
+module.exports = mongoose.model('AddressTx', AddressTXSchema);
\ No newline at end of file
diff --git a/package.json b/package.json
index 5f37818..bc87db3 100644
--- a/package.json
+++ b/package.json
@@ -9,8 +9,9 @@
},
"dependencies": {
"express": ">=4.17.1",
+ "intl": "^1.2.5",
"serve-favicon": "^2.5.0",
- "morgan": ">=1.9.1",
+ "morgan": ">=1.9.1",
"cookie-parser": "~1.4.4",
"body-parser": "~1.19.0",
"debug": ">=4.1.1",
diff --git a/routes/index.js b/routes/index.js
index a72158f..29c8dc2 100644
--- a/routes/index.js
+++ b/routes/index.js
@@ -89,7 +89,13 @@ function route_get_tx(res, txid) {
}
function route_get_index(res, error) {
- res.render('index', { active: 'home', error: error, warning: null});
+ db.is_locked(function(locked) {
+ if (locked) {
+ res.render('index', { active: 'home', error: error, warning: locale.initial_index_alert});
+ } else {
+ res.render('index', { active: 'home', error: error, warning: null});
+ }
+ });
}
function route_get_address(res, hash, count) {
@@ -174,22 +180,22 @@ router.get('/network', function(req, res) {
router.get('/reward', function(req, res){
//db.get_stats(settings.coin, function (stats) {
- console.log(stats);
- db.get_heavy(settings.coin, function (heavy) {
- //heavy = heavy;
- var votes = heavy.votes;
- votes.sort(function (a,b) {
- if (a.count < b.count) {
- return -1;
- } else if (a.count > b.count) {
- return 1;
- } else {
- return 0;
- }
- });
+ console.log(stats);
+ db.get_heavy(settings.coin, function (heavy) {
+ //heavy = heavy;
+ var votes = heavy.votes;
+ votes.sort(function (a,b) {
+ if (a.count < b.count) {
+ return -1;
+ } else if (a.count > b.count) {
+ return 1;
+ } else {
+ return 0;
+ }
+ });
- res.render('reward', { active: 'reward', stats: stats, heavy: heavy, votes: heavy.votes });
- });
+ res.render('reward', { active: 'reward', stats: stats, heavy: heavy, votes: heavy.votes });
+ });
//});
});
@@ -299,4 +305,4 @@ router.get('/ext/summary', function(req, res) {
});
});
});
-module.exports = router;
+module.exports = router;
\ No newline at end of file
diff --git a/scripts/sync.js b/scripts/sync.js
index b71e7a6..660e622 100644
--- a/scripts/sync.js
+++ b/scripts/sync.js
@@ -1,12 +1,12 @@
var mongoose = require('mongoose')
- , db = require('../lib/database')
- , Tx = require('../models/tx')
- , Address = require('../models/address')
- , AddressTx = require('../models/addresstx')
- , Richlist = require('../models/richlist')
- , Stats = require('../models/stats')
- , settings = require('../lib/settings')
- , fs = require('fs');
+ , db = require('../lib/database')
+ , Tx = require('../models/tx')
+ , Address = require('../models/address')
+ , AddressTx = require('../models/addresstx')
+ , Richlist = require('../models/richlist')
+ , Stats = require('../models/stats')
+ , settings = require('../lib/settings')
+ , fs = require('fs');
var mode = 'update';
var database = 'index';
@@ -162,7 +162,7 @@ is_locked(function (exists) {
}, function() {
console.log('index cleared (reindex)');
});
- db.update_tx_db(settings.coin, 1, stats.count, settings.check_timeout, function(){
+ db.update_tx_db(settings.coin, 1, stats.count, settings.update_timeout, function(){
db.update_richlist('received', function(){
db.update_richlist('balance', function(){
db.get_stats(settings.coin, function(nstats){
diff --git a/settings.json.template b/settings.json.template
index ad50b5a..83fa8e1 100644
--- a/settings.json.template
+++ b/settings.json.template
@@ -153,6 +153,9 @@
//heavy (enable/disable additional heavy features)
"heavy": false,
+ //disable saving blocks & TXs via API during indexing.
+ "lock_during_index": false,
+
//amount of txs to index per address (stores latest n txs)
"txcount": 100,
diff --git a/views/address.pug b/views/address.pug
index f4d8a57..8584b74 100644
--- a/views/address.pug
+++ b/views/address.pug
@@ -1,9 +1,9 @@
extends layout
block content
- - var balance = (address.received - address.sent) / 100000000;
- - var sent = address.sent /100000000
- - var received = address.received / 100000000
+ - var balance = ((address.received - address.sent) / 100000000).toLocaleString('en',{'minimumFractionDigits':2,'maximumFractionDigits':8,'useGrouping':true});
+ - var sent = (address.sent /100000000).toLocaleString('en',{'minimumFractionDigits':2,'maximumFractionDigits':8,'useGrouping':true})
+ - var received = (address.received / 100000000).toLocaleString('en',{'minimumFractionDigits':2,'maximumFractionDigits':8,'useGrouping':true})
img.qrcode.pull-right.hidden-xs(src='/qr/' + address.a_id)
.col-xs-12.col-md-10.col-md-offset-1
.panel.panel-default.panel-address-summary
@@ -34,11 +34,11 @@ block content
tbody
tr
if settings.show_sent_received == true
- td #{sent.toFixed(8)}
+ td #{sent}
if address.a_id !== 'coinbase'
if settings.show_sent_received == true
- td #{received.toFixed(8)}
- td #{balance.toFixed(8)}
+ td #{received}
+ td #{balance}
.panel.panel-default
.panel-heading
strong #{settings.locale.ex_latest_transactions}
diff --git a/views/block.pug b/views/block.pug
index c97b795..15d28f3 100644
--- a/views/block.pug
+++ b/views/block.pug
@@ -91,10 +91,11 @@ block content
a(href='/tx/' + txn.txid) #{txn.txid}
td #{txn.vout.length}
if txn.vout.length > 0
- - var total = txn.total / 100000000
- td #{total.toFixed(8)}
+ - var total = (txn.total / 100000000).toLocaleString('en',{'minimumFractionDigits':2,'maximumFractionDigits':8,'useGrouping':true});
+ td #{total}
else
- td #{txn.total.toFixed(8)}
+ - var total = (txn.total).toLocaleString('en',{'minimumFractionDigits':2,'maximumFractionDigits':8,'useGrouping':true});
+ td #{total}
td.view_tx
a(href='/tx/' + txn.txid)
span.glyphicon.glyphicon-eye-open
diff --git a/views/includes/address_history.pug b/views/includes/address_history.pug
index c76ab3c..a0c8d74 100644
--- a/views/includes/address_history.pug
+++ b/views/includes/address_history.pug
@@ -29,20 +29,21 @@ script.
if(out > 0 && vin > 0) {
amount = (out - vin) / 100000000
if (amount < 0) {
- amount = amount * -1
- $("td:eq(2)", row).html("-" + amount.toFixed(8)).addClass("info");
+ amount = (amount * -1).toLocaleString('en',{'minimumFractionDigits':2,'maximumFractionDigits':8,'useGrouping':true});
+ $("td:eq(2)", row).html("-" + amount).addClass("info");
} else if (amount > 0) {
- ammount = amount.toFixed(8);
+ amount = amount.toLocaleString('en',{'minimumFractionDigits':2,'maximumFractionDigits':8,'useGrouping':true});
$("td:eq(2)", row).html("+" + amount).addClass("info");
} else {
- $("td:eq(2)", row).html(amount.toFixed(8)).addClass("info");
+ amount = amount.toLocaleString('en',{'minimumFractionDigits':2,'maximumFractionDigits':8,'useGrouping':true});
+ $("td:eq(2)", row).html(amount).addClass("info");
}
}else if(out > 0) {
- amount = out / 100000000;
- $("td:eq(2)", row).html("+" + amount.toFixed(8)).addClass("success");
+ amount = (out / 100000000).toLocaleString('en',{'minimumFractionDigits':2,'maximumFractionDigits':8,'useGrouping':true});
+ $("td:eq(2)", row).html("+" + amount).addClass("success");
}else{
- amount = vin / 100000000;
- $("td:eq(2)", row).html("-" + amount.toFixed(8)).addClass("danger");
+ amount = (vin / 100000000).toLocaleString('en',{'minimumFractionDigits':2,'maximumFractionDigits':8,'useGrouping':true});
+ $("td:eq(2)", row).html("-" + amount).addClass("danger");
}
},
diff --git a/views/includes/rl_balance.pug b/views/includes/rl_balance.pug
index 2692a5e..383b4e5 100644
--- a/views/includes/rl_balance.pug
+++ b/views/includes/rl_balance.pug
@@ -10,8 +10,10 @@ table.table.table-hover.table-bordered(cellspacing="0")
- var count = 0
each item in balance
- count = count + 1
- - var itemFixed = item.balance / 100000000
- - var percentage = (itemFixed / stats.supply) * 100
+ - var itemFixed = (parseInt(item.balance) / 100000000);
+ - var itemFixedParts = itemFixed.toFixed(0).toString().split(".");
+ - var itemFixedStr = itemFixedParts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",") + (itemFixedParts[1] ? "." + itemFixedParts[1] : "");
+ - var percentage = (itemFixed / stats.supply) * 100;
tr
td(style='text-align:center;')
=count
@@ -19,6 +21,6 @@ table.table.table-hover.table-bordered(cellspacing="0")
a(href='/address/' + item.a_id) #{item.a_id}
include ./rl_labels.pug
td.hidden-xs
- =itemFixed.toFixed(8)
+ =itemFixedStr
td.hidden-xs(style='text-align:center;')
=percentage.toFixed(2)
\ No newline at end of file
diff --git a/views/includes/rl_received.pug b/views/includes/rl_received.pug
index 929df2e..045797d 100644
--- a/views/includes/rl_received.pug
+++ b/views/includes/rl_received.pug
@@ -8,8 +8,10 @@ table.table.table-hover.table-bordered(cellspacing="0")
tbody
- var count = 0
each item in received
- - count = count + 1
- - var itemFixed = item.received / 100000000
+ - count = count + 1;
+ - var itemFixed = (parseInt(item.received) / 100000000);
+ - var itemFixedParts = itemFixed.toFixed(0).toString().split(".");
+ - var itemFixedStr = itemFixedParts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",") + (itemFixedParts[1] ? "." + itemFixedParts[1] : "");
tr
td(style='text-align:center;')
=count
@@ -17,4 +19,4 @@ table.table.table-hover.table-bordered(cellspacing="0")
a(href='/address/' + item.a_id) #{item.a_id}
include ./rl_labels.pug
td.hidden-xs
- =itemFixed.toFixed(8)
\ No newline at end of file
+ =itemFixedStr
\ No newline at end of file
diff --git a/views/index.pug b/views/index.pug
index 8bdc873..fcf7c3b 100644
--- a/views/index.pug
+++ b/views/index.pug
@@ -44,7 +44,7 @@ block content
json.data[i]['txid'] = "" + json.data[i]['txid'] + "";
json.data[i]['blockindex'] = "" + json.data[i]['blockindex'] + "";
var amount = json.data[i]['total'] / 100000000;
- json.data[i]['total'] = amount.toFixed(8);
+ json.data[i]['total'] = amount.toLocaleString('en',{'minimumFractionDigits':2,'maximumFractionDigits':8,'useGrouping':true});
json.data[i]['recipients'] = json.data[i]['vout'].length;
}
return json.data;
diff --git a/views/layout.pug b/views/layout.pug
index f4740d9..b0c6b39 100644
--- a/views/layout.pug
+++ b/views/layout.pug
@@ -26,14 +26,14 @@ html
$('##{active}').addClass('active');
function update_stats(){
$.ajax({url: '/ext/summary', success: function(json){
- $("#supply").text(json.data[0].supply);
+ $("#supply").text(parseInt(parseFloat(json.data[0].supply).toFixed(0)).toLocaleString('en'));
$("#masternodeCountOnline").text(json.data[0].masternodeCountOnline).prop("alt", json.data[0].masternodeCountOnline+" nodes online").prop("title", json.data[0].masternodeCountOnline+" nodes online");
$("#masternodeCountOffline").text(json.data[0].masternodeCountOffline).prop("alt", json.data[0].masternodeCountOffline+" unreachable nodes").prop("title", json.data[0].masternodeCountOffline+" unreachable nodes");
$("#spnMasternodeCountOnline").prop("alt", json.data[0].masternodeCountOnline+" nodes online").prop("title", json.data[0].masternodeCountOnline+" nodes online");
$("#spnMasternodeCountOffline").prop("alt", json.data[0].masternodeCountOffline+" unreachable nodes").prop("title", json.data[0].masternodeCountOffline+" unreachable nodes");
- $("#difficulty").text(json.data[0].difficulty);
+ $("#difficulty").text(json.data[0].difficulty.toFixed(2));
$("#difficultyHybrid").text(json.data[0].difficultyHybrid);
- $("#hashrate").text(json.data[0].hashrate);
+ $("#hashrate").text(parseFloat(json.data[0].hashrate).toLocaleString('en'));
$("#lastPrice").text(json.data[0].lastPrice.toFixed(8));
$("#lblConnections").text(json.data[0].connections + ' connections');
$("#lblBlockcount").text(json.data[0].blockcount + ' blocks');
diff --git a/views/movement.pug b/views/movement.pug
index 2d82f3c..bfcb31c 100644
--- a/views/movement.pug
+++ b/views/movement.pug
@@ -45,11 +45,11 @@ block content
json.data[i]['txid'] = "" + json.data[i]['txid'] + ""
var amount = json.data[i]['total'] / 100000000;
if (amount > '#{flagb}') {
- json .data[i]['total'] = "";
+ json .data[i]['total'] = "";
} else if (amount > '#{flaga}') {
- json .data[i]['total'] = "";
+ json .data[i]['total'] = "";
} else {
- json .data[i]['total'] = "";
+ json .data[i]['total'] = "";
}
}
return json.data;
diff --git a/views/richlist.pug b/views/richlist.pug
index 6d39ea4..f5f6c08 100644
--- a/views/richlist.pug
+++ b/views/richlist.pug
@@ -64,25 +64,29 @@ block content
th
div.pull-left(style='background-color:#d9534f;width:20px;height:20px;margin-right:6px;')
span #{settings.locale.rl_top25}
- td #{parseFloat(dista.total).toFixed(8)}
+ - var total = parseFloat(dista.total).toLocaleString('en',{'minimumFractionDigits':2,'maximumFractionDigits':8,'useGrouping':true})
+ td #{total}
td.text-center #{parseFloat(dista.percent).toFixed(2)}
tr
th
div.pull-left(style='background-color:#5cb85c;width:20px;height:20px;margin-right:6px;')
span #{settings.locale.rl_top50}
- td #{parseFloat(distb.total).toFixed(8)}
+ - var total = parseFloat(distb.total).toLocaleString('en',{'minimumFractionDigits':2,'maximumFractionDigits':8,'useGrouping':true})
+ td #{total}
td.text-center #{parseFloat(distb.percent).toFixed(2)}
tr
th
div.pull-left(style='background-color:#428bca;width:20px;height:20px;margin-right:6px;')
span #{settings.locale.rl_top75}
- td #{parseFloat(distc.total).toFixed(8)}
+ - var total = parseFloat(distc.total).toLocaleString('en',{'minimumFractionDigits':2,'maximumFractionDigits':8,'useGrouping':true})
+ td #{total}
td.text-center #{parseFloat(distc.percent).toFixed(2)}
tr
th
div.pull-left(style='background-color:#222;width:20px;height:20px;margin-right:6px;')
span #{settings.locale.rl_top100}
- td #{parseFloat(distd.total).toFixed(8)}
+ - var total = parseFloat(distd.total).toLocaleString('en',{'minimumFractionDigits':2,'maximumFractionDigits':8,'useGrouping':true})
+ td #{total}
td.text-center #{parseFloat(distd.percent).toFixed(2)}
tr
th
diff --git a/views/tx.pug b/views/tx.pug
index 629e54e..d64ee39 100644
--- a/views/tx.pug
+++ b/views/tx.pug
@@ -71,7 +71,7 @@ block content
tr.info(style='text-align:center')
td #{settings.locale.new_coins}
else
- - var ramount = r.amount / 100000000
+ - var ramount = (r.amount / 100000000).toLocaleString('en',{'minimumFractionDigits':2,'maximumFractionDigits':8,'useGrouping':true})
tr
td
if r.addresses != 'private_tx'
@@ -79,9 +79,9 @@ block content
=r.addresses
else
=settings.locale.hidden_sender
- td.danger.hidden-xs #{ramount.toFixed(8)}
+ td.danger.hidden-xs #{ramount}
tr.hidden-lg.hidden-md
- td.danger #{ramount.toFixed(8)} #{settings.symbol}
+ td.danger #{ramount} #{settings.symbol}
else
tr.info(style='text-align:center')
td #{settings.locale.proof_of_stake}
@@ -89,36 +89,37 @@ block content
.panel.panel-default
.panel-heading
strong #{settings.locale.tx_recipients}
- table.table.table-bordered.table-striped.summary-table
+ table.table.table-bordered.table-striped.summary-table
thead
tr
th #{settings.locale.tx_address}
th.hidden-xs #{settings.locale.mkt_amount} (#{settings.symbol})
tbody
each r in tx.vout
- if tx.vout.length > 0
- - var ramount = r.amount / 100000000
+ if tx.vout.length > 0
+ - var ramount = (r.amount / 100000000).toLocaleString('en',{'minimumFractionDigits':2,'maximumFractionDigits':8,'useGrouping':true})
tr
if r.addresses != 'private_tx'
- td
- a.loading(href='/address/' + r.addresses)
- =r.addresses
- td.success.hidden-xs #{ramount.toFixed(8)}
+ td
+ a.loading(href='/address/' + r.addresses)
+ =r.addresses
+ td.success.hidden-xs #{ramount}
else if r.amount > 0
td
=settings.locale.hidden_recipient
- td.success.hidden-xs #{ramount.toFixed(8)}
+ td.success.hidden-xs #{ramount}
else
td(colspan='2')
=settings.locale.hidden_recipient
tr.hidden-lg.hidden-md
- td.success #{ramount.toFixed(8)} #{settings.symbol}
+ td.success #{ramount} #{settings.symbol}
else
+ - var ramount = (r.amount / 100000000).toLocaleString('en',{'minimumFractionDigits':2,'maximumFractionDigits':8,'useGrouping':true})
tr
- td
- a.loading(href='/address/' + r.addresses)
- =r.addresses
- td.success.hidden-xs #{ramount.toFixed(8)}
+ td
+ a.loading(href='/address/' + r.addresses)
+ =r.addresses
+ td.success.hidden-xs #{ramount}
tr.hidden-lg.hidden-md
- td.success #{ramount.toFixed(8)} #{settings.symbol}
+ td.success #{ramount} #{settings.symbol}
.footer-padding
\ No newline at end of file