Files
purple-explorer/routes/index.js
T

331 lines
11 KiB
JavaScript
Raw Normal View History

2019-05-27 10:33:22 -07:00
var express = require('express')
, router = express.Router()
, settings = require('../lib/settings')
, locale = require('../lib/locale')
, db = require('../lib/database')
, lib = require('../lib/explorer')
, qr = require('qr-image');
2019-05-27 10:33:22 -07:00
function route_get_block(res, blockhash) {
lib.get_block(blockhash, function (block) {
if (block != 'There was an error. Check your console.') {
if (blockhash == settings.genesis_block) {
res.render('block', { active: 'block', block: block, confirmations: settings.confirmations, txs: 'GENESIS', showSync: db.check_show_sync_message()});
2019-05-27 10:33:22 -07:00
} else {
db.get_txs(block, function(txs) {
if (txs.length > 0) {
res.render('block', { active: 'block', block: block, confirmations: settings.confirmations, txs: txs, showSync: db.check_show_sync_message()});
2019-05-27 10:33:22 -07:00
} else {
db.create_txs(block, function(){
db.get_txs(block, function(ntxs) {
if (ntxs.length > 0) {
res.render('block', { active: 'block', block: block, confirmations: settings.confirmations, txs: ntxs, showSync: db.check_show_sync_message()});
2019-05-27 10:33:22 -07:00
} else {
route_get_index(res, 'Block not found: ' + blockhash);
}
});
});
}
});
}
} else {
if (!isNaN(blockhash)) {
var height = blockhash;
lib.get_blockhash(height, function(hash) {
if (hash != 'There was an error. Check your console.') {
res.redirect('/block/' + hash);
} else {
route_get_index(res, 'Block not found: ' + blockhash);
}
});
} else {
route_get_index(res, 'Block not found: ' + blockhash);
}
2019-05-27 10:33:22 -07:00
}
});
}
/* GET functions */
function route_get_tx(res, txid) {
if (txid == settings.genesis_tx) {
route_get_block(res, settings.genesis_block);
} else {
db.get_tx(txid, function(tx) {
if (tx) {
lib.get_blockcount(function(blockcount) {
res.render('tx', { active: 'tx', tx: tx, confirmations: settings.confirmations, blockcount: blockcount, showSync: db.check_show_sync_message()});
2019-05-27 10:33:22 -07:00
});
}
else {
lib.get_rawtransaction(txid, function(rtx) {
if (rtx.txid) {
lib.prepare_vin(rtx, function(vin) {
2019-10-17 22:06:30 -06:00
lib.prepare_vout(rtx.vout, rtx.txid, vin, ((typeof rtx.vjoinsplit === 'undefined' || rtx.vjoinsplit == null) ? [] : rtx.vjoinsplit), function(rvout, rvin) {
2019-05-27 10:33:22 -07:00
lib.calculate_total(rvout, function(total){
if (!rtx.confirmations > 0) {
var utx = {
txid: rtx.txid,
vin: rvin,
vout: rvout,
total: total.toFixed(8),
timestamp: rtx.time,
blockhash: '-',
blockindex: -1,
};
res.render('tx', { active: 'tx', tx: utx, confirmations: settings.confirmations, blockcount:-1, showSync: db.check_show_sync_message()});
2019-05-27 10:33:22 -07:00
} else {
var utx = {
txid: rtx.txid,
vin: rvin,
vout: rvout,
total: total.toFixed(8),
timestamp: rtx.time,
blockhash: rtx.blockhash,
blockindex: rtx.blockheight,
};
lib.get_blockcount(function(blockcount) {
res.render('tx', { active: 'tx', tx: utx, confirmations: settings.confirmations, blockcount: blockcount, showSync: db.check_show_sync_message()});
2019-05-27 10:33:22 -07:00
});
}
});
});
});
} else {
route_get_index(res, null);
}
});
}
});
}
}
function route_get_index(res, error) {
res.render('index', { active: 'home', error: error, showSync: db.check_show_sync_message()});
2019-05-27 10:33:22 -07:00
}
function route_get_address(res, hash, count) {
2019-10-17 21:51:13 -06:00
db.get_address(hash, false, function(address) {
2019-05-27 10:33:22 -07:00
if (address) {
var txs = [];
res.render('address', { active: 'address', address: address, txs: txs, showSync: db.check_show_sync_message()});
2019-05-27 10:33:22 -07:00
} else {
route_get_index(res, hash + ' not found');
}
});
}
2020-11-22 14:39:10 -07:00
function route_get_claim_form(res, hash){
db.get_address(hash, false, function(address) {
if (address) {
res.render("claim_address", { active: "address", address: address, showSync: db.check_show_sync_message()});
2020-11-22 14:39:10 -07:00
} else {
route_get_index(res, hash + ' not found');
}
});
}
2019-05-27 10:33:22 -07:00
/* GET home page. */
router.get('/', function(req, res) {
route_get_index(res, null);
});
router.get('/info', function(req, res) {
res.render('info', { active: 'info', address: settings.address, hashes: settings.api, showSync: db.check_show_sync_message() });
2019-05-27 10:33:22 -07:00
});
router.get('/markets/:market', function(req, res) {
var market = req.params['market'];
if (settings.markets.enabled.indexOf(market) != -1) {
db.get_market(market, function(data) {
2020-11-27 20:34:15 -07:00
var exMarket = require('../lib/markets/' + market);
res.render('./market', {
2019-05-27 10:33:22 -07:00
active: 'markets',
marketdata: {
2020-11-27 20:34:15 -07:00
market_name: exMarket.market_name,
2019-05-27 10:33:22 -07:00
coin: settings.markets.coin,
exchange: settings.markets.exchange,
data: data,
},
market: market,
showSync: db.check_show_sync_message()
2019-05-27 10:33:22 -07:00
});
});
} else {
route_get_index(res, null);
}
});
router.get('/richlist', function(req, res) {
if (settings.display.richlist == true ) {
db.get_stats(settings.coin, function (stats) {
db.get_richlist(settings.coin, function(richlist){
//console.log(richlist);
if (richlist) {
db.get_distribution(richlist, stats, function(distribution) {
//console.log(distribution);
res.render('richlist', {
active: 'richlist',
balance: richlist.balance,
received: richlist.received,
stats: stats,
dista: distribution.t_1_25,
distb: distribution.t_26_50,
distc: distribution.t_51_75,
distd: distribution.t_76_100,
diste: distribution.t_101plus,
show_dist: settings.richlist.distribution,
show_received: settings.richlist.received,
show_balance: settings.richlist.balance,
showSync: db.check_show_sync_message()
2019-05-27 10:33:22 -07:00
});
});
} else {
route_get_index(res, null);
}
});
});
} else {
route_get_index(res, null);
}
});
router.get('/movement', function(req, res) {
res.render('movement', {active: 'movement', flaga: settings.movement.low_flag, flagb: settings.movement.high_flag, min_amount:settings.movement.min_amount, showSync: db.check_show_sync_message()});
2019-05-27 10:33:22 -07:00
});
router.get('/network', function(req, res) {
res.render('network', {active: 'network', showSync: db.check_show_sync_message()});
2019-05-27 10:33:22 -07:00
});
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;
}
});
res.render('reward', { active: 'reward', stats: stats, heavy: heavy, votes: votes, showSync: db.check_show_sync_message() });
});
});
2019-05-27 10:33:22 -07:00
});
router.get('/tx/:txid', function(req, res) {
route_get_tx(res, req.params.txid);
});
router.get('/block/:hash', function(req, res) {
route_get_block(res, req.params.hash);
});
2020-11-22 14:39:10 -07:00
router.get('/address/:hash/claim', function(req,res){
route_get_claim_form(res, req.params.hash);
});
2019-05-27 10:33:22 -07:00
router.get('/address/:hash', function(req, res) {
route_get_address(res, req.params.hash, settings.txcount);
});
router.get('/address/:hash/:count', function(req, res) {
route_get_address(res, req.params.hash, req.params.count);
});
router.post('/search', function(req, res) {
2019-10-18 23:05:53 -06:00
var query = req.body.search.trim();
2019-05-27 10:33:22 -07:00
if (query.length == 64) {
if (query == settings.genesis_tx) {
res.redirect('/block/' + settings.genesis_block);
} else {
db.get_tx(query, function(tx) {
if (tx) {
res.redirect('/tx/' +tx.txid);
} else {
lib.get_block(query, function(block) {
if (block != 'There was an error. Check your console.') {
res.redirect('/block/' + query);
} else {
route_get_index(res, locale.ex_search_error + query );
}
});
}
});
}
} else {
2019-10-17 21:51:13 -06:00
db.get_address(query, false, function(address) {
2019-05-27 10:33:22 -07:00
if (address) {
res.redirect('/address/' + address.a_id);
} else {
lib.get_blockhash(query, function(hash) {
if (hash != 'There was an error. Check your console.') {
res.redirect('/block/' + hash);
} else {
route_get_index(res, locale.ex_search_error + query );
}
});
}
});
}
});
router.get('/qr/:string', function(req, res) {
if (req.params.string) {
var address = qr.image(req.params.string, {
type: 'png',
size: 4,
margin: 1,
ec_level: 'M'
});
res.type('png');
address.pipe(res);
}
});
router.get('/ext/summary', function(req, res) {
lib.get_difficulty(function(difficulty) {
2020-11-22 16:07:20 -07:00
difficultyHybrid = '';
2019-05-27 10:33:22 -07:00
if (difficulty['proof-of-work']) {
if (settings.index.difficulty == 'Hybrid') {
difficultyHybrid = 'POS: ' + difficulty['proof-of-stake'];
difficulty = 'POW: ' + difficulty['proof-of-work'];
} else if (settings.index.difficulty == 'POW') {
difficulty = difficulty['proof-of-work'];
} else {
2019-05-27 10:33:22 -07:00
difficulty = difficulty['proof-of-stake'];
}
}
lib.get_hashrate(function(hashrate) {
lib.get_connectioncount(function(connections){
lib.get_masternodecount(function(masternodestotal){
lib.get_blockcount(function(blockcount) {
db.get_stats(settings.coin, function (stats) {
2019-06-24 19:43:54 -06:00
if (hashrate == 'There was an error. Check your console.') {
hashrate = 0;
}
var masternodesoffline = Math.floor(masternodestotal.total - masternodestotal.enabled);
res.send({ data: [{
difficulty: difficulty,
difficultyHybrid: difficultyHybrid,
2020-11-23 17:20:06 -07:00
supply: (stats == null || stats.supply == null ? 0 : stats.supply),
2019-06-24 19:43:54 -06:00
hashrate: hashrate,
2020-11-23 17:20:06 -07:00
lastPrice: (stats == null || stats.last_price == null ? 0 : stats.last_price),
2019-06-24 19:43:54 -06:00
connections: connections,
masternodeCountOnline: masternodestotal.enabled,
masternodeCountOffline: masternodesoffline,
blockcount: blockcount
}]});
2019-05-27 10:33:22 -07:00
});
});
});
});
});
});
});
module.exports = router;